我试着运行一个例句:
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:
[(' Rami',' PERSON'),(' Eid',' PERSON'),'是& #39;,' O'),('学习', ' O'),(' at',' O'),(' Stony','组织'), ('布鲁克&#39 ;, '组织'),('大学','组织'),(' in',' O'), (' NY&#39 ;, ' O&#39)]
虽然我预计纽约也会根据此reference选择地点。
我尝试了另一个例子如下:
st.tag('Ali is living in London.'.split())
结果如下所示是正确的。
[(' Ali',' PERSON'),('是',' O'),'生活& #39;,' O'),(' in',' O'), ('伦敦。',' LOCATION')]
你知道为什么它没有认出纽约作为第一句话的位置吗?
我正在使用visual studio 2015,Python 3.5,Stanford-ner-2015-12-09
答案 0 :(得分:1)
斯坦福NER工具经过适当格式化的新闻文本培训,因此标点符号非常重要。来自docs:
Stanford NER是命名实体识别器的Java实现。 命名实体识别(NER)标记文本中的单词序列 这些是事物的名称,例如人员和公司名称,或 基因和蛋白质名称。它具有精心设计的功能 命名实体识别的提取器,以及许多用于定义的选项 特征提取器。下载中包含良好的命名实体 英语识别者,特别是3个班级(PERSON, 组织,位置),我们也在此页面上提供 针对不同语言和环境的各种其他模型, 包括仅通过CoNLL 2003英语培训数据培训的模型。
英文数据是来自的新闻线文章的集合 路透社语料库。注释已由人们完成 安特卫普大学。由于版权原因我们只做 提供注释。为了构建完整的数据集 您将需要访问路透社语料库。它可以获得 研究目的,无需NIST任何指控。
通过在示例句子中添加fullstop,你应该得到你想要的输出,但仍然没有模型是完美的=)
alvas@ubi:~$ export STANFORDTOOLSDIR=$HOME
alvas@ubi:~$ export CLASSPATH=$STANFORDTOOLSDIR/stanford-ner-2015-12-09/stanford-ner.jar
alvas@ubi:~$ export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-ner-2015-12-09/classifiers
alvas@ubi:~$ 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')]