首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RWeka NgramTokenizer

RWeka NgramTokenizer
EN

Stack Overflow用户
提问于 2018-02-08 06:27:20
回答 2查看 2.1K关注 0票数 1

我一直在努力使用RWeka包,特别是使用NGramTokenizer函数来生成大写图。在浏览互联网的过程中,我看到过一两名其他用户都有相同的问题,但没有解决办法(这对我来说是可行的)。

下面是一个示例:2-gram and 3-gram instead of 1-gram using RWeka

所以跑步:

代码语言:javascript
复制
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)))

我得到:

代码语言:javascript
复制
       Docs
Terms   txt1 txt2
  house    1    1
  this     1    0
  green    0    1
  • 注意,没有大写,只有一格(房子,这个,绿色)。

我已经在一个不稳定的语料库上尝试过,它的标记器函数被拆分了,以及我是如何从一个DataCamp课程中学习的,但是我得到了下面的问题。

代码语言:javascript
复制
Error in .jcall("RWekaInterfaces", "[S", "tokenize", .jcast(tokenizer,
:    java.lang.NullPointerException Called from: .jcheck()

我在互联网上看到的解决方案还有其他的工作,运行良好,但仍然产生了类似于上面的单元图。

在64位Windows操作系统上运行Java1.8和R3.4.3,两者都是64位。

我试着安装较早版本的RWeka,但在尝试旧版本tm时,它出现了错误,因此我无法让它为我工作(在这个问题开始时,LukeA引用了在so线程中引用的版本)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-08 07:45:30

您需要使用VCorpus而不是Corpus来使用NGramTokenizer

因此,如果您将代码更改为:

代码语言:javascript
复制
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)))

它将返回:

代码语言:javascript
复制
          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
EN

Stack Overflow用户

发布于 2018-02-09 01:23:43

这个问题有两个部分,我可能应该更好地阐述它。

1) @克莱门斯所述的VCorpus元素--只使用语料库函数,就会给您留下单格。

2)然而,在看到这一点并将该方法应用于我的较大数据集后,我得到了以下引用的错误:

.jcall中的错误(“RWekaInterfaces”,"[S","tokenize",.jcast(令牌器,:java.lang.NullPointerException从:.jcheck()调用)

我认为这是由于RWeka、Java或包版本不兼容问题造成的。但是,在看到它从第一步开始运行良好之后,我得出结论,它一定是我的数据集。在调查和测试中,我找到了一个单词的答案和空白。在对这两种情况进行清理之后,我就不再收到错误消息了。注意,即使我的Weka控件设置为min=1,max =2,我仍然必须这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48678969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档