我正在使用R-tm-Rweka软件包进行一些文本挖掘。与其在单个单词上构建tf-tdm(这对我的目的而言还不够),我必须提取ngram。我使用@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
>
抽象策略板->incorrect
抽象策略板游戏-> this should be the correct output
强调行政人员
强调行政人员简单
强调行政人员简单注释
非常感谢。
我认为您与您所做的尝试非常接近。除了您必须了解要告诉Weka
您执行的操作是捕获2克和3克令牌之外;这Weka_control
就是指定的方式。
相反,我建议在不同的令牌生成器中使用不同的令牌大小,并根据您的偏好或决策规则选择或合并结果。
我认为值得一看有关n-gram wordclouds的出色教程。
用于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))
如果仍然有问题,请提供一个可复制的示例,我将跟进。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句