中文文本分類不像英文文本分類一樣只需要將單詞一個個分開就可以了,中文文本分類需要將文字組成的詞語分出來構成一個個向量。所以,需要分詞。
這裡使用網上流行的開源分詞工具結巴分詞(jieba),它可以有效將句子裡的詞語一個個的提取出來,關於結巴分詞的原理此處不再贅述,關鍵是他的使用方法。
1、安裝
結巴分詞是一個Python的工具函數庫,在python環境下安裝,安裝方式如下:
(1)python2.x下
全自動安裝 :easy_install jieba 或者 pip install jieba
半自動安裝 :先下載 ,解壓後運行python setup.py install
手動安裝 :將jieba目錄放置於目前的目錄或者site-packages目錄
通過import jieba 來引用
(2)python3.x下
目前master分支是只支援Python2.x 的
Python3.x 版本的分支也已經基本可用:
git clone git checkout jieba3kpython setup.py install
2、使用
在使用它的時候首先要用import jieba代碼匯入jieba庫,而由於中文文本中可能除了常值內容以外還有一些符號比如括弧、等號或箭頭等,還需要將這些通過Regex的方式匹配出來並刪除,
由於使用到了Regex,所以還需要使用import re來匯入相關函數庫。
具體代碼如下:
def textParse(sentence): import jieba import re #以下兩行過濾出中文及字串以外的其他符號 r= re.compile("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+") sentence=r.sub('',sentence) seg_list = jieba.cut(sentence) #print ("Default Mode:", ' '.join(seg_list)) return [tok for tok in seg_list]
textParse函數接收一個句子(sentence)做為參數,返回結果是一個由句子詞語構成的數組。
結巴分詞中最關鍵的函數為jieba.cut該函數將接收到的句子分割成一個個詞語並返回一個可供迭代的generator。代碼的最後一行將這個結構轉化為數組。
3、停用詞
停用詞是指一些中文中出現的語氣詞或串連詞,這些詞如果不進行踢出,會影響核心詞與分類的明確關係。比如“的”,“之”,“與”,“和”等,也可以視情況增加適合本分類情境的停用詞。中文停用詞表涵蓋了1598個停用詞。可以從github上擷取。
項目改進如下:
(1)在項目中建立停用詞表stopkey.txt
將所有中文停用詞進該文字檔中。
(2)中文分詞時加入過濾停用詞功能
4、自訂字典
針對分類情境,自訂一些常用詞,當分詞的時候遇到這些詞就把他們作為單個詞處理。如增加資料庫中“多對多”到詞典中可以避免分詞的時候將上述詞語分為“多”“對”“多”。這些詞典的定義也與分類器應用情境有關。
項目改進如下:
(1)加入自訂字典檔案userdict.txt
(2)中文分詞中加入自訂字典分詞功能
5、改進後的中文分詞函數
代碼如下(同時又增加了其它常見符號):
#中文分詞def textParse(sentence): import jieba import re #以下兩行過濾出中文及字串以外的其他符號 r= re.compile("[\s+\.\!\/_\?【】\-(?:\))(?:\()(?:\[)(?:\])(\:):,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+") sentence=r.sub('',sentence) jieba.load_userdict("userdict.txt");#載入自訂字典 stoplist={}.fromkeys([line.strip() for line in open("stopkey.txt",'r',encoding= 'utf-8')])#停用詞檔案是utf8編碼 seg_list = jieba.cut(sentence) seg_list=[word for word in list(seg_list) if word not in stoplist] #print ("Default Mode:", ' '.join(seg_list)) return seg_list