如何在 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 示例,我会跟进。
我正在使用 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 示例,我会跟进。