使用R中的findAssocs查找经常出现的带有中心词的单词

时间:2016-07-20 03:41:23

标签: r correlation tm

当我在R中使用findAssocs时,我意识到该功能实际上并没有找到与搜索的术语文档一起出现的单词,而是发生的单词当搜索词经常出现。

我尝试过使用下面的简单测试脚本:

test <- list("housekeeping bath towel housekeeping room","housekeeping dirty","housekeeping very dirty","housekeeping super dirty")
test <-Corpus(VectorSource(test))
test_dtm<-DocumentTermMatrix(test)
test_dtms<-removeSparseTerms(test_dtm,0.99)

findAssocs(test_dtms,"housekeeping",corlimit = 0.1)

R的返回结果是:

$housekeeping
 bath  room towel 
    1     1     1 

注意到&#34;脏&#34;与返回的关键字相比,在4个文档中的3个文档中出现,而在所有文档中只返回一次。

任何人都知道我的剧本出了什么问题,或者有更好的方法可以做到这一点吗?

我想要实现的结果是模型应该反映所有文档中的搜索项经常出现的单词,而不是特定文档中的单词。我尝试将4个文档合并为1,但它并不起作用,因为findAssocs不能处理单个文档。

有任何建议吗?

1 个答案:

答案 0 :(得分:1)

如何使用 quanteda 包来替代?它对返回的相关性没有任何神秘的限制,还有许多其他选项(见?similarity)。

require(quanteda)

testDfm <- dfm(unlist(test), verbose = FALSE)
## Document-feature matrix of: 4 documents, 7 features.
## 4 x 7 sparse Matrix of class "dfmSparse"
##        features
## docs    housekeeping bath towel room dirty very super
##   text1            2    1     1    1     0    0     0
##   text2            1    0     0    0     1    0     0
##   text3            1    0     0    0     1    1     0
##   text4            1    0     0    0     1    0     1

similarity(testDfm, "housekeeping", margin = "features")
## similarity Matrix:
## $housekeeping
##   bath   towel    room    very   super   dirty 
## 1.0000  1.0000  1.0000 -0.3333 -0.3333 -1.0000