0

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

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

操作系统:
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)
     ...
4

2 回答 2

1

原来是内存问题。我正在分配-Xms2G -Xmx2G,我的同事没有将其从默认值更改。

请注意,Stanford CoreNLP 显然不会提醒您它没有足够的内存!

于 2013-10-08T09:17:35.253 回答
0

我认为你最好的选择是忘记这两个平台之间的差异。相反,专注于在同事的机器上重现和/或调试问题。弄清楚为什么它会抛出该异常。

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

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

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


请注意,Stanford CoreNLP 显然不会提醒您它没有足够的内存!

如果这是真的,那意味着 CoreNLP 正在捕获和压缩Error异常。那将是一件完全邪恶的事情。

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

于 2013-10-08T09:08:11.663 回答