Stanford CoreNLP:-nthreads标志导致所有ner值为O

时间:2016-07-20 03:17:05

标签: java stanford-nlp corenlp-server

我试图弄清楚为什么将-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/*:

2 个答案:

答案 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输出。