斯坦福CoreNLP仅在Windows上失败

时间:2013-10-08 08:57:09

标签: java linux windows stanford-nlp

我们正在实施一个QA管道,该管道首先使用Stanford CoreNLP解析问题。它在我的Linux安装上完美运行,但在我的同事的Windows上失败了。有没有其他人在遇到过这个问题并有解决方案?

我将从两个设置之间的差异列表开始,最后我将为Windows上的故障提供堆栈跟踪。我不确定需要什么信息,所以如果我错过了一些明显的东西,请原谅我!

O / S:
Linux:Linux Mint 15:Olivia(x86-64)3.8.0-30-generic
Windows:Windows 7 Professional Service Pack 1

Java版本:
Linux:OpenJDK运行时环境(IcedTea 2.3.10)(7u25-2.3.10-1ubuntu0.13.04.2)
Windows:Java(TM)SE运行时环境(版本1.7.0_25-b17)

IDE:
Linux:NetBeans 7.3.1
Windows:Eclipse Indigo(3.7)Service Release 1

Stacktrace:
    edu.stanford.nlp.parser.lexparser.NoSuchParseException
     at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.getBestParse(LexicalizedParserQuery.java:381)
     at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.getBestParse(LexicalizedParserQuery.java:353)
     at edu.stanford.nlp.pipeline.ParserAnnotator.doOneSentence(ParserAnnotator.java:263)
     at edu.stanford.nlp.pipeline.ParserAnnotator.doOneSentence(ParserAnnotator.java:235)
     at edu.stanford.nlp.pipeline.ParserAnnotator.annotate(ParserAnnotator.java:217)
     at edu.stanford.nlp.pipeline.AnnotationPipeline.annotate(AnnotationPipeline.java:70)
     at edu.stanford.nlp.pipeline.StanfordCoreNLP.annotate(StanfordCoreNLP.java:852)
     ...

2 个答案:

答案 0 :(得分:1)

原来是一个记忆问题。我正在分配-Xms2G -Xmx2G,我的同事没有将其更改为默认值。

请注意,Stanford CoreNLP显然不会提醒您内存不足!

答案 1 :(得分:0)

我认为最好的办法就是忘记两个平台之间的差异。相反,专注于在同事的机器上复制和/或调试问题。找出它抛出异常的原因。

旅程的开始是getBestParse的javadoc,它说:

  

“返回最近解析的句子的最佳解析。这将来自因式解析器,如果它已被使用,并且如果它被使用并且成功则从PCFG成功,否则来自依赖解析器。”

     

抛出:NoSuchParseException如果之前没有成功解析的句子


  

请注意,Stanford CoreNLP显然不会提醒您内存不足!

如果这是真的,那意味着CoreNLP正在捕捉并压缩Error例外。这将是一件非常邪恶的事情。

事实上,我更倾向于相信你的代码中的某些内容有问题。例如,如果您生成了工作线程并且未安装默认的未捕获异常处理程序来报告/记录未经检查的异常,则可能会发生这种情况。如果你的一个工作线程然后触发了OOME,则没有任何报告它。