簡體   English   中英

創建短語的“單詞”雲,而不是R中的單個單詞

[英]Creating “word” cloud of phrases, not individual words in R

我試圖從一個短語列表中創建一個詞雲,其中許多是重復的,而不是單個詞。 我的數據看起來像這樣,我的數據框的一列是短語列表。

df$names <- c("John", "John", "Joseph A", "Mary A", "Mary A", "Paul H C", "Paul H C")

我想制作一個詞雲,其中所有這些名稱都被視為顯示頻率的單個短語,而不是構成它們的單詞。 我一直在使用的代碼如下:

df.corpus <- Corpus(DataframeSource(data.frame(df$names)))
df.corpus <- tm_map(client.corpus, function(x) removeWords(x, stopwords("english")))
#turning that corpus into a tDM
tdm <- TermDocumentMatrix(df.corpus)
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
pal <- brewer.pal(9, "BuGn")
pal <- pal[-(1:2)]
#making a worcloud
png("wordcloud.png", width=1280,height=800)
wordcloud(d$word,d$freq, scale=c(8,.3),min.freq=2,max.words=100, random.order=T, rot.per=.15, colors="black", vfont=c("sans serif","plain"))
dev.off()

這會創建一個單詞雲,但它是每個組成單詞,而不是短語。 所以,我看到“A”的相對頻率。 “H”,“John”等而不是“Joseph A”,“Mary A”等的相對頻率,這就是我想要的。

我確信修復並不復雜,但我無法理解! 我將不勝感激任何幫助。

您的困難在於, df$names每個元素都被tm的函數視為“文檔”。 例如,文檔John A包含JohnA這兩個詞。 聽起來你想保持原樣名稱,並且只計算它們的出現次數 - 你可以只使用table

library(wordcloud)
df<-data.frame(theNames=c("John", "John", "Joseph A", "Mary A", "Mary A", "Paul H C", "Paul H C"))
tb<-table(df$theNames)
wordcloud(names(tb),as.numeric(tb), scale=c(8,.3),min.freq=1,max.words=100, random.order=T, rot.per=.15, colors="black", vfont=c("sans serif","plain"))

在此輸入圖像描述

安裝RWeka及其依賴項,然后嘗試:

library(RWeka)
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
# ... other tokenizers
tok <- BigramTokenizer
tdmgram <- TermDocumentMatrix(df.corpus, control = list(tokenize = tok))
#... create wordcloud

上面的tokenizer-line將你的文本切成長度為2的短語。
更具體地說,它創建了minlength 2和maxlength 2的短語。
使用Weka的通用NGramTokenizer算法,您可以創建不同的標記器(例如minlength 1,maxlength 2),您可能希望嘗試不同的長度。 您也可以將它們稱為tok1,tok2,而不是我上面使用過的詳細“BigramTokenizer”。

暫無
暫無

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

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