我试图找到一个实际上可以找到R文本挖掘包中最常用的两个和三个单词短语的代码(也许还有另一个我不知道的包).我一直在尝试使用标记器,但似乎没有运气.
如果您过去曾处理过类似情况,您是否可以发布经过测试且实际有效的代码?非常感谢!
我有大约一千个潜在的调查项目作为字符串向量,我想减少到几百.通常,当我们谈论数据减少时,我们有实际数据.我将项目管理给参与者并使用因子分析,PCA或其他一些降维方法.
就我而言,我没有任何数据.只是项目(即文本字符串).我想通过消除具有相似含义的项目来减少集合.据推测,如果实际给予参与者,他们将是高度相关的.
我一直在阅读有关文本分析的聚类方法.这个SO问题展示了我在不同的例子中看到过的方法.OP指出,群集解决方案并不能完全回答他/她的问题.以下是在我的案例中如何应用(令人不满意):
# get data (2 columns, 152 rows)
Run Code Online (Sandbox Code Playgroud)
使用样本项的dput()链接到text.R文件
# clustering
library(tm)
library(Matrix)
x <- TermDocumentMatrix( Corpus( VectorSource(text$item) ) )
y <- sparseMatrix( i=x$i, j=x$j, x=x$v, dimnames = dimnames(x) )
plot( hclust(dist(t(y))) )
Run Code Online (Sandbox Code Playgroud)
该图显示项目145和149是聚类的:
145"让你知道你不被通缉"
149"让你知道他爱你"
这些项目共享相同的词干,"让你知道",这可能是聚类的原因.从语义上讲,它们是对立的.
OP与他/她的例子有类似的挑战.一位意见提供者指出wordnet包装是一种可能的解决方案.
问题(根据反馈编辑)
我怎样才能阻止像145和149这样的项目进行聚类,因为它们共享干?
问题重点较少的次要问题:有人在这里看到更好的解决方案吗?我遇到的许多方法都涉及监督学习,测试/训练数据集和分类.我相信我正在寻找的是更多的语义相似性/聚类(例如,FAC pdf).
我正在尝试利用三元组来预测下一个单词。
我已经能够上传语料库并根据频率识别最常见的三元组。我在 R 中使用了“ngrams”、“RWeka”和“tm”包。我按照这个问题寻求指导:
text1<-readLines("MyText.txt", encoding = "UTF-8")
corpus <- Corpus(VectorSource(text1))
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 3, max = 3))
tdm <- TermDocumentMatrix(corpus, control = list(tokenize = BigramTokenizer))
Run Code Online (Sandbox Code Playgroud)
如果用户要输入一组单词,我将如何生成下一个单词?例如,如果用户输入“can of”,我将如何检索三个最可能的单词(例如啤酒、苏打水、油漆等)?