目錄
1.jieba下載安裝
2.算法實現(xiàn)
3.分詞功能
1.jieba下載安裝
??? Jieba是一個中文分詞組件,可用于中文句子/詞性分割卤橄、詞性標(biāo)注绿满、未登錄詞識別,支持用戶詞典等功能窟扑。該組件的分詞精度達到了97%以上喇颁。
1)下載Jieba
官網(wǎng)地址:pypi.python.org/pypi/jieba/
2)安裝
打開命令提示符,輸入python setup.py install 進行安裝
2.算法實現(xiàn)
1)基于Trie樹結(jié)構(gòu)實現(xiàn)高效的詞圖掃描嚎货,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無環(huán)圖(DAG)橘霎;
2)采用了動態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合;
3)對于未登錄詞殖属,采用了基于漢字成詞能力的HMM模型姐叁,使用了Viterbi算法。
3.分詞功能
1)分詞
jieba.cut方法接受兩個輸入?yún)?shù): 1) 第一個參數(shù)為需要分詞的字符串 2)cut_all參數(shù)用來控制是否采用全模式洗显;jieba.cut_for_search 方法接受兩個參數(shù):需要分詞的字符串;是否使用 HMM 模型挠唆。該方法適合用于搜索引擎構(gòu)建倒排索引的分詞,粒度比較細玄组。
待分詞的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串俄讹。注意:不建議直接輸入 GBK 字符串哆致,可能無法預(yù)料地錯誤解碼成 UTF-8。
jieba.cut以及jieba.cut_for_search返回的結(jié)構(gòu)都是一個可迭代的generator沽瞭,可以使用for循環(huán)來獲得分詞后得到的每一個詞語(unicode),也可以用list(jieba.cut(...))轉(zhuǎn)化為list
代碼示例:
#encoding=utf-8
import jieba
seg_list = jieba.cut("范煒是川大信管專業(yè)的老師",cut_all=True)
print"Full Mode:","/ ".join(seg_list)#全模式
seg_list = jieba.cut("范煒是川大信管專業(yè)的老師",cut_all=False)
print"Default Mode:","/ ".join(seg_list)#精確模式
seg_list = jieba.cut("范煒是川大信管專業(yè)的老師")#默認是精確模式
print", ".join(seg_list)
seg_list = jieba.cut_for_search("范煒是川大信管專業(yè)的老師")#搜索引擎模式
print", ".join(seg_list)
結(jié)果顯示:
2)自定義詞典
用法: jieba.load_userdict(file_name) # file_name 為自定義詞典的路徑驹溃。
詞典格式和dict.txt一樣,一個詞占一行延曙;每一行分三部分豌鹤,一部分為詞語,另一部分為詞頻(可省略)布疙,最后為詞性(可省略),用空格隔開灵临。
詞頻可省略,使用計算出的能保證分出該詞的詞頻儒溉。
更改分詞器的 tmp_dir 和 cache_file 屬性,可指定緩存文件位置波闹,用于受限的文件系統(tǒng)。
自定義詞典示例:
范煒 5 nr
川大 5 j
信管 5 j
代碼示例:
#encoding=utf-8
import sys
sys.path.append("C:\Python27\Lib\site-packages\jieba")
import jieba
jieba.load_userdict("D:/jieba/jieba/userdict.txt")
seg_list= jieba.cut("范煒是川大信管專業(yè)的老師")
print("Revise: "+"/".join(seg_list))
結(jié)果顯示:
3)調(diào)整詞典
使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中動態(tài)修改詞典精堕。
使用 suggest_freq(segment, tune=True) 可調(diào)節(jié)單個詞語的詞頻蒲障,使其能(或不能)被分出來。
代碼示例:
#encoding=utf-8
import sys
sys.path.append("C:\Python27\Lib\site-packages\jieba")
import jieba
jieba.load_userdict("D:/jieba/jieba/userdict.txt")
jieba.add_word("江大橋",freq=20000,tag=None)
print"/".join(jieba.cut("江州市長江大橋參加了長江大橋的通車儀式滋捶。"))
結(jié)果顯示:
4)關(guān)鍵詞提扔嗬琛(基于 TextRank 算法的關(guān)鍵詞提取)
基本思想:
將待抽取關(guān)鍵詞的文本進行分詞巡扇;
以固定窗口大小(默認為5垮衷,通過span屬性調(diào)整)厅翔,詞之間的共現(xiàn)關(guān)系搀突,構(gòu)建圖;
計算圖中節(jié)點的PageRank仰迁,注意是無向帶權(quán)圖甸昏。
jieba.analyse.textrank(sentence, topK = 20, withWeight = False, allowPOS = ('ns', 'n', 'v', 'nv')) 注意默認過濾詞性徐许。
jieba.analyse.TextRank() 新建自定義TextRank實例。
代碼示例:
#encoding=utf-8
import sys
sys.path.append('C:\Python27\Lib\site-packages\jieba')
import jieba
import jieba.analyse
from optparse import OptionParser
s="此外雌隅,公司擬對全資子公司吉林歐亞置業(yè)有限公司增資4.3億元缸沃,增資后修械,吉林歐亞置業(yè)注冊資本由7000萬元增加到5億元。吉林歐亞置業(yè)主要經(jīng)營范圍為房地產(chǎn)開發(fā)及百貨零售等業(yè)務(wù)翘单。目前在建吉林歐亞城市商業(yè)綜合體項目仇箱。2013年,實現(xiàn)營業(yè)收入0萬元剂桥,實現(xiàn)凈利潤-139.13萬元属提。"
for x, w in jieba.analyse.textrank(s,topK=5,withWeight=True):
? ? print("%s %s"% (x, w))
結(jié)果顯示:
5)詞性標(biāo)注
jieba.posseg.POSTokenizer(tokenizer=None) 新建自定義分詞器,tokenizer 參數(shù)可指定內(nèi)部使用的 jieba.Tokenizer 分詞器斟薇。jieba.posseg.dt 為默認詞性標(biāo)注分詞器恕酸。
標(biāo)注句子分詞后每個詞的詞性,采用和 ictclas 兼容的標(biāo)記法蕊温。
代碼示例:
#encoding=utf-8
import jieba.posseg as pseg
words = pseg.cut("我愛北京天安門。")
for w in words:
print("%s %s"%(w.word, w.flag))
結(jié)果顯示: