安装 NgramTokenizer
RWeka NgramTokenizer
我一直在努力使用 RWeka 程序包,特别是使用 NGramTokenizer 函数来制作双字母组。通过搜索互联网,我看到一两个其他用户遇到同样的问题但没有解决方案(对我有用)。
下面是一个例子:
2-gram and 3-gram instead of 1-gram using RWeka
所以运行:
library(RWeka)
library(tm)
as.matrix(TermDocumentMatrix(Corpus(VectorSource(c(txt1 = "This is my house",
txt2 = "My house is green"))),
list(tokenize = function(x) NGramTokenizer(x,
Weka_control(min=2,
max=2)),
tolower = TRUE)))
我得到:
Docs
Terms txt1 txt2
house 1 1
this 1 0
green 0 1
- 注意没有二元组,只有一元组(house、this、green)。
我已经在易变的语料库上尝试过,分词器函数以及我如何从 DataCamp 课程中学习,但出现了以下问题。
Error in .jcall("RWekaInterfaces", "[S", "tokenize", .jcast(tokenizer,
: java.lang.NullPointerException Called from: .jcheck()
我在 Internet 上看到的其他解决方案 运行 很好,但仍然会产生如上所示的 unigrams。
运行 Java 1.8 和 R 3.4.3 在 64 位上都是 64 位 Windows OS.
我尝试安装旧版本的 RWeka,但是在尝试安装旧版本的 tm 时出现了错误,所以我无法让它为我工作(LukeA 在链接的 SO 线程中引用的使用版本这个问题的开头)。
您需要使用 VCorpus
而不是 Corpus
才能使用 NGramTokenizer
。
因此,如果您将代码更改为:
as.matrix(TermDocumentMatrix(VCorpus(VectorSource(c(txt1 = "This is my house",
txt2 = "My house is green"))),
list(tokenize = function(x) NGramTokenizer(x,
Weka_control(min=2,
max=2)),
tolower = TRUE)))
会return:
Docs
Terms 1 2
house is 0 1
is green 0 1
is my 1 0
my house 1 1
this is 1 0
这个问题有两个部分,我可能应该更清楚地表达出来。
1) @clemens 提到的 VCorpus 元素 - 只使用语料库函数会让你得到 unigrams
2) 然而,在看到并在我的更大数据集上应用该方法后,我得到了下面引用的错误:
Error in .jcall("RWekaInterfaces", "[S", "tokenize", .jcast(tokenizer,
: java.lang.NullPointerException Called from: .jcheck()
我认为这是由于 RWeka、Java 或包版本不兼容问题。但是,在看到它从第 1 步开始运行良好后,我断定它一定是我的数据集。在调查和测试中,我发现了一个单词的答案和空白。清理完这两个之后,我不再收到错误消息。请注意,即使我的 Weka Control 的设置为 min=1, max =2.
,我仍然必须这样做
我一直在努力使用 RWeka 程序包,特别是使用 NGramTokenizer 函数来制作双字母组。通过搜索互联网,我看到一两个其他用户遇到同样的问题但没有解决方案(对我有用)。
下面是一个例子: 2-gram and 3-gram instead of 1-gram using RWeka
所以运行:
library(RWeka)
library(tm)
as.matrix(TermDocumentMatrix(Corpus(VectorSource(c(txt1 = "This is my house",
txt2 = "My house is green"))),
list(tokenize = function(x) NGramTokenizer(x,
Weka_control(min=2,
max=2)),
tolower = TRUE)))
我得到:
Docs
Terms txt1 txt2
house 1 1
this 1 0
green 0 1
- 注意没有二元组,只有一元组(house、this、green)。
我已经在易变的语料库上尝试过,分词器函数以及我如何从 DataCamp 课程中学习,但出现了以下问题。
Error in .jcall("RWekaInterfaces", "[S", "tokenize", .jcast(tokenizer,
: java.lang.NullPointerException Called from: .jcheck()
我在 Internet 上看到的其他解决方案 运行 很好,但仍然会产生如上所示的 unigrams。
运行 Java 1.8 和 R 3.4.3 在 64 位上都是 64 位 Windows OS.
我尝试安装旧版本的 RWeka,但是在尝试安装旧版本的 tm 时出现了错误,所以我无法让它为我工作(LukeA 在链接的 SO 线程中引用的使用版本这个问题的开头)。
您需要使用 VCorpus
而不是 Corpus
才能使用 NGramTokenizer
。
因此,如果您将代码更改为:
as.matrix(TermDocumentMatrix(VCorpus(VectorSource(c(txt1 = "This is my house",
txt2 = "My house is green"))),
list(tokenize = function(x) NGramTokenizer(x,
Weka_control(min=2,
max=2)),
tolower = TRUE)))
会return:
Docs
Terms 1 2
house is 0 1
is green 0 1
is my 1 0
my house 1 1
this is 1 0
这个问题有两个部分,我可能应该更清楚地表达出来。
1) @clemens 提到的 VCorpus 元素 - 只使用语料库函数会让你得到 unigrams
2) 然而,在看到并在我的更大数据集上应用该方法后,我得到了下面引用的错误:
Error in .jcall("RWekaInterfaces", "[S", "tokenize", .jcast(tokenizer, : java.lang.NullPointerException Called from: .jcheck()
我认为这是由于 RWeka、Java 或包版本不兼容问题。但是,在看到它从第 1 步开始运行良好后,我断定它一定是我的数据集。在调查和测试中,我发现了一个单词的答案和空白。清理完这两个之后,我不再收到错误消息。请注意,即使我的 Weka Control 的设置为 min=1, max =2.
,我仍然必须这样做