NLPIR 汉语分词系统 (PyNLPIR) 学习手札

来源:互联网 发布:java websocket客户端 编辑:程序博客网 时间:2024/05/22 03:17

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 pynlpir

3 分词与词性标注

首先我们试验一下分词,这里贴出了源代码,安装完成PyNLPIR后,大家自己运行一下这个代码就可以。

需要注意的是,使用pynlpir的时候,首先要初始化,也就是需要先open(pynlpir.open()),当执行完成后需要对应的关闭(pynlpir.close())

# coding:utf-8import sysreload(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 0

NLPIR还可以更加详细的输出词性信息,做如下修改:

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 sysreload(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'),        }),    }
2 0
原创粉丝点击