Вычисление частоты слов для нескольких слов в R? - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь вычислить частоту использования нескольких слов в заданном тексте. Например, рассмотрим текст: «Исследования окружающей среды Исследования окружающей среды Исследования окружающей среды изучают науку об энергии, экономике, сельском хозяйстве, экологии и биологии». И затем я хочу, сколько раз объединенные слова «экологические исследования» встречаются в тексте. Вот код, который я пробовал.

library(tm)
#Reading the data
text = readLines(file.choose())
text1 = Corpus(VectorSource(text))

#Cleaning the data
text1 = tm_map(text1, content_transformer(tolower))
text1 = tm_map(text1, removePunctuation)
text1 = tm_map(text1, removeNumbers)
text1 = tm_map(text1, stripWhitespace)
text1 = tm_map(text1, removeWords, stopwords("english"))

#Making a document matrix
dtm = TermDocumentMatrix(text1)
m11 = as.matrix(text1)
freq11 = sort(rowSums(m11), decreasing=TRUE)
d11 = data.frame(word=names(freq11), freq=freq11)
head(d11,9)

Однако этот код определяет частоту каждого слова отдельно. Вместо этого, как мне узнать, сколько раз «экологические исследования» встречаются вместе в тексте? Спасибо!

1 Ответ

1 голос
/ 09 мая 2020

Если у вас уже есть список многословных слов и вы хотите вычислить их частоту в тексте, вы можете использовать str_extract_all:

text <- "Environmental Research Environmental Research Environmental Research study science energy, economics, agriculture, ecology, and biology"

library(stringr)
str_extract_all(text, "[Ee]nvironmental [Rr]esearch")
[[1]]
[1] "Environmental Research" "Environmental Research" "Environmental Research"

Если вы хотите знать, как часто встречается многословие, вы можете сделайте это:

length(unlist(str_extract_all(text, "[Ee]nvironmental [Rr]esearch")))
[1] 3

Если вы заинтересованы в извлечении всех составных слов сразу, вы можете поступить следующим образом:

Сначала определите вектор со всеми составными словами:

multiwords <- c("[Ee]nvironmental [Rr]esearch", "study science energy")

Затем используйте paste0, чтобы свернуть их в одну строку альтернативных шаблонов, и используйте str_extract_all в этой строке:

str_extract_all(text, paste0(multiwords, collapse = "|"))
[[1]]
[1] "Environmental Research" "Environmental Research" "Environmental Research" "study science energy"

Чтобы получить частоты многословных слов, вы можете использовать table:

table(str_extract_all(text, paste0(multiwords, collapse = "|")))

Environmental Research   study science energy 
                     3                      1
...