聲明:本文參考jieba官方文檔而成,官方連接:https://github.com/fxsjy/jiebajava
【一】jieba安裝python
pip install jiebac++
【二】jieba簡介git
簡介可見jieba官方說明:https://pypi.org/project/jieba/github
總而言之,jieba用於中文分詞,支持的文本編碼格式爲utf-8,支持的功能包括:中文分詞、關鍵字提取、詞性標註算法
總體功能以下圖:ide
【三】結巴使用之分詞this
1. 使用精確模式編碼
# -*- coding:utf-8 -*- import jieba sentence = "我愛北京天安門" seg = jieba.cut(sentence=sentence) print("/".join(seg))
結果以下:code
我/愛/北京/天安門
2. 使用全模式
import jieba sentence = "我愛北京天安門" seg = jieba.cut(sentence=sentence,cut_all=True) print("/".join(seg))
結果以下:
我/愛/北京/天安/天安門
3.使用搜索模式
# -*- coding:utf-8 -*- import jieba sentence = "我愛北京天安門" seg = jieba.cut_for_search(sentence=sentence) print("/".join(seg))
結果以下:
我/愛/北京/天安/天安門
關於三種模式的區別,可見官方描述:
4. 分詞接口詳解
4.1 cut接口,該接口接受三個參數,重點關注一下第一個參數:要求句子編譯格式爲unicode編碼。因此,若是是GBK編碼,須要先轉換爲utf-8接口的編碼格式。
cut(self, sentence, cut_all=False, HMM=True) - sentence: The str(unicode) to be segmented. - cut_all: Model type. True for full pattern, False for accurate pattern. - HMM: Whether to use the Hidden Markov Model.
當咱們不知道文檔的編碼格式時,能夠採用以下代碼:
import chardet with open("xxx.txt",'rb') as f: data = f.read() print(chardet.detect(data))
輸出結果爲:
{'confidence': 0.99, 'language': 'Chinese', 'encoding': 'GB2312'}
4.2 cut_for_search接口
cut_for_search(self, sentence, HMM=True)
4.3 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
print(jieba.lcut(sentence)) print(jieba.lcut_for_search(sentence))
結果以下:
['我', '愛', '北京', '天安門'] ['我', '愛', '北京', '天安', '天安門']
【四】自定義詞典
1. 先看看jieba自帶的詞典長啥樣
jieba/dict.txt
T恤 4 n A座 3 n A股 3 n A型 3 n A輪 3 n
能夠看出,jieba的詞典組成格式爲:一行一個詞語,詞語 詞頻 詞性
據jieba官方介紹:
詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒
2. 自定一一個字典
我 4 n 北京 3 n 天安門
3. 使用自定義詞典
jieba.load_userdict(r"D:\jieba-0.39\my_dict.txt") print(jieba.lcut(sentence)) print(jieba.lcut_for_search(sentence))
結果以下:
['我', '愛', '北京', '天安門'] ['我', '愛', '北京', '天安', '天安門']
【五】調整詞典
jieba支持動態調整已經加載的詞典
有兩種方法
1. 將新詞加入詞典
2. 調整詞典中的某個詞的詞頻
使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中動態修改詞典。
使用 suggest_freq(segment, tune=True) 可調節單個詞語的詞頻,使其能(或不能)被分出來。
【六】關鍵詞提取
jieba分詞支持兩種關鍵詞提取算法:TF-IDF、TextRank。這兩種算法會在後面的文章結合jieba源碼進行分析。這裏先看看如何使用。
1. 基於TF-IDF進行關鍵詞提取
print(','.join(jieba.analyse.extract_tags(sentence,topK=2)))
結果以下:
天安門,北京
1.1 接口詳解 extract_tags
extract_tags(self, sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False)
sentence 爲待提取的文本 topK 爲返回幾個 TF/IDF 權重最大的關鍵詞,默認值爲 20 withWeight 爲是否一併返回關鍵詞權重值,默認值爲 False allowPOS 僅包括指定詞性的詞,默認值爲空,即不篩選
該接口用於基於TF-IDF提取關鍵詞,可用於篩選指定詞性的關鍵詞,返回值能夠帶關鍵詞的權重,也能夠不帶。
2. 依據TextRank算法進行關鍵詞提取
print(','.join(jieba.analyse.textrank(sentence,topK=2)))
結果以下:
天安門,北京
2.1 接口詳解 textrank
textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False):
- topK: return how many top keywords. `None` for all possible words. - withWeight: if True, return a list of (word, weight); if False, return a list of words. - allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v']. if the POS of w is not in this list, it will be filtered. - withFlag: if True, return a list of pair(word, weight) like posseg.cut if False, return a list of words
【七】詞性標註
words =jieba.posseg.cut(sentence) for word, flag in words: print('%s %s' % (word, flag))
結果以下:
我 r 愛 v 北京 n 天安門 ns
總結:jieba提供的中文分詞、詞性標註、關鍵字提取等功能,使用簡單,安裝方便。其實現不只有python版本,還有c++ java等版本,詳情能夠jieba官方連接:https://github.com/fxsjy/jieba