一、安装
官方链接:http://pynlpir.readthedocs.org/en/latest/installation.html
官方网页中介绍了几种安装方法,大家根据个人需要,自行参考!我采用的是:
Install PyNLPIR using easy_install:
$ easy_install pynlpir
二、使用NLPIR进行分词
注:此处主要使用pynlpir.nlpir模块,该模块使用ctypes为NLPIR提供面向Python的接口,因此在调用NLPIR方法时,基本与调用其C接口是一样的。
此处假设已导入模块:from pynlpir import nlpir
1)NLPIR初始化
nlpir.Init(nlpir.PACKAGE_DIR,nlpir.UTF8_CODE,None) ,其中三个参数:
nlpir.PACKAGE_DIR,Data目录父目录的绝对路径(即指明在何处可找到Data目录),也可自行指定
nlpir.UTF8_CODE,分词所使用的编码方式(NLPIR提供UTF-8,GBK,BIG5,GBK-FANTI四种编码),默认是GBK
license_code,没什么特殊应用的话就默认为None
2)设置词性标注集
nlpir.SetPOSmap(pos_map)
NLPIR官方提供四种词性标注集,具体参见官方API : http://pynlpir.readthedocs.org/en/latest/api.html
词性标注集中FIRST和SECOND的区别在于前者只采用一级标注,后者同时采用二级标注,如对于“是”,一级标注词性为/v,二
级标注词性为/vshi
3)段落分词
nlpir.ParagraphProcess(str,int)
str: 待分词段落
int: 0表示不加词性标注,1则加词性 (注意此处官方API调用参数可能有误)
return: 分词后内容
4)文档分词
nlpir.FileProcess(sFile,rFile,isPOS)
sFile:待分词文档(文档路径)
rFile:分词结果文档
isPOS: 0表示不加词性标注,1则加词性 (注意此处官方API调用参数可能有误)
5)导入用户字典
nlpir.ImportUserDict(dict_path)
dict_path: 字典路径
nlpir.AddUserWord('卡卡') ,将'卡卡'这个词加入用户字典,返回1表示成功
nlpir.SaveTheUsrDic() , 将用户字典内容输出到磁盘,返回1表示成功
nlpir.DelUsrWord('卡卡') , 删除用户字典的指定词,返回-1表示字典中没有该词,否则返回值表示该词在字典中位置
6)退出
nlpir.Exit() :释放内存资源
7)获取关键词或新词
获取关键词或者新词对段落和文档有各自的方法调用,但参数都一致,即传入待获取的内容,最多获取的词数,以及是否输出词权重信息
三、简易代码示例
1 from pynlpir import nlpir 2 3 class WordSegment(object): 4 5 def __init__(self): 6 '''初始化nlpir资源''' 7 if not nlpir.Init(nlpir.PACKAGE_DIR,nlpir.UTF8_CODE,None): 8 print 'Initialize NLPIR failed' 9 exit(-11111) 10 11 def fileProcess(self,sFile,rFile,isPOS): 12 ''' 13 对文档分词:sFile,待分词文档路径 14 rFile,分词结果文档路径 15 isPOS,是否标注词性(1 是,0 否) 16 ''' 17 nlpir.SetPOSmap(nlpir.ICT_POS_MAP_SECOND) 18 if nlpir.FileProcess(sFile,rFile,isPOS)==0: 19 print 'FileProcess failed.Traceback to module:word_segmentation.py,function:fileProcess()' 20 exit(-111111) 21 22 def import_userdict(self,dict_path): 23 nlpir.ImportUserDict(dict_path) 24 25 def finalizeR(self): 26 '''释放nlpir资源''' 27 nlpir.Exit()
四、pynlpir模块方法
1)pynlpir._get_pos_name(code, name='parent', english=True)
获取某个词性相关信息
code: 词性
name:分为'parent'(获取该词性的最顶级词性,默认为'parent'),'child'(获取该词性最具体的信息),'all'(获取该词性相关的所有词性
信息,相当于从其顶级词性到该词性的一条路径)
english:默认为True,表示是否以英文输出信息
以'nsf'词性为例,
print pynlpir._get_pos_name('nsf',name='parent',english=True) # noun print pynlpir._get_pos_name('nsf',name='child',english=True) # transcribed toponym print pynlpir._get_pos_name('nsf',name='all',english=False) # 名词:地名:音译地名
2) pynlpir.open(data_dir=nlpir.PACKAGE_DIR, encoding=ENCODING, license_code=None)
相当于pynlpir.nlpir.Init()方法
3) pynlpir.close()
相当于pynlpir.nlpir.Exit()方法
4) pynlpir.segment(s, pos_tagging=True, pos_names='parent', pos_english=True)
1 r_list= pynlpir.segment('Python环境下NLPIR中文分词系统使用攻略', pos_tagging=True, pos_names='child', pos_english=True) 2 for w in r_list: 3 print w[0].encode('gbk'),'\t',w[1] 4 ''' 5 Python other proper noun 6 环境 noun 7 下 noun of locality 8 NLPIR noun 9 中文 other proper noun 10 分词 verb 11 系统 noun 12 使用 verb 13 攻 verb 14 略 adverb 15 '''
5)pynlpir.get_key_words(s, max_words=50, weighted=False)
print pynlpir.get_key_words('Python环境下NLPIR中文分词系统使用攻略',2,True)
# [(u'NLPIR', 3.75), (u'Python', 3.0)]