NLPIR 汉语分词系统 (PyNLPIR) 学习手札
1 关于NLPIR
最近在做一些NLP相关的任务,其中一个关键的子任务就是如何对汉语进行分词?关于分词的方式,有很多很多,也是很多学习者的练手任务(比如我们当时的期末作业就有这个)。但是,轮子还是要搬来用,自己写的分词只能说是去了解这个方式(了解某个算法),做出来的都是能看不能用,毕竟模型、算法、语料库等一座座大山等着我们攻克。
所以,我找了一些资料,看到一个不错的教程,他用了NLPIR,所以我也跟着使用NLPIR,并且在这里留下手札,方便自己后续查阅,也希望能够再帮助其他人理解。
在这篇手札当中,我选择的是Python的版本,也就是PyNLPIR
NLPIR的官网是:http://ictclas.nlpir.org/
其Python版本文档(英文)地址:http://pynlpir.readthedocs.io/en/latest/
本篇手札的首要参考博客:http://www.shareditor.com/blogshow/?blogId=74
关于NLPIR 其官网的介绍是:
NLPIR汉语分词系统(又名ICTCLAS2013),主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;支持GBK编码、UTF8编码、BIG5编码。新增微博分词、新词发现与关键词提取;张华平博士先后倾力打造十余年,内核升级10次。
全球用户突破20万,先后获得了2010年钱伟长中文信息处理科学技术奖一等奖,2003年国际SIGHAN分词大赛综合第一名,2002年国内973评测综合第一名。
2 PyNLPIR 安装
PyNLPIR的安装很简单,首先你要保证你安装了PIP,这个工具在我的博客的各个手札当中出现过很多次,没有安装的可以看看之前的博客。
使用PIP我们可以非常快速的安装完成,终端执行如下的指令,等待安装完成即可(如果权限不够,请在前面加sudo):
$ pip install pynlpir安装完成后,我们验证一下是否成功了,启动Python解释器,敲入如下的代码,引入pynlpir,如果回车后没有问题,就证明安装成功
import pynlpir3 分词与词性标注
首先我们试验一下分词,这里贴出了源代码,安装完成PyNLPIR后,大家自己运行一下这个代码就可以。
需要注意的是,使用pynlpir的时候,首先要初始化,也就是需要先open(pynlpir.open()),当执行完成后需要对应的关闭(pynlpir.close())
# coding:utf-8import sys reload(sys) sys.setdefaultencoding( "utf-8" )import pynlpirpynlpir.open() s = '因为我比较懒,所以我就只是修改了这句话,代码还是原博客的' segments = pynlpir.segment(s) for segment in segments:print segment[0], '\t', segment[1]pynlpir.close()如果运行成功,那么应该会给出如下的结果
因为 preposition 我 pronoun 比较 adverb 懒 adjective , punctuation mark 所以 conjunction 我 pronoun 就 adverb 只 adverb 是 verb 修改 verb 了 particle 这 pronoun 句 classifier 话 noun , punctuation mark 代码 noun 还 adverb 是 verb 原 distinguishing word 博客 noun 的 particleProcess finished with exit code 0NLPIR还可以更加详细的输出词性信息,做如下修改:
segments = pynlpir.segment(s) 改为: segments = pynlpir.segment(s,pos_names='all') 你可以在segment时同时配置如下参数,调整结果,请自行选择: pos_names='all' / 'child' / 'parent' #默认是parent, 表示获取该词性的最顶级词性,child表示获取该词性的最具体的信息,all表示获取该词性相关的所有词性信息,相当于从其顶级词性到该词性的一条路径 pos_english=False # 词性标注结果以中文的形式显示 pos_tagging=False # 只做分词,而不显示词性运行后可以得到更加详细的结果:
因为 preposition 我 pronoun:personal pronoun 比较 adverb 懒 adjective , punctuation mark:comma 所以 conjunction 我 pronoun:personal pronoun 就 adverb 只 adverb 是 verb:verb 是 修改 verb 了 particle:particle 了/喽 这 pronoun:demonstrative pronoun:predicate demonstrative pronoun 句 classifier 话 noun , punctuation mark:comma 代码 noun 还 adverb 是 verb:verb 是 原 distinguishing word 博客 noun:other proper noun 的 particle:particle 的/底4 关键词提取
在如上的代码基础上,略微的修改代码
# coding:utf-8import sys reload(sys) sys.setdefaultencoding( "utf-8" )import pynlpirpynlpir.open() s = '因为我比较懒,所以我就只是修改了这句话,代码还是原博客的' print '关键词测试:\n' key_words = pynlpir.get_key_words(s, weighted=True) for key_word in key_words:print key_word[0], '\t', key_word[1]pynlpir.close()运行后提取出来的关键词应该是:
关键词测试:
关键词测试:修改 2.0 代码 2.0 博客 2.0Process finished with exit code 0附录 NLPIR 词性分类信息
POS_MAP = {'n': ('名词', 'noun', {'nr': ('人名', 'personal name', {'nr1': ('汉语姓氏', 'Chinese surname'),'nr2': ('汉语名字', 'Chinese given name'),'nrj': ('日语人名', 'Japanese personal name'),'nrf': ('音译人名', 'transcribed personal name')}),'ns': ('地名', 'toponym', {'nsf': ('音译地名', 'transcribed toponym'),}),'nt': ('机构团体名', 'organization/group name'),'nz': ('其它专名', 'other proper noun'),'nl': ('名词性惯用语', 'noun phrase'),'ng': ('名词性语素', 'noun morpheme'),}),'t': ('时间词', 'time word', {'tg': ('时间词性语素', 'time morpheme'),}),'s': ('处所词', 'locative word'),'f': ('方位词', 'noun of locality'),'v': ('动词', 'verb', {'vd': ('副动词', 'auxiliary verb'),'vn': ('名动词', 'noun-verb'),'vshi': ('动词"是"', 'verb 是'),'vyou': ('动词"有"', 'verb 有'),'vf': ('趋向动词', 'directional verb'),'vx': ('行事动词', 'performative verb'),'vi': ('不及物动词', 'intransitive verb'),'vl': ('动词性惯用语', 'verb phrase'),'vg': ('动词性语素', 'verb morpheme'),}),'a': ('形容词', 'adjective', {'ad': ('副形词', 'auxiliary adjective'),'an': ('名形词', 'noun-adjective'),'ag': ('形容词性语素', 'adjective morpheme'),'al': ('形容词性惯用语', 'adjective phrase'),}),'b': ('区别词', 'distinguishing word', {'bl': ('区别词性惯用语', 'distinguishing phrase'),}),'z': ('状态词', 'status word'),'r': ('代词', 'pronoun', {'rr': ('人称代词', 'personal pronoun'),'rz': ('指示代词', 'demonstrative pronoun', {'rzt': ('时间指示代词', 'temporal demonstrative pronoun'),'rzs': ('处所指示代词', 'locative demonstrative pronoun'),'rzv': ('谓词性指示代词', 'predicate demonstrative pronoun'),}),'ry': ('疑问代词', 'interrogative pronoun', {'ryt': ('时间疑问代词', 'temporal interrogative pronoun'),'rys': ('处所疑问代词', 'locative interrogative pronoun'),'ryv': ('谓词性疑问代词', 'predicate interrogative pronoun'),}),'rg': ('代词性语素', 'pronoun morpheme'),}),'m': ('数词', 'numeral', {'mq': ('数量词', 'numeral-plus-classifier compound'),}),'q': ('量词', 'classifier', {'qv': ('动量词', 'verbal classifier'),'qt': ('时量词', 'temporal classifier'),}),'d': ('副词', 'adverb'),'p': ('介词', 'preposition', {'pba': ('介词“把”', 'preposition 把'),'pbei': ('介词“被”', 'preposition 被'),}),'c': ('连词', 'conjunction', {'cc': ('并列连词', 'coordinating conjunction'),}),'u': ('助词', 'particle', {'uzhe': ('着', 'particle 着'),'ule': ('了/喽', 'particle 了/喽'),'uguo': ('过', 'particle 过'),'ude1': ('的/底', 'particle 的/底'),'ude2': ('地', 'particle 地'),'ude3': ('得', 'particle 得'),'usuo': ('所', 'particle 所'),'udeng': ('等/等等/云云', 'particle 等/等等/云云'),'uyy': ('一样/一般/似的/般', 'particle 一样/一般/似的/般'),'udh': ('的话', 'particle 的话'),'uls': ('来讲/来说/而言/说来', 'particle 来讲/来说/而言/说来'),'uzhi': ('之', 'particle 之'),'ulian': ('连', 'particle 连'),}),'e': ('叹词', 'interjection'),'y': ('语气词', 'modal particle'),'o': ('拟声词', 'onomatopoeia'),'h': ('前缀', 'prefix'),'k': ('后缀' 'suffix'),'x': ('字符串', 'string', {'xe': ('Email字符串', 'email address'),'xs': ('微博会话分隔符', 'hashtag'),'xm': ('表情符合', 'emoticon'),'xu': ('网址URL', 'URL'),'xx': ('非语素字', 'non-morpheme character'),}),'w': ('标点符号', 'punctuation mark', {'wkz': ('左括号', 'left parenthesis/bracket'),'wky': ('右括号', 'right parenthesis/bracket'),'wyz': ('左引号', 'left quotation mark'),'wyy': ('右引号', 'right quotation mark'),'wj': ('句号', 'period'),'ww': ('问号', 'question mark'),'wt': ('叹号', 'exclamation mark'),'wd': ('逗号', 'comma'),'wf': ('分号', 'semicolon'),'wn': ('顿号', 'enumeration comma'),'wm': ('冒号', 'colon'),'ws': ('省略号', 'ellipsis'),'wp': ('破折号', 'dash'),'wb': ('百分号千分号', 'percent/per mille sign'),'wh': ('单位符号', 'unit of measure sign'),}),}总结
以上是生活随笔为你收集整理的NLPIR 汉语分词系统 (PyNLPIR) 学习手札的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 字符串的拼接
- 下一篇: 数据库系统原理课程设计