簡體   English   中英

計算 R 中多詞的詞頻?

[英]Calculating word frequency for multi-words in R?

我正在嘗試計算給定文本中多詞的頻率。 例如,考慮以下文本:“環境研究環境研究環境研究研究科學能源、經濟學、農業、生態學和生物學”。 然后我想要文本中出現“環境研究”這個組合詞的次數。 這是我嘗試過的代碼。

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)

但是,此代碼分別生成每個單詞的頻率。 相反,我如何獲得“環境研究”在文本中一起出現的次數? 謝謝!

如果你已經有一個多詞列表並且你想計算它們在文本中的頻率,你可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM