支持三種分詞模式:
精確模式,試圖將句子最精確地切開,適合文本分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞。
關鍵詞:HMM 隱馬爾可夫模型
三種分詞模式:
# -*- coding: utf-8 -*- import jieba #jieba.initialize() seg_list = jieba.cut("中華人民共和國萬歲!", cut_all=False) #精確模式(默認) print(" | ".join(seg_list)) seg_list = jieba.cut("中華人民共和國萬歲!", cut_all=True) #全模式 print(" | ".join(seg_list)) seg_list = jieba.cut_for_search("中華人民共和國萬歲!") #搜索引擎模式 print(" | ".join(seg_list))
結果:
中華人民共和國 | 萬歲 | !
中華 | 中華人民 | 中華人民共和國 | 華人 | 人民 | 人民共和國 | 共和 | 共和國 | 萬歲 | |
中華 | 華人 | 人民 | 共和 | 共和國 | 中華人民共和國 | 萬歲 | !
結果可以直接保持為 list
seg_list = jieba.cut("中華人民共和國萬歲!") #默認精確模式 print(seg_list) #此返回生成器 seg_list = jieba.lcut("中華人民共和國萬歲!") print(seg_list) seg_list = jieba.lcut_for_search ("中華人民共和國萬歲!") print(seg_list)
結果:
<generator object Tokenizer.cut at 0x0000000003972150>
['中華人民共和國', '萬歲', '!']
['中華', '華人', '人民', '共和', '共和國', '中華人民共和國', '萬歲', '!']
【自定義分詞字典(屬額外添加)】
默認分詞器為 jieba.dt。可使用自定義字典,添加詞庫中沒有的詞,文本必須為 UTF-8 編碼。詞典格式和 dict.txt 一樣,一個詞占一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開。
測試文件 dict.txt 中,我只添加一個單詞 "和國":
jieba.load_userdict("C:/Users/huangzecheng/Desktop/dict.txt") seg_list = jieba.cut("中華人民共和國萬歲!", cut_all=True)#如全模式 print(" | ".join(seg_list))
結果:
中華 | 中華人民 | 中華人民共和國 | 華人 | 人民 | 人民共和國 | 共和 | 共和國 | 和國 | 萬歲 | |
【添加刪除分詞】
加載的自定義詞典,是與默認的一起定義分詞的。也可以使用幾個函數添加、刪除、禁止某個詞被划分。
add_word(word, freq=None, tag=None)
del_word(word)
suggest_freq(segment, tune=True)
jieba.add_word('中華人') print(" | ".join(jieba.cut("中華人民共和國萬歲!", cut_all=True))) 結果:中華 | 中華人 | 中華人民 | 中華人民共和國 | 華人 | 人民 | 人民共和國 | 共和 | 共和國 | 和國 | 萬歲 | | jieba.del_word('共和') print(" | ".join(jieba.cut("中華人民共和國萬歲!", cut_all=True))) 結果:中華 | 中華人 | 中華人民 | 中華人民共和國 | 華人 | 人民 | 人民共和國 | 共和國 | 和國 | 萬歲 | | jieba.add_word('共和') jieba.suggest_freq('國萬歲', tune=True) print(" | ".join(jieba.cut("中華人民共和國萬歲!", cut_all=True))) 結果:中華 | 中華人 | 中華人民 | 中華人民共和國 | 華人 | 人民 | 人民共和國 | 共和國 | 和國 | 國萬歲 | 萬歲 | |
【使用最多的分詞】
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence :為待提取的文本
topK :為返回幾個 TF/IDF 權重最大的關鍵詞,默認值為 20
withWeight :為是否一並返回關鍵詞權重值,默認值為 False
allowPOS :僅包括指定詞性的詞,默認值為空,即不篩選
測試:去文本中出現次數最多的前5個字符
str = "topK 為返回幾個 TF/IDF 權重最大的關鍵詞,默認值為 20;" str = str + "withWeight 為是否一並返回關鍵詞權重值,默認值為 False" str = str + "allowPOS 僅包括指定詞性的詞,默認值為空,即不篩選" str = str + "jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 實例,idf_path 為 IDF 頻率文件" tags = jieba.analyse.extract_tags(str, topK=5) print(" | ".join(tags)) 結果:默認值 | TFIDF | idf | IDF | path
上面說過字典有3部分組成:詞語、詞頻(可省略)、詞性(可省略)。textrank可運行過濾不同詞性。
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
tags = jieba.analyse.textrank(str, topK=5, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) print(" | ".join(tags)) 結果:權重 | 關鍵詞 | 詞性 | 頻率 | 新建
【取分詞及詞性】
words = jieba.posseg.cut("中華人民共和國萬歲!") for word, flag in words: print('%s %s' % (word, flag)) 結果: 中華人民共和國 ns 萬歲 m ! x
【取分詞及起止位置】
words = jieba.tokenize("中華人民共和國萬歲!") for w in words: print("word %s\t\t start: %d \t\t end:%d" % (w[0],w[1],w[2])) 結果: word 中華人民共和國 start: 0 end:7 word 萬歲 start: 7 end:9 word ! start: 9 end:10
words = jieba.tokenize("中華人民共和國萬歲!", mode='search') #搜索模式 for w in words: print("word %s\t\t start: %d \t\t end:%d" % (w[0],w[1],w[2])) 結果: word 中華 start: 0 end:2 word 華人 start: 1 end:3 word 人民 start: 2 end:4 word 共和 start: 4 end:6 word 共和國 start: 4 end:7 word 中華人民共和國 start: 0 end:7 word 萬歲 start: 7 end:9 word ! start: 9 end:10
簡單示例:從 sql server 數據庫中讀取某個文本字段,分詞並自定義繪圖
# -*- coding: utf-8 -*- import pymssql import jieba import jieba.analyse import matplotlib.pyplot as plt from wordcloud import WordCloud from scipy.misc import imread host = "localhost" user = "kk" passwd = "kk" dbname = "hzc" conn = None try: conn = pymssql.connect( host = host, user = user, password = passwd, database = dbname ) cur = conn.cursor() cur.execute("select col from jieba;") rows = cur.fetchall() tagsall=u"" #tagsall = open('filepath.txt','r').read() for row in rows: tags = jieba.analyse.extract_tags(row[0], topK=20) tagsjoin = u" ".join(tags) tagsall = tagsall + " " + tagsjoin #print(tagsjoin) #http://labfile.oss.aliyuncs.com/courses/756/DroidSansFallbackFull.ttf wc_cfg = WordCloud( font_path="D:/Python35/Tools/whl/DroidSansFallbackFull.ttf",#字體 mask= imread("D:/Python35/Tools/whl/bg.png"),#背景模板(只黑白圖,黑的顯示) background_color="white", #背景色 max_words=1000, #最大詞量 mode="RGBA", #透明底色(background_color不為空).默認rgb width=500, #寬度 height=400, #高度 max_font_size=100 #字體大小 ) wc = wc_cfg.generate(tagsall) plt.imshow(wc) plt.axis("off") plt.show() finally: if conn: conn.close()

