我正在尝试将我的Stanford CoreNLP版本升级到最新版本(以前是在v3.5.2上,尝试升级到v3.6.0)。在编译了v3.6.0所需的所有新jar之后,我启动了一个独立的Stanford CoreNLP服务器(使用Apache Thrift v0.9.3)。
此外,我正在使用斯坦福大学的Shift Reduce Parser,可以在以下链接中找到:Stanford Shift Reduce Parser。我相信该模型的最新版本于2014年10月23日发布。我特别需要的模型是englishSR.beam.ser.gz(英文Beam Search Shift Reduce模型)。
不幸的是,在运行我的新服务器(Stanford CoreNLP v3.6.0 / Apache Thrift v0.9.3)时,日志显示错误:
Reading in configuration from scripts/config...
Initializing Parser...
Loading classifier from edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz ... done [0.6 sec].
Loading classifier from edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz ... done [0.5 sec].
Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... done [1.5 sec].
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/defs.sutime.txt
May 20, 2016 3:41:00 AM edu.stanford.nlp.ling.tokensregex.CoreMapExpressionExtractor appendRules
INFO: Read 83 rules
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.sutime.txt
May 20, 2016 3:41:01 AM edu.stanford.nlp.ling.tokensregex.CoreMapExpressionExtractor appendRules
INFO: Read 267 rules
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.holidays.sutime.txt
May 20, 2016 3:41:01 AM edu.stanford.nlp.ling.tokensregex.CoreMapExpressionExtractor appendRules
INFO: Read 25 rules
Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [0.4 sec].
03:41:01.566 [main] ERROR edu.stanford.nlp.io.IOUtils - Loading parser from serialized file edu/stanford/nlp/models/srparser/englishSR.beam.ser.gz ...
done [10.4 sec].
Initializing Tokenizer...
The CoreNLP server is running...
相反,这是运行旧服务器时看到的日志(Stanford CoreNLP v3.5.2 / Thrift v0.9.3):
Reading in configuration from scripts/config...
Initializing Parser...
Loading classifier from edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz ... done [1.3 sec].
Loading classifier from edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz ... done [1.1 sec].
Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... done [2.7 sec].
Initializing JollyDayHoliday for SUTime from classpath: edu/stanford/nlp/models/sutime/jollyday/Holidays_sutime.xml as sutime.binder.1.
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/defs.sutime.txt
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.sutime.txt
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.holidays.sutime.txt
Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [0.5 sec].
Loading parser from serialized file edu/stanford/nlp/models/srparser/englishSR.beam.ser.gz ... done [9.8 sec].
Adding annotator dcoref
Initializing Tokenizer...
The CoreNLP server is running...
正如您所看到的,新服务器在尝试加载srparser时出错,并且最终没有“添加注释器dcoref”。我没有修改任何其他文件,我不确定是什么导致了这种差异。目前正在寻找斯坦福Core NLP属性文件,但我将非常感谢有关此问题的任何帮助。提前谢谢!
答案 0 :(得分:0)
我运行此命令并没有问题:
java -Xmx6g -cp "stanford-corenlp-full-2015-12-09/*:stanford-english-corenlp-2016-01-10-models.jar" edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse -file sample-text.txt -outputFormat text -parse.model edu/stanford/nlp/models/srparser/englishSR.beam.ser.gz
这是使用Stanford CoreNLP 3.6.0的分发版和我们使用的最新模型罐。
确保只使用那些罐子,只使用那些罐子,如果你的CLASSPATH中有旧版本的东西浮动,可能会导致兼容性问题,这可能会使事情无效。
而且要明确的是,该发行版附带了一个标准模型jar,它有一些基本的东西可以使用该工具包。然后单独有英语模型jar,它是巨大的,包含所有英语资源。
英语转换减少解析器模型都在我们现在分发的英语模型jar中,它具有所有英语资源。这是获得标准jar中不可用的英语资源的推荐方法。我可能需要更新一些页面以反映此信息。可能旧的shift减少模型jar与3.6.0不兼容,我会调查。
所有这些都可以在这里找到:http://stanfordnlp.github.io/CoreNLP/download.html
如果您仍有问题请告诉我,并告诉我导致问题的罐子来自哪里,我会调查。但是,如果您使用从上面的链接下载的资源运行该命令,它应该可以正常工作。
答案 1 :(得分:0)
您是否调用了ShiftReduceParser.loadModel方法?
此方法调用IOUtils.readObjectAnnouncingTimingFromURLOrClasspathOrFileSystem方法,其来源如下:
try {
Timing timing = new Timing();
logger.error(msg + ' ' + path + " ... ");
obj = IOUtils.readObjectFromURLOrClasspathOrFileSystem(path);
timing.done();
} catch (IOException | ClassNotFoundException e) {
throw new RuntimeIOException(e);
}
return obj;
“logger.error”可能是个错误。我认为它应该是“logger.info”。