一、安裝
官方鏈接: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)]