如何使用 Stanford CoreNLP 对预标记文本进行 NER 和 POS 标记?

How to NER and POS tag a pre-tokenized text with Stanford CoreNLP?

我在我的应用程序中使用斯坦福大学的 CoreNLP 命名实体识别器 (NER) 和词性 (POS) 标记器。问题是我的代码预先标记了文本,然后我需要对每个标记进行 NER 和 POS 标记。然而,我只能找到如何使用命令行选项而不是编程方式来做到这一点。

有人可以告诉我如何使用 Stanford 的 CoreNLP 以编程方式对预标记文本进行 NER 和 POS 标记吗?

编辑:

我实际上是在使用单独的 NER 和 POS 指令。所以我的代码是按照斯坦福的 NER 和 POS 包中给出的教程中的说明编写的。但是我的类路径中有 CoreNLP。所以我在我的类路径中有 CoreNLP,但使用 NER 和 POS 包中的教程。

编辑:

我刚刚发现这里有关于如何设置 CoreNLP 属性的说明 http://nlp.stanford.edu/software/corenlp.shtml 但我希望是否有一种快速的方法来使用 Stanford NER 和 POS 标记器来做我想做的事情,所以我不不必重新编码所有内容!

如果设置 属性:

tokenize.whitespace = true

然后 CoreNLP 管道将对空白进行标记化,而不是默认的 PTB 标记化。您可能还想设置:

ssplit.eolonly = true

这样您就可以只根据换行符拆分句子。

要以编程方式 运行 分类器对您已经通过其他方式获得的标记列表进行分类,而无需像将它们与空格粘贴在一起然后再次标记化这样的杂乱无章,您可以使用 Sentence.toCoreLabelList method:

String[] token_strs = {"John", "met", "Amy", "in", "Los", "Angeles"};
List<CoreLabel> tokens = edu.stanford.nlp.ling.Sentence.toCoreLabelList(token_strs);
for (CoreLabel cl : classifier.classifySentence(tokens)) {
  System.out.println(cl.toShorterString());
}

输出:

[Value=John Text=John Position=0 Answer=PERSON Shape=Xxxx DistSim=463]
[Value=met Text=met Position=1 Answer=O Shape=xxxk DistSim=476]
[Value=Amy Text=Amy Position=2 Answer=PERSON Shape=Xxx DistSim=396]
[Value=in Text=in Position=3 Answer=O Shape=xxk DistSim=510]
[Value=Los Text=Los Position=4 Answer=LOCATION Shape=Xxx DistSim=449]
[Value=Angeles Text=Angeles Position=5 Answer=LOCATION Shape=Xxxxx DistSim=199]