英文分詞可使用空格,中文就不一樣了,一些分詞的原理後面再來講,先說下python中經常使用的jieba這個工具。html
首先要注意本身在作練習時不要使用jieba.Py命名文件,不然會出現python
jieba has no attribute named cut …等這些,若是刪除了本身建立的jieba.py還有錯誤是由於沒有刪除jieba.pyc文件。ide
(1)基本分詞函數和用法函數
首先介紹下分詞的三種模式:工具
精確模式:適合將句子最精確的分開,適合文本分析;學習
全模式:把句子中全部能夠成詞的詞語都掃描出來,速度快,可是不能解決歧義;搜索引擎
搜索引擎模式:在精確模式的基礎上,對長詞再次進行切分,提升召回率,適用於搜索引擎分詞;spa
jieba.cut 以及 jieba.cut_for_search 返回的結構都是一個可迭代的 generator,可使用 for 循環來得到分詞後獲得的每個詞語code
jieba.cut 方法接受三個輸入參數:htm
jieba.cut_for_search 方法接受兩個參數
1 import jieba 2 seg_list = jieba.cut("我愛學習天然語言處理", cut_all=True) 3 print("Full Mode: " + "/ ".join(seg_list)) # 全模式 4 5 seg_list = jieba.cut("我愛天然語言處理", cut_all=False) 6 print("Default Mode: " + "/ ".join(seg_list)) # 精確模式 7 8 seg_list = jieba.cut("他畢業於上海交通大學,在百度深度學習研究院進行研究") # 默認是精確模式 9 print(", ".join(seg_list)) 10 11 seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在哈佛大學深造") # 搜索引擎模式 12 print(", ".join(seg_list))
jieba.lcut以及jieba.lcut_for_search直接返回 list
1 import jieba 2 result_lcut = jieba.lcut("小明碩士畢業於中國科學院計算所,後在哈佛大學深造") 3 result_lcut_for_search = jieba.lcut("小明碩士畢業於中國科學院計算所,後在哈佛大學深造",cut_all=True) 4 print ('result_lcut:',result_lcut) 5 print ('result_lcut_for_search:',result_lcut_for_search) 6 7 print (" ".join(result_lcut)) 8 print (" ".join(result_lcut_for_search))
添加用戶自定義字典:
不少時候咱們須要針對本身的場景進行分詞,會有一些領域內的專有詞彙。
1 import jieba 2 result_cut=jieba.cut('若是放到舊字典中將出錯。', HMM=False) 3 print('/'.join(result_cut)) 4 jieba.suggest_freq(('中', '將'), True) 5 result_cut=jieba.cut('若是放到舊字典中將出錯。', HMM=False) 6 print('/'.join(result_cut))
(2)關鍵詞提取
基於TF-IDF的關鍵詞抽取
import jieba.analyse
1 import jieba.analyse as analyse 2 import codecs 3 4 lines_NBA = codecs.open('NBA.txt',encoding='utf-8').read() 5 print (" ".join(analyse.extract_tags(lines_NBA, topK=20, withWeight=False, allowPOS=())))
另:
關鍵詞提取所使用逆向文件頻率(IDF)文本語料庫能夠切換成自定義語料庫的路徑:jieba.analyse.set_idf_path(file_name) # file_name爲自定義語料庫的路徑
關鍵詞提取所使用中止詞(Stop Words)文本語料庫能夠切換成自定義語料庫的路徑:jieba.analyse.set_stop_words(file_name) # file_name爲自定義語料庫的路徑
基於TextRank的關鍵詞提取
1 import jieba.analyse as analyse 2 import codecs 3 4 lines_NBA = codecs.open('NBA.txt',encoding='utf-8').read() 5 print(" ".join(analyse.textrank(lines_NBA, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn','v'))))
(3)詞性標註
jieba.posseg.POSTokenizer(tokenizer=None) 新建自定義分詞器,tokenizer 參數可指定內部使用的 jieba.Tokenizer 分詞器。
jieba.posseg.dt 爲默認詞性標註分詞器。
1 import jieba.posseg as pseg 2 words = pseg.cut("我愛天然語言處理") 3 for word, flag in words: 4 print('%s %s' % (word, flag))
(4)並行分詞
原理:將目標文本按行分隔後,把各行文本分配到多個 Python 進程並行分詞,而後歸併結果,從而得到分詞速度的可觀提高 基於 python 自帶的 multiprocessing 模塊,目前暫不支持 Windows
用法:
jieba.enable_parallel(4) # 開啓並行分詞模式,參數爲並行進程數 jieba.disable_parallel() # 關閉並行分詞模式
實驗結果:在 4 核 3.4GHz Linux 機器上,對金庸全集進行精確分詞,得到了 1MB/s 的速度,是單進程版的 3.3 倍。
注意:並行分詞僅支持默認分詞器 jieba.dt 和 jieba.posseg.dt。
--------------------------------我是結束分割線 --------------------------------
注:本文參考寒小陽天然語言處理