【问题标题】:Stanford NLP Server "Could not handle incoming annotation" in German斯坦福 NLP 服务器“无法处理传入的注释”(德语)
【发布时间】:2016-11-07 10:32:18
【问题描述】:

我想使用带有德语文本的斯坦福 NLP 服务器。我测试了http://corenlp.run/,它在德语中运行良好。如果我在自己的机器上尝试 使用

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer [端口] [超时]

它只适用于英语。如果我选择德语,我会收到错误消息

无法处理传入的注释

命令行显示:

java.lang.NullPointerException 在 java.util.Properties$LineReader.readLine(Properties.java:434) 在 java.util.Properties.load0(Properties.java:353) 在 java.util.Properties.load(Properties.java:341) 在 edu.stanford.nlp.pipeline.StanfordCoreNLPServer$CoreNLPHandler.getProperties(StanfordCoreNLPServer.java:681) 在 edu.stanford.nlp.pipeline.StanfordCoreNLPServer$CoreNLPHandler.handle(StanfordCoreNLPServer.java:540) 在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) 在 sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83) 在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82) 在 sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675) 在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) 在 sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

我想我必须在某处添加德语 .jar 文件,但我找不到如何以及在哪里?

【问题讨论】:

    标签: java nlp stanford-nlp


    【解决方案1】:

    好的,我解压缩了德语 .jar 文件并使用了其中的属性文件,它像这样锁定。

    annotators = tokenize, ssplit, pos, ner, parse
    
    tokenize.language = de
    
    pos.model = edu/stanford/nlp/models/pos-tagger/german/german-hgc.tagger
    
    ner.model = edu/stanford/nlp/models/ner/german.conll.hgc_175m_600.crf.ser.gz
    ner.applyNumericClassifiers = false
    ner.useSUTime = false
    
    parse.model = edu/stanford/nlp/models/lexparser/germanFactored.ser.gz
    
    # depparse
    depparse.model    = edu/stanford/nlp/models/parser/nndep/UD_German.gz
    depparse.language = german
    

    我是这样启动服务器的

    java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -props StanfordCoreNLP-german.properties
    

    但德语仍然无法正常工作。

    我找不到如何处理“*”。我也尝试添加

    <dependency>
        <groupId>edu.stanford.nlp</groupId>
        <artifactId>stanford-corenlp</artifactId>
        <version>3.7.0</version>
        <classifier>models-german</classifier>
    </dependency>
    

    到 pom.xml

    【讨论】:

    • 顺便说一句,3.7.0 目前不在 Maven 中,因此将其添加到 pom.xml 将不起作用。
    【解决方案2】:

    3.7.0 目前处于测试模式。

    所以请务必重新下载 3.7.0 的最新版本。

    如果你用这个命令启动服务器:

    java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLPServer
    

    注意:您将需要所有的罐子

    stanford-corenlp-full-2016-10-31/*
    

    stanford-german-corenlp-models-current.jar
    

    在您的 CLASSPATH 中以使此命令起作用。德文jar包路径有问题,我刚刚修复的,也重新下载一下吧。

    使用此命令发出您的请求:

    wget --post-data '<insert German text here...>' 'localhost:9000/?properties={"annotators":"tokenize,ssplit,pos,ner,parse","pipelineLanguage":"de","outputFormat":"json"}' -O -
    

    它应该可以正常工作!

    注意:要将 jars 放入 CLASSPATH 中,您可以发出以下命令:

    export CLASSPATH=/path/to/stanford-corenlp-full-2016-10-31/*:/path/to/stanford-german-corenlp-models-current.jar
    

    (将 /path/to 替换为这些资源在您计算机上的任何位置)

    或者当你调用java时你可以指定一个CLASSPATH,像这样:

    java -cp "/path/to/stanford-corenlp-full-2016-10-31/*:/path/to/stanford-german-corenlp-models-current.jar" ...
    

    服务器查看请求中的“pipelineLanguage”属性以加载德语属性,因此将“-prop”与 edu.stanford.nlp.pipeline.StanfordCoreNLPServer 一起使用将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      相关资源
      最近更新 更多