jieba中文處理
阿新 • • 發佈:2018-03-27
nes 格式 unicode ont 詞頻 字符 sea pack HR
一:前言
和拉丁語系不同,亞洲語言是不用空格分開每個有意義的詞的。而當我們進行自然語言處理的時候,大部分情況下,詞匯是我們對句子和文章理解的基礎,因此需要一個工具去把完整的文本中分解成粒度更細的詞。
jieba就是這樣一個非常好用的中文工具,是以分詞起家的,但是功能比分詞要強大很多。
二:基本分詞函數與用法
jieba.cut 以及 jieba.cut_for_search 返回的結構都是一個可叠代的 generator,可以使用 for 循環來獲得分詞後得到的每一個詞語(unicode)
jieba.cut 方法接受三個輸入參數:
- 需要分詞的字符串
- cut_all 參數用來控制是否采用全模式
- HMM 參數用來控制是否使用 HMM 模型
jieba.cut_for_search 方法接受兩個參數
- 需要分詞的字符串
- 是否使用 HMM 模型。
該方法適合用於搜索引擎構建倒排索引的分詞,粒度比較細
import jieba list0 = jieba.cut(‘小明碩士畢業於中國科學院計算所,後在哈佛大學深造‘, cut_all=True) print(‘全模式‘, list(list0)) # [‘小‘, ‘明‘, ‘碩士‘, ‘畢業‘, ‘於‘, ‘中國‘, ‘中國科學院‘, ‘科學‘, ‘科學院‘, ‘學院‘, ‘計算‘, ‘計算所‘, ‘‘, ‘‘, ‘後‘, ‘在‘, ‘哈佛‘, ‘哈佛大學‘, ‘大學‘, ‘深造‘]list1 = jieba.cut(‘小明碩士畢業於中國科學院計算所,後在哈佛大學深造‘, cut_all=False) print(‘精準模式‘, list(list1)) # [‘小明‘, ‘碩士‘, ‘畢業‘, ‘於‘, ‘中國科學院‘, ‘計算所‘, ‘,‘, ‘後‘, ‘在‘, ‘哈佛大學‘, ‘深造‘] list2 = jieba.cut_for_search(‘小明碩士畢業於中國科學院計算所,後在哈佛大學深造‘) print(‘搜索引擎模式‘, list(list2)) # [‘小明‘, ‘碩士‘, ‘畢業‘, ‘於‘, ‘中國‘, ‘科學‘, ‘學院‘, ‘科學院‘, ‘中國科學院‘, ‘計算‘, ‘計算所‘, ‘,‘, ‘後‘, ‘在‘, ‘哈佛‘, ‘大學‘, ‘哈佛大學‘, ‘深造‘]
添加用戶自定義詞典
很多時候我們需要針對自己的場景進行分詞,會有一些領域內的專有詞匯。
- 1.可以用jieba.load_userdict(file_name)加載用戶字典
- 2.少量的詞匯可以自己用下面方法手動添加:
- 用 add_word(word, freq=None, tag=None) 和 del_word(word) 在程序中動態修改詞典
- 用 suggest_freq(segment, tune=True) 可調節單個詞語的詞頻,使其能(或不能)被分出來。
加載用戶詞典方式:
# 未加載用戶詞典時 st1=jieba.cut(‘王蔣小明在加州理工大學上學‘) # [‘王‘, ‘蔣小明‘, ‘在‘, ‘加州‘, ‘理工大學‘, ‘上學‘] print(list(st1)) # 加載用戶詞典時 # jieba自帶的庫一般在python都為site-packages\jieba\dict.txt jieba.load_userdict(‘d.txt‘) # 詞典格式和dict.txt一樣,一詞一行,每行分三個部分(用空格隔開),詞語 詞頻(可省) 詞性(可省) # 順序不可顛倒,若filename為路徑或二進制方式打開,則需為UTF-8 # 定義: 王蔣小明 加州理工大學 在d.txt中 st2=jieba.cut(‘王蔣小明在加州理工大學上學‘) # [‘王蔣小明‘, ‘在‘, ‘加州理工大學‘, ‘上學‘] print(list(st2))
調節詞頻
a=jieba.cut(‘在考試中將有監控‘) print(list(a)) # [‘在‘, ‘考試‘, ‘中將‘, ‘有‘, ‘監控‘] jieba.suggest_freq((‘中‘,‘將‘),True) # 通過調節詞頻,讓中和將都被劃出來 b=jieba.cut(‘在考試中將有監控‘) print(list(b)) # [‘在‘, ‘考試‘, ‘中‘, ‘將‘, ‘有‘, ‘監控‘]
關鍵詞提取:
基於 TF-IDF 算法的關鍵詞抽取
import jieba.analyse
- jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
- sentence 為待提取的文本
- topK 為返回幾個 TF/IDF 權重最大的關鍵詞,默認值為 20
- withWeight 為是否一並返回關鍵詞權重值,默認值為 False
- allowPOS 僅包括指定詞性的詞,默認值為空,即不篩選
import jieba.analyse as analyse lines = open(‘西遊記.txt‘,‘r‘,encoding=‘utf8‘).read() # 西遊記.txt為整本西遊記小說 lists0=analyse.extract_tags(lines, topK=20, withWeight=False, allowPOS=()) print(list(lists0)) # 抽出整本小說的關鍵字 # [‘行者‘, ‘八戒‘, ‘師父‘, ‘三藏‘, ‘唐僧‘, ‘大聖‘, ‘沙僧‘, ‘妖精‘, ‘菩薩‘, ‘和尚‘, ‘那怪‘, ‘那裏‘, ‘長老‘, ‘呆子‘, ‘徒弟‘, ‘怎麽‘, ‘不知‘, ‘老孫‘, ‘國王‘, ‘一個‘]
關於TF-IDF 算法的關鍵詞抽取補充
-
關鍵詞提取所使用逆向文件頻率(IDF)文本語料庫可以切換成自定義語料庫的路徑
- 用法: jieba.analyse.set_idf_path(file_name) # file_name為自定義語料庫的路徑
- 自定義語料庫示例
- 用法示例
- 關鍵詞提取所使用停止詞(Stop Words)文本語料庫可以切換成自定義語料庫的路徑
- 用法: jieba.analyse.set_stop_words(file_name) # file_name為自定義語料庫的路徑
- 自定義語料庫示例
- 用法示例
- 用法: jieba.analyse.set_idf_path(file_name) # file_name為自定義語料庫的路徑
-
關鍵詞一並返回關鍵詞權重值示例
- 用法示例
- 用法示例
詞性標註
- jieba.posseg.POSTokenizer(tokenizer=None) 新建自定義分詞器,tokenizer 參數可指定內部使用的 jieba.Tokenizer 分詞器。jieba.posseg.dt 為默認詞性標註分詞器。
- 標註句子分詞後每個詞的詞性,采用和 ictclas 兼容的標記法。
- 具體的詞性對照表
import jieba.posseg as pseg words = pseg.cut("我愛我的祖國") for word, flag in words: print(‘%s %s‘ % (word, flag)) # 我 r # 愛 v # 我 r # 的 uj # 祖國 n
Tokenize:返回詞語在原文的起止位置
註意,輸入參數只接受 unicode
print("默認模式的tokenize") result = jieba.tokenize(u‘自然語言處理非常有用‘) for tk in result: print("%s\t\t start: %d \t\t end:%d" % (tk[0], tk[1], tk[2])) print("\n==================================================\n") print("搜索模式的tokenize") result = jieba.tokenize(u‘自然語言處理非常有用‘, mode=‘search‘) for tk in result: print("%s\t\t start: %d \t\t end:%d" % (tk[0], tk[1], tk[2])) """ 默認模式的tokenize 自然語言 start: 0 end:4 處理 start: 4 end:6 非常 start: 6 end:8 有用 start: 8 end:10 ================================================== 這是搜索模式的tokenize 自然 start: 0 end:2 語言 start: 2 end:4 自然語言 start: 0 end:4 處理 start: 4 end:6 非常 start: 6 end:8 有用 start: 8 end:10 """
jieba中文處理