作者:Walker

目录

一.什么是命名实体识别

二.基于NLTK的命名实体识别

三.基于Stanford的NER

四.总结

一 、什么是命名实体识别?

命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。通常包括两部分:(1)实体边界识别;(2) 确定实体类别(人名、地名、机构名或其他)。

命名实体识别通常是知识挖掘、信息抽取的第一步,被广泛应用在自然语言处理领域。接下来,我们将介绍常用的两种命名实体识别的方法。

二 、基于NLTK的命名实体识别:

NLTK:由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集的大量公开数据集、模型上提供了全面、易用的接口,涵盖了分词、词性标注(Part-Of-Speech tag, POS-tag)、命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项NLP领域的功能。

使用前需要先下载NLTK,下载地址为:http://pypi.python.org/pypi/nltk,安装完成后,在python环境下输入import nltk测试是否安装成功,然后输入nltk.download()下载nltk所需要的数据包,完成安装。

Python代码实现(注意文件的编码格式为utf-8无BOM格式):

-- coding: utf-8 --

import sys

reload(sys)

sys.setdefaultencoding(‘utf8’)    #让cmd识别正确的编码

import nltk

newfile = open(‘news.txt’)

text = newfile.read()  #读取文件

tokens = nltk.word_tokenize(text)  #分词

tagged = nltk.pos_tag(tokens)  #词性标注

entities = nltk.chunk.ne_chunk(tagged)  #命名实体识别

a1=str(entities) #将文件转换为字符串

file_object = open(‘out.txt’, ‘w’)

file_object.write(a1)   #写入到文件中

file_object.close( )

print entities

具体的方法可参考NLTK官网介绍:http://www.nltk.org/,输出的结果为:

>>> entities = nltk.chunk.ne_chunk(tagged)

>>> entities

Tree(‘S’, [(‘At’, ‘IN’), (‘eight’, ‘CD’), (“o’clock”, ‘JJ’),

(‘on’, ‘IN’), (‘Thursday’, ‘NNP’), (‘morning’, ‘NN’),

Tree(‘PERSON’, [(‘Arthur’, ‘NNP’)]),

(‘did’, ‘VBD’), (“n’t”, ‘RB’), (‘feel’, ‘VB’),

(‘very’, ‘RB’), (‘good’, ‘JJ’), (‘.’, ‘.’)])

当然为了方便查看,我们可以以树结构的形式把结果绘制出来:

>>> from nltk.corpus import treebank

>>> t = treebank.parsed_sents(‘wsj_0001.mrg’)[0]

>>> t.draw()

三 、基于Stanford的NER:

Stanford Named Entity Recognizer (NER)是斯坦福大学自然语言研究小组发布的成果之一,主页是:http://nlp.stanford.edu/software/CRF-NER.shtml。Stanford NER 是一个Java实现的命名实体识别(以下简称NER))程序。NER将文本中的实体按类标记出来,例如人名,公司名,地区,基因和蛋白质的名字等。

NER基于一个训练而得的Model(模型可识别出 Time, Location, Organization, Person, Money, Percent, Date)七类属性,其用于训练的数据即大量人工标记好的文本,理论上用于训练的数据量越大,NER的识别效果就越好。

因为原始的NER是基于java实现的,所以在使用Python编程之前,要确保自己电脑上已经安装了jar1.8的环境(否则会报关于Socket的错误)。

然后我们使用Pyner使用python语言实现命名实体识别。下载地址为:https://github.com/dat/pyner

安装Pyner:解压下载的Pyner,命令行中将工作目录切换到Pyner文件夹下, 输入命令 :python setup.py install 完成安装.

接下来,还需要下载StanfordNER工具包,下载地址为:http://nlp.stanford.edu/software/stanford-ner-2014-01-04.zip,然后在解压后的目录打开cmd命令窗体,执行,java -mx1000m -cp stanford-ner.jar edu.stanford.nlp.ie.NERServer -loadClassifier classifiers/english.muc.7class.distsim.crf.ser.gz -port 8080 -outputFormat inlineXML,直到结果为:Loading classifier from classifiers/english.muc.7class.distsim.crf.ser.gz … done [1.2 sec].

以上操作是因为斯坦福的命名实体识别是基于java的socket写的,所以必要保证有一个窗题与我们执行的命令通信。关于java的socket编程,可以参考以下文章:http://www.cnblogs.com/rond/p/3565113.html

最后,我们终于可以使用python编程实现NER了:

import ner

import sys

import nltk

reload(sys)

sys.setdefaultencoding(‘utf8’)

newfile = open(‘news.txt’)

text = newfile.read()

tagger = ner.SocketNER(host=’localhost’, port=8080)#socket编程

result=tagger.get_entities(text)   #stanford实现NER

a1=str(result)

file_object = open(‘outfile.txt’, ‘w’)

file_object.write(a1)

file_object.close( )

print result

>>> import ner

>>> tagger = ner.SocketNER(host=’localhost’, port=8080)

>>> tagger.get_entities(“University of California is located in California, United States”)

{‘LOCATION’: [‘California’, ‘United States’],

‘ORGANIZATION’: [‘University of California’]}

四 、两种方法的比较:

我拿同一个文本文件用两种方法进行命名实体识别,结果如下:

图1 NLTK运行结果

图2 Stanford方式运行结果

