0

我试图弄清楚为什么将-nthreads {int}参数添加到斯坦福 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

这将产生预期的输出,“Samuel”被识别为一个人:

{
  "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 标志。

PS 这是我的 CLASSPATH(从 获得echo $CLASSPATH),其中仅包含我上周下载的 Stanford CoreNLP 发行版:/Users/dduhaime/Desktop/everett/wiki_facts/stanford-corenlp-full-2015-12-09/*:

4

2 回答 2

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 是什么。

于 2016-07-20T07:31:28.877 回答
0

使用-nthread {int}而不是-nthreads {int}生成预期的 NER 输出。

于 2016-07-20T11:42:30.670 回答