如何在 RWeka 中实现备份分词器开关?

How to implement a backup tokenizer switch in RWeka?

我正在使用 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-gram 和 3-gram 标记; Weka_control 就是这样指定的。

相反,我建议在不同的分词器和 select 中使用不同的分词大小,或者根据您的偏好或决策规则合并结果。

我认为值得在 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 示例,我会跟进。