Python StanfordNerTagger coreNLP输出不同于stanford ner tagger的在线演示

时间:2016-11-23 06:57:21

标签: python nltk named-entity-recognition stanford-nlp

我正在使用stanford coreNLP [stanford-ner-2015-12-09]和python nltk StanfordNERTAgger,但它的结果与在线演示的结果不同。

我通过了这个帖子" https://mailman.stanford.edu/pipermail/java-nlp-user/2011-August/001283.html"其中说"他们使用相同的模型,但CoreNLP首先POS标记数据,然后解析它。这会导致不同的结果。"

有没有办法根据在线演示调整结果,因为我发现它比coreNLP更适合我尝试的大部分示例。

CoreNLP
[(u'Tom', u'PERSON'), (u'Cruise', u'PERSON'), (u'was', u'O'), (u'born', u'O'), (u'on', u'O'), (u'July', u'O'), (u'3,', u'O'), (u'1962,', u'O'), (u'in', u'O'), (u'Syracuse,', u'O'), (u'New', u'LOCATION'), (u'York', u'LOCATION')]

OnlineDEMO
Tom Cruise was born on July 3, 1962, in Syracuse, New York.
Person                                  Location  Location     

1 个答案:

答案 0 :(得分:0)

这是由于标记化:

st = StanfordNERTagger(model_path, stanford_tagger_jar, encoding='utf8')
r=st.tag("Tom Cruise was born on July 3, 1962, in Syracuse, New York.".split())
for e in r:
    print e

这不会将Syracuse标记为位置:

(u'Tom', u'PERSON')
(u'Cruise', u'PERSON')
(u'was', u'O')
(u'born', u'O')
(u'on', u'O')
(u'July', u'O')
(u'3,', u'O')
(u'1962,', u'O')
(u'in', u'O')
(u'Syracuse,', u'O')
(u'New', u'LOCATION')
(u'York.', u'LOCATION')

但这样做:

from nltk import word_tokenize
st = StanfordNERTagger(model_path, stanford_tagger_jar, encoding='utf8')
r=st.tag(word_tokenize("Tom Cruise was born on July 3, 1962, in Syracuse, New York."))
for e in r:
    print e
(u'Tom', u'PERSON')
(u'Cruise', u'PERSON')
(u'was', u'O')
(u'born', u'O')
(u'on', u'O')
(u'July', u'O')
(u'3', u'O')
(u',', u'O')
(u'1962', u'O')
(u',', u'O')
(u'in', u'O')
(u'Syracuse', u'LOCATION')
(u',', u'O')
(u'New', u'LOCATION')
(u'York', u'LOCATION')
(u'.', u'O')