2016-07-22 41 views
0

我试图运行一个例句:不同的结果在StanfordNERTagger在python3.5 - 斯坦福大学NER,2015年12月9日

from nltk.tag import StanfordNERTagger 
_model_filename = r'D:/standford/stanford-ner-2015-12-09/classifiers/english.all.3class.distsim.crf.ser.gz' 

_path_to_jar = r'D:/standford/stanford-ner-2015-12-09/stanford-ner.jar' 

st = StanfordNERTagger(model_filename=_model_filename, path_to_jar=_path_to_jar) 

st.tag('Rami Eid is studying at Stony Brook University in NY'.split()) 

我的产量,如下面的Python:

('''','PERSON'),('Eid','PERSON'),('是','O'),('''''''''''''''''''''''' ),('Stony','ORGANIZATION'),('Brook', 'ORGANIZATION'),('University','ORGANIZATION'),('in','O'),('NY', ' O')]

虽然我期待纽约州也根据此reference选择位置。

我试图另一示例如下:

st.tag('Ali is living in London.'.split()) 

结果是如下这是正确的。

[( '阿里', '人'),( '是', 'O'),( '活', 'O'),( '在', 'O'), (”伦敦','LOCATION')]

你知道为什么它没有把NY当作第一句话的位置吗?

我使用的Visual Studio 2015年的Python 3.5,斯坦福大学NER,2015年12月9日

+1

广告全给你的句子。没有模型是完美的=) – alvas

回答

1

斯坦福NER工具是如此标点符号是很重要的培训上正确格式化新闻文本。来自docs

斯坦福NER是命名实体识别器的Java实现。 命名实体识别(NER)在文本 中标记单词序列,这些单词是事物名称,如人名和公司名称,或基因和蛋白名称。它配备精心设计的功能 命名实体识别提取器,以及定义 特征提取器的许多选项。包含在下载中的是具有良好命名实体 的英语识别器,特别是3类(PERSON, ORGANIZATION,LOCATION)的识别器,并且我们还在此页面上提供了针对不同语言和情况的各种其他型号, ,包括受过培训的模型只是CoNLL 2003英语培训数据。

CoNLL 2003 doc

英语数据从 路透社语料库新闻网文章的集合。注释是由安特卫普大学的人员完成的。由于版权原因,我们只能提供 注释。为了构建完整的数据集 ,您需要访问路透社的语料库。它可以从 的研究目的中获得,而不需要从NIST收取任何费用。

通过添加句号的例句,你应该得到你想要的输出,但仍然没有模型是完美=)

[email protected]:~$ export STANFORDTOOLSDIR=$HOME 
[email protected]:~$ export CLASSPATH=$STANFORDTOOLSDIR/stanford-ner-2015-12-09/stanford-ner.jar 
[email protected]:~$ export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-ner-2015-12-09/classifiers 
[email protected]:~$ python3 
Python 3.5.2 (default, Jul 5 2016, 12:43:10) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from nltk.tag import StanfordNERTagger 
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
>>> sent = 'Rami Eid is studying at Stony Brook University in NY .'.split() 
>>> st.tag(sent) 
[('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'LOCATION'), ('.', 'O')] 
>>> sent = 'Rami Eid is studying at Stony Brook University in NY'.split() 
>>> st.tag(sent) 
[('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'O')] 
+0

感谢兄弟的解释。 – Amir

+0

我很高兴答案有帮助。 – alvas

相关问题