比较两种方式,我们可以发现,NLTK下的命名实体识别更加倾向于分词和词性标准,虽然它也会将组织名,人名,地名等标注出来,但由于它把文件中的谓语,宾语等成分也标注了出来,造成了输出文本的冗余性,不利于读者很好的识别命名实体,需要我们对文本做进一步处理。NLTK下的命名实体识别的有点时,可以使用NLTK下的treebank包将文本绘制为树形,使结果更加清晰易读。相较而言,我更加倾向于Stanford的命名实体识别,它可以把Time, Location, Organization, Person, Money, Percent, Date七类实体很清晰的标注出来,而没有多余的词性。但由于NER是基于java开发的,所以在用python实现时可能由于jar包或是路径问题出现很多bug。

以上就是关于NLTK和stanford对英文文本的命名实体识别,关于自然语言处理中文文件,我们可以考虑jieba分词:https://www.oschina.net/p/jieba。

【总结】:命名实体识别是构建知识图谱、进行自然语言处理问题的第一步,本文总结了现有的处理命名实体识别问题的两种方法,你掌握了吗?

python 命名实体识别_命名实体识别的两种方法相关推荐

  1. Python的pip怎样更新到最新版本:两种方法!

    Python的pip怎样更新到最新版本:两种方法! 方法一: 在管理员模式的控制台里输入下面这行命令 python -m pip install --upgrade pip 方法二: Anaconda ...

  2. 计算机视觉之人脸识别(Yale数据集)--HOG和ResNet两种方法实现

    1.问题描述 在给定Yale数据集上完成以下工作:在给定的人脸库中,通过算法完成人脸识别,算法需要做到能判断出测试的人脸是否属于给定的数据集.如果属于,需要判断出测试的人脸属于数据集中的哪一位.否则, ...

  3. cad添加自己线性_创建cad线型的两种方法(线型文件和linetype) - CAD自学网

    作图过程中,我们最常见的线型是实线.虚线.点划线.有的时候这些基本线型可能满足不了你的需求.CAD也有自带的特殊线型,比如-HW-,这种自带文字的线型.但你想要的确实-X-.那么这便涉及到新线型的建立 ...

  4. 怎么在python中添加文字_Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  5. Python中按值来获取指定键的两种方法

    Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...

  6. python实现强智科技教务系统抢课(两种方法)

    前言 又到了选课的时间,又一次被教务系统的预选给安排了,硬是一门都没选中.于是想实现有没有自动捡课的方法.就整体分为两种方法,一种是获取get请求然后由python多线程提交去选课,一种是利用自动化测 ...

  7. python随机生成验证码_Python生成随机验证码的两种方法

    # -*- coding: utf-8 -*- import random def generate_verification_code_v2(): ''' 随机生成6位的验证码 ''' code_l ...

  8. python 执行shell 事务_python中执行shell的两种方法总结

    一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: ...

  9. python爬虫(20)使用真实浏览器打开网页的两种方法

    1.使用系统自带库  os 这种方法的优点是,任何浏览器都能够使用, 缺点不能自如的打开一个又一个的网页 import os os.system('"C:/Program Files/Int ...

  10. Python pip 修改镜像源为豆瓣源的两种方法

    Python pip 修改镜像源为豆瓣源 常常遇到 pip 装包时速度过慢或者无法安装(请求超时)等问题,这个时候你就需要考虑一下给 pip 换源了 一.临时的方法 参数如下 -i https://p ...

最新文章

  1. 2022-2028年中国水处理分离膜行业市场现状调研及市场需求潜力报告
  2. LRU算法 -- 链表 完整实现
  3. 【零基础】Python的入门学习
  4. 浏览器内存不足导致页面崩溃_深度精读:浏览器渲染原理 [8000字图文并茂]
  5. 一个简单的TCP服务器
  6. 6个座位办公室最佳位置_一天中6个最佳的护肤时间,你知道几个?
  7. Cell发文!施一公科研团队取得重大突破
  8. apache log4j入门
  9. c和java内存泄漏区别_内存溢出和内存泄漏的区别(转)
  10. 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装
  11. MongoDB、ElasticSearch、Redis、HBase比较
  12. 认识activiti与flowable的区别---工作流工作笔记001
  13. 邪恶改装:TPYBoard制作廉价WIFI干扰器
  14. 函数在区间连续可以推出什么_A-22 函数的点连续、单侧连续、区间连续
  15. Jquery特殊属性
  16. 华硕Chromebox-cn 62+i7-5500 U+HD 5500
  17. j2ee java是什么意思,j2ee是什么
  18. 文件或目录损坏且无法读取怎么办?数据恢复用这招
  19. 数学和计算机竞赛,数学类和计算机类竞赛有哪些??
  20. Pycharm typo PEP 8

热门文章

  1. 路由器选华硕还是tp_怎样选到自己想要的路由器?满足以下3个要求就够了
  2. 从(新浪)motan看RPC框架设计
  3. 成功解决将crx后缀文件加载到谷歌浏览器作为插件使用
  4. 闲的没事,算了算4294967296的平方
  5. 服务器3D场景建模(六):RecastNavigation介绍
  6. 阻止a标签跳转的各种解决方案
  7. Android进阶——Android弹窗组件工作机制之Dialog、DialogFragment
  8. 下载股票的历史日交易数据并存入数据库——基于tushare
  9. android 7相机拍照功能介绍,镜头配备及拍照功能介绍_华为 Mate 7_手机Android频道-中关村在线...
  10. 1.3 防火墙通过TELNET登录设备