jieba分詞與詞性標註自定義詞典支援特殊字元
阿新 • • 發佈:2019-02-13
jieba分詞可以自定義詞表和詞庫。但是目前版本尚不支援特殊字元(如空格等)。
參考github上的網友們的解答,總結修改方法如下:
1、修改目錄(我的為windows系統,使用miniconda,路徑供參考,具體則需要根據自己實際情況進行修改):
檔案路徑 D:\ProgramData\Miniconda3\envs\python36\Lib\site-packages\jieba
2、修改內容
- 修改jieba根目錄 包括init和詞表
- 修改posseg目錄 包括init
- 參考網站 https://github.com/fxsjy/jieba/issues/423
- 示例與程式碼可參照我的github:https://github.com/q759729997/jieba_special_character
開啟預設詞典(根目錄)或自定義詞典,把所有用來間隔詞頻和詞性的空格間隔符改成@@ (選用@@是因為一般關鍵詞裡遇到這個分隔符的機率比較小吧) 繼續,開啟jieba根目錄下init.py 搜尋 re_han_default = re.compile("([\u4E00-\u9FD5a-zA-Z0-9+#&\._]+)", re.U) 改成 re_han_default = re.compile("(.+)", re.U) 搜尋 re_userdict = re.compile('^(.+?)( [0-9]+)?( [a-z]+)?$', re.U) 改成 re_userdict = re.compile('^(.+?)(\u0040\u0040[0-9]+)?(\u0040\u0040[a-z]+)?$', re.U) 搜尋 word, freq = line.split(' ')[:2] 改成 word, freq = line.split('\u0040\u0040')[:2] 補充:若用的全模式繼續改。 搜尋 re_han_cut_all = re.compile("([\u4E00-\u9FD5]+)", re.U) 改成 re_han_cut_all = re.compile("(.+)", re.U)
3、測試程式碼
import jieba import jieba.posseg as pseg jieba.add_word('奧迪Q7',tag='car_type') jieba.add_word('A3 e-tron',tag='car_type') jieba.add_word('奧迪R8',tag='car_type') line = '奧迪Q7 e-tron是奧迪系列的車。A3 e-tron也是車。奧迪R8是另一個車。' line_txt_list = [] words = pseg.cut(line) for word, flag in words: line_txt_list.append('%s %s' % (word, flag)) print('|||'.join(line_txt_list))
4、測試結果
奧迪Q7 car_type||| x|||e eng|||- x|||tron eng|||是 v|||奧迪 nz|||系列 q|||的 uj|||車 n|||。 x|||A3 e-tron car_type|||也 d|||是 v|||車 n|||。 x|||奧迪R8 car_type|||是 v|||另 r|||一個 m|||車 n|||。 x