標籤:
Python調用中科院NLPIR(ICTCLAS2015)詳解
南京理工大學 電腦科學與工程學院
RuiXia_NUSTM課題組 ChaoLiu([email protected])
-------------------------
主要講解內容:
1. NLPIR版本及下載
2. 代碼問題
3. userdict的使用問題
-------------------------
友情提示:如果是swig問題,自己處理。首先下載swig,swig可以協助我們將C或者C++編寫的DLL或者SO檔案綁定到包括Python在內的多種語言。Windows下將安裝包下載到一定目錄下將該目錄加入環境變數的path中即可使用swig(當然也可以輸入完整的路徑來使用swig)。可以開啟命令列視窗,在裡面輸入swig,如果出現“Must specify an input file. Use -help for available options.”則表示一切順利。
1.NLPIR(ICTCLAS2015):http://ictclas.nlpir.org/downloads,目錄如下:
其中【組合包(本人臨時建立檔案,所需要的僅是本檔案夾裡面的內容)】中的內容需要:
其中: bin檔案夾(自己建立的)下包括:importuserdict檔案夾下zip解壓檔案。Data檔案夾為上級目錄的Data檔案夾所有內容,nlpir、__init__.py、nlpir.py為sample\pythonsample檔案夾下檔案。
2. A將【組合包】檔案夾下的所有內容放入你自己的項目當中,注意修改nlpir.py代碼中dll的路徑,如紅圈所示:其中32bit還是64bit是由你自己的python.exe版本決定,而不是你自己的作業系統。
B、為了分詞、詞性標註、分隔字元便於編程,可將nlpir.py代碼中的Seg函數改寫成:
------------------------------------------------------------------------------------------
‘‘‘
Chao Liu(njust NUSTM RuiXia)
‘‘‘
def NLPIR_Seg_Pos(paragraph,flag = True,echo = ‘/‘):
# NLPIR 分詞 Parameters(paragraph:字串 ,flag:是否標註詞性,echo:詞性分割符)
para_seg_pos = ‘‘
atoms = segment(paragraph)
for a in atoms:
if len(a.sPOS) < 1: continue
i = paragraph[a.start: a.start + a.length]#.decode(‘utf-8‘)#.encode(‘ascii‘)
#yield (i, a.sPOS)
if flag == False :
para_seg_pos = para_seg_pos + (str(i) + ‘ ‘)
else:
para_seg_pos = para_seg_pos + (str(i)+ echo + a.sPOS +‘ ‘)
return para_seg_pos.rstrip()
-----------------------------------------------------------------------------------------
3. userdict使用者字典的匯入問題,下載的zip包中,有一個檔案夾importuserdict,裡面有個readme.txt檔案,具體操作請看:
採用附件的小工具,可以實現離線匯入使用者詞典;具體步驟如下:
1.與分詞Data檔案夾同級建立 bin目錄,下面建立二級目錄ICTCLAS2014;
2.將附件的內容解壓縮後放在ICTCLAS2014下面;
3.編輯bin/ICTCLAS2014下面的userdic.txt,這裡放置使用者字典與標註;
4.執行bin/ICTCLAS2014的批次檔。即可匯入使用者詞典到Data目錄下的field.pdat field.pos。
5.30萬詞條會劃分更多的時間,可能需要2小時左右。
4.其他問題
如若py代碼中調用不同檔案夾下的py程式,需在各級目錄中添加 __init__.py檔案,裡面無需存放任何代碼。
只需要在py開始添加python系統path,然後在匯入檔案py,例如:
import sys
sys.path.append(‘libsvm-3.20/python‘) //可添加絕對路徑,也可以添加相對路徑。
from svmutil import *
Python調用中科院NLPIR(ICTCLAS2015)詳解 劉超([email protected])