2016-11-23 23 views
0

我正在使用stanford coreNLP [stanford-ner-2015-12-09]和python nltk StanfordNERTAgger,但它的效果不同於在線演示。Python StanfordNerTagger coreNLP輸出不同於在線演示的stanfordner tagger

我經歷了這個線程「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  
+0

這是關於代表性差異還是關於CoreNLP未將「Syracuse」標記爲位置的事實? – lenz

+0

@lenz CoreNLP未將「Syracuse」標記爲位置! – Anish

回答

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 

這不標記雪城的位置:

(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')