Получить термины частоты внутри категорий в словаре R - PullRequest
0 голосов
/ 05 июня 2018

У меня есть словарь с несколькими подкатегориями, и я хотел бы найти наиболее часто встречающиеся слова и биграммы в каждой подкатегории, используя R.

Я использую большой набор данных, но вот пример того, как у меня выглядит:

s <-  "Day after day, day after day,
We stuck, nor breath nor motion;"

library(stringi)
x <- stri_replace_all(s, "", regex="<.*?>") 
x <- stri_trim(s)
x <- stri_trans_tolower(s) 

library(quanteda)
toks <- tokens(x) 
toks <- tokens_wordstem(toks) 

dtm <- dfm(toks, 
       tolower=TRUE, stem=TRUE,
       remove=stopwords("english"))

dict1 <- dictionary(list(a=c("day*", "week*", "month*"),
                    b=c("breath*","motion*")))

dict_dtm2 <- dfm_lookup(dtm, dict1, nomatch="_unmatched")                                 
tail(dict_dtm2)    

Это дает мне общую частоту для каждой подкатегории, но не частоту каждого отдельного слова в этих подкатегориях.Результаты, которые я ищу, будут выглядеть примерно так:

words(a)   freq
day         4
week        0
month       0

words(b)   freq
breath     1
motion     1 

Буду признателен за любую помощь в этом!

1 Ответ

0 голосов
/ 05 июня 2018

Насколько я понимаю ваш вопрос, я полагаю, что вы ищете команду table().Вам нужно немного поработать над регулярными выражениями, чтобы обработать первое предложение, но я верю, что вы можете это сделать.Идея может быть следующей:

s <-  "day after day day after day We stuck nor breath nor motion"
s <- strsplit(s, "\\s+")

dict <- list(a<- c("day", "week", "month"),
                        b<-c("breath","motion"))
lapply(dict, function(x){
                Wordsinvect<-intersect(unlist(x),unlist(s))
                return(table(s)[Wordsinvect])}
)


# [[1]]
# day 
# 4 
# 
# [[2]]
# s
# breath motion 
# 1      1 

Надеюсь, это поможет.Ура!

...