首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opennlp.groovy有NullPointerException

opennlp.groovy有NullPointerException
EN

Stack Overflow用户
提问于 2013-04-24 04:12:19
回答 1查看 282关注 0票数 0

我正在尝试使用GitHub中的以下代码片段,以便可以在Groovy脚本中使用OpenNLP工具。

(来自https://gist.github.com/nagaimasato/1178725的OpenNLP类)

代码语言:javascript
复制
#!/usr/bin/env groovy
@Grapes(
    @Grab(
      group='org.apache.opennlp',
      module='opennlp-tools',
      version='1.5.3'
    )
  )

import opennlp.tools.tokenize.*
import opennlp.tools.postag.*

OpenNLP nlp = new OpenNLP()

def tokens = nlp.workTokenize("Hello world")
println tokens

class OpenNLP {
    static TokenizerModel tokenizerModel
    static POSModel posModel
    static {
        def classLoader = OpenNLP.class.classLoader
        classLoader.getResource('opennlp/en-token.bin').withInputStream {
            tokenizerModel = new TokenizerModel(it)
        }
        classLoader.getResource('opennlp/en-pos-maxent.bin').withInputStream {
            posModel = new POSModel(it)
        }
    }

    Tokenizer tokenizer
    POSTagger tagger

    OpenNLP() {
        tokenizer = new TokenizerME(tokenizerModel)
        tagger = new POSTaggerME(posModel)
    }

    List workTokenize(String text) {
        return tokenizer.tokenize(text)
    }

    List posTag(List tokens) {
        return [tokens, tagger.tag(tokens)].transpose() 
    }
}

当我尝试运行脚本时,我得到了以下错误:

代码语言:javascript
复制
Caught: java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
    at Greetings.class$(Greetings.groovy)
    at Greetings.$get$$class$OpenNLP(Greetings.groovy)
    at Greetings.run(Greetings.groovy:13)
Caused by: java.lang.NullPointerException: Cannot invoke method withInputStream() on null object
    at OpenNLP.<clinit>(Greetings.groovy:25)
    ... 3 more

我将en-token.bin和en-pos-maxent.bin放在脚本可以找到的正确位置,但是当我打印它时,classLoader.getResource("opennlp/en-token.bin")确实是空的。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-07-21 10:57:33

确保en-token.binen-pos-maxent.bin文件位于名为opennlp的目录中,并且类路径包含opennlp的父目录。

请注意,当您执行Groovy脚本时,./包含在类路径中,因此,如果您的opennlp目录与Groovy脚本位于同一目录中,并且您也在该目录中调用了Groovy脚本,那么它应该可以工作(至少对我来说是这样)。但是,如果您在当前不在该目录中的情况下执行脚本(例如,使用像path/to/script.groovy这样的路径),它将不起作用。在这种情况下,您可以只使用groovy -cp path/to path/to/script.groovy调用它,从而将opennlp目录的父目录手动放入类路径中。

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

https://stackoverflow.com/questions/16178297

复制
相关文章

相似问题

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