我正在使用R-tm-Rweka包进行一些文本挖掘。而不是在单个单词上构建tf-tdm,这对我的目的来说还不够,我必须提取ngrams。我使用@Ben函数TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 3))
tdm <- TermDocumentMatrix(a, control = list(tokenize = TrigramTokenizer))
提取三卦。输出有明显错误,见下文。它拾取了4个,3个和2个单词的短语。理想情况下,它应该只获取4个单词的名词短语并删除(3和2个单词)休息。如何强制使用此解决方案,例如Python NLTK有备份标记器选项?
抽象策略->this is incorrect
&gt;
抽象战略委员会->incorrect
抽象策略棋盘游戏-> this should be the correct output
埃森哲执行官
埃森哲执行简单
埃森哲执行简单评论
非常感谢。
答案 0 :(得分:0)
我认为你与你所做的尝试非常接近。除了你必须明白你所说的Weka
要做的是捕获2克和3克令牌;这就是Weka_control
的指定方式。
相反,我建议在不同的标记器中使用不同的标记大小,并根据您的偏好或决策规则选择或合并结果。
我认为在n-gram wordclouds上查看这个great tutorial是值得的。
n-gram文本挖掘的实体代码段是:
# QuadgramTokenizer ####
QuadgramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 4, max = 4)
为4克,
# TrigramTokenizer ####
TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 3, max = 3)
3克,当然还有
# BigramTokenizer ####
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2)
为2克。
您可以通过单独运行不同克大小而不是将Weka_control
设置为范围来避免您之前的问题。
您可以像这样应用标记器:
tdm.ng <- TermDocumentMatrix(ds5.1g, control = list(tokenize = BigramTokenizer))
dtm.ng <- DocumentTermMatrix(ds5.1g, control = list(tokenize = BigramTokenizer))
如果您仍有问题,请提供一个reproducible示例,我会跟进。