如何使用Stanford CoreNLP对NER和POS标记预先标记化的文本?

时间:2015-04-22 19:33:28

标签: nlp stanford-nlp named-entity-recognition pos-tagger

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

有人可以告诉我,如何使用斯坦福大学的CoreNLP以编程方式将NER和POS标记为预先录制的文本吗?

编辑:

我实际上正在使用单独的NER和POS指令。所以我的代码是按斯坦福大学NER和POS软件包中给出的教程中的指示编写的。但我的classpath中有CoreNLP。所以我在我的类路径中有CoreNLP,但是使用了NER和POS包中的教程。

编辑:

我刚刚发现有关于如何在这里设置CoreNLP属性http://nlp.stanford.edu/software/corenlp.shtml的说明,但我希望有一个快速的方法来做我想要的斯坦福NER和POS标记,所以我不必须重新编码一切!

2 个答案:

答案 0 :(得分:5)

如果设置属性:

tokenize.whitespace = true

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

ssplit.eolonly = true

这样你只能在换行符上拆分句子。

答案 1 :(得分:0)

要以编程方式在您已经通过其他方式获得的令牌列表上运行分类器,而没有像空格一样粘贴它们然后再次进行标记,您可以使用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]