我试图弄清楚为什么将-nthreads {int}
参数添加到Stanford CoreNLP(版本stanford-corenlp-full-2015-12-09
)会导致所有令牌的输出NER值为O(=不是命名实体)。
举个简单的例子,创建一个名为sample-file.txt
的文件,并将其内容说成Samuel Huntington
。然后运行:
java -Xmx6g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -file sample-file.txt -outputFormat json
这将产生预期的输出,与#34;塞缪尔"被认可为一个人:
{
"sentences": [
{
"index": 0,
"parse": "SENTENCE_SKIPPED_OR_UNPARSABLE",
"tokens": [
{
"index": 1,
"word": "Samuel",
"originalText": "Samuel",
"lemma": "Samuel",
"characterOffsetBegin": 0,
"characterOffsetEnd": 6,
"pos": "NNP",
"ner": "PERSON",
"before": "",
"after": " "
}, ...
但是,如果您在上面的命令中添加-nthreads 8
,则输出并不表示Samuel是一个人。完整命令:
java -Xmx6g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -file sample-file.txt -outputFormat json -nthreads 8
生成:
{
"sentences": [
{
"index": 0,
"parse": "SENTENCE_SKIPPED_OR_UNPARSABLE",
"tokens": [
{
"index": 1,
"word": "Samuel",
"originalText": "Samuel",
"lemma": "Samuel",
"characterOffsetBegin": 0,
"characterOffsetEnd": 6,
"pos": "NNP",
"ner": "O",
"before": "",
"after": " "
},
对于它的价值,-nthread {int}
(即没有s的线程)解决了问题,所以我可以使用这个命令。我会在这里留下这个问题,以防其他人尝试使用-nthreads标志。
P.S。这是我的CLASSPATH(从echo $CLASSPATH
获得),其中仅包含我上周下载的Stanford CoreNLP发行版:/Users/dduhaime/Desktop/everett/wiki_facts/stanford-corenlp-full-2015-12-09/*:
答案 0 :(得分:0)
我跑了这个命令:
java -Xmx6g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -file sample-file.txt -outputFormat json
使用sample-file.txt只包含文本“Samuel Huntington”,它发现这两个标记都是PERSON。
我的CLASSPATH包含发行版中的所有jar。
你应该开始的两件事是重新下载2015-12-09发行版(我们有时会在最终版本之前做一些小改动)只是为了确保你拥有最新版本并在你的Python代码中调查什么是CLASSPATH是。也许在运行java命令之前添加一个“echo $ CLASSPATH;”因为查看你的java命令你没有设置CLASSPATH,所以不完全清楚正在使用的CLASSPATH是什么。
答案 1 :(得分:0)
使用-nthread {int}
代替-nthreads {int}
会产生预期的NER输出。