日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简明 jieba 中文分词教程

發(fā)布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简明 jieba 中文分词教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

0 引言

??jieba 是目前最好的 Python 中文分詞組件,它主要有以下 3 種特性:

  • 支持 3 種分詞模式:精確模式、全模式、搜索引擎模式
  • 支持繁體分詞
  • 支持自定義詞典
# 導(dǎo)入 jieba import jieba import jieba.posseg as pseg #詞性標(biāo)注 import jieba.analyse as anls #關(guān)鍵詞提取

1 分詞

??可使用 jieba.cut 和 jieba.cut_for_search 方法進行分詞,兩者所返回的結(jié)構(gòu)都是一個可迭代的 generator,可使用 for 循環(huán)來獲得分詞后得到的每一個詞語(unicode),或者直接使用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list。其中:

  • jieba.cut 和 jieba.lcut 接受 3 個參數(shù):
    • 需要分詞的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
    • cut_all 參數(shù):是否使用全模式,默認值為 False
    • HMM 參數(shù):用來控制是否使用 HMM 模型,默認值為 True
  • jieba.cut_for_search 和 jieba.lcut_for_search 接受 2 個參數(shù):
    • 需要分詞的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
    • HMM 參數(shù):用來控制是否使用 HMM 模型,默認值為 True

# 盡量不要使用 GBK 字符串,可能無法預(yù)料地錯誤解碼成 UTF-8

1.1 全模式和精確模式

# 全模式 seg_list = jieba.cut("他來到上海交通大學(xué)", cut_all=True) print("【全模式】:" + "/ ".join(seg_list))

【全模式】:他/ 來到/ 上海/ 上海交通大學(xué)/ 交通/ 大學(xué)

# 精確模式 seg_list = jieba.cut("他來到上海交通大學(xué)", cut_all=False) print("【精確模式】:" + "/ ".join(seg_list))

【精確模式】:他/ 來到/ 上海交通大學(xué)

type(seg_list)

generator

# 返回列表 seg_list = jieba.lcut("他來到上海交通大學(xué)", cut_all=True) print("【返回列表】:{0}".format(seg_list))

【返回列表】:['他', '來到', '上海', '上海交通大學(xué)', '交通', '大學(xué)']

type(seg_list)

list

1.2 搜索引擎模式

# 搜索引擎模式 seg_list = jieba.cut_for_search("他畢業(yè)于上海交通大學(xué)機電系,后來在一機部上海電器科學(xué)研究所工作") print("【搜索引擎模式】:" + "/ ".join(seg_list))

【搜索引擎模式】:他/ 畢業(yè)/ 于/ 上海/ 交通/ 大學(xué)/ 上海交通大學(xué)/ 機電/ 系/ ,/ 后來/ 在/ 一機部/ 上海/ 電器/ 科學(xué)/ 研究/ 研究所/ 工作

# 返回列表 seg_list = jieba.lcut_for_search("他畢業(yè)于上海交通大學(xué)機電系,后來在一機部上海電器科學(xué)研究所工作") print("【返回列表】:{0}".format(seg_list))

【返回列表】:['他', '畢業(yè)', '于', '上海', '交通', '大學(xué)', '上海交通大學(xué)', '機電', '系', ',', '后來', '在', '一機部', '上海', '電器', '科學(xué)', '研究', '研究所', '工作']

1.3 HMM 模型

??HMM 模型,即隱馬爾可夫模型(Hidden Markov Model, HMM),是一種基于概率的統(tǒng)計分析模型,用來描述一個系統(tǒng)隱性狀態(tài)的轉(zhuǎn)移和隱性狀態(tài)的表現(xiàn)概率。在 jieba 中,對于未登錄到詞庫的詞,使用了基于漢字成詞能力的 HMM 模型和 Viterbi 算法,其大致原理是:

采用四個隱含狀態(tài),分別表示為單字成詞,詞組的開頭,詞組的中間,詞組的結(jié)尾。通過標(biāo)注好的分詞訓(xùn)練集,可以得到 HMM 的各個參數(shù),然后使用 Viterbi 算法來解釋測試集,得到分詞結(jié)果。

# 代碼實現(xiàn)可參考 HmmSeg.py

# 未啟用 HMM seg_list = jieba.cut("他來到了網(wǎng)易杭研大廈", HMM=False) #默認精確模式和啟用 HMM print("【未啟用 HMM】:" + "/ ".join(seg_list))

【未啟用 HMM】:他/ 來到/ 了/ 網(wǎng)易/ 杭/ 研/ 大廈

# 識別新詞 seg_list = jieba.cut("他來到了網(wǎng)易杭研大廈") #默認精確模式和啟用 HMM print("【識別新詞】:" + "/ ".join(seg_list))

【識別新詞】:他/ 來到/ 了/ 網(wǎng)易/ 杭研/ 大廈

2 繁體字分詞

??jieba 還支持對繁體字進行分詞。

# 繁體字文本 ft_text = """人生易老天難老 歲歲重陽 今又重陽 戰(zhàn)地黃花分外香 壹年壹度秋風(fēng)勁 不似春光 勝似春光 寥廓江天萬裏霜 """ # 全模式 print("【全模式】:" + "/ ".join(jieba.cut(ft_text, cut_all=True)))

【全模式】:人生/ 易/ 老天/ 難/ 老/ / / 歲/ 歲/ 重/ 陽/ / / 今/ 又/ 重/ 陽/ / / 戰(zhàn)/ 地/ 黃/ 花/ 分外/ 香/ / / 壹年/ 壹/ 度/ 秋/ 風(fēng)/ 勁/ / / 不似/ 春光/ / / 勝/ 似/ 春光/ / / 寥廓/ 江天/ 萬/ 裏/ 霜/ /

# 精確模式 print("【精確模式】:" + "/ ".join(jieba.cut(ft_text, cut_all=False)))

【精確模式】:人生/ 易/ 老天/ 難老/ / 歲/ 歲/ 重陽/ / 今/ 又/ 重陽/ / 戰(zhàn)地/ 黃/ 花/ 分外/ 香/ / 壹年/ 壹度/ 秋風(fēng)勁/ / 不/ 似/ 春光/ / 勝似/ 春光/ / 寥廓/ 江天/ 萬/ 裏/ 霜/

# 搜索引擎模式 print("【搜索引擎模式】:" + "/ ".join(jieba.cut_for_search(ft_text)))

【搜索引擎模式】:人生/ 易/ 老天/ 難老/ / 歲/ 歲/ 重陽/ / 今/ 又/ 重陽/ / 戰(zhàn)地/ 黃/ 花/ 分外/ 香/ / 壹年/ 壹度/ 秋風(fēng)勁/ / 不/ 似/ 春光/ / 勝似/ 春光/ / 寥廓/ 江天/ 萬/ 裏/ 霜/

3 添加自定義詞典

??開發(fā)者可以指定自定義詞典,以便包含 jieba 詞庫里沒有的詞,詞典格式如下:

詞語 詞頻(可省略) 詞性(可省略)

??例如:

創(chuàng)新辦 3 i 云計算 5 凱特琳 nz

# 雖然 jieba 有新詞識別能力,但自行添加新詞可以保證更高的正確率。

3.1 載入詞典

??使用 jieba.load_userdict(file_name) 即可載入詞典。

# file_name 為文件類對象或自定義詞典的路徑

# 示例文本 sample_text = "周大福是創(chuàng)新辦主任也是云計算方面的專家" # 未加載詞典 print("【未加載詞典】:" + '/ '.join(jieba.cut(sample_text)))

【未加載詞典】:周大福/ 是/ 創(chuàng)新/ 辦/ 主任/ 也/ 是/ 云/ 計算/ 方面/ 的/ 專家

# 載入詞典 jieba.load_userdict("userdict.txt") # 加載詞典后 print("【加載詞典后】:" + '/ '.join(jieba.cut(sample_text)))

【加載詞典后】:周大福/ 是/ 創(chuàng)新辦/ 主任/ 也/ 是/ 云計算/ 方面/ 的/ 專家

3.2 調(diào)整詞典

??使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中動態(tài)修改詞典。

jieba.add_word('石墨烯') #增加自定義詞語 jieba.add_word('凱特琳', freq=42, tag='nz') #設(shè)置詞頻和詞性 jieba.del_word('自定義詞') #刪除自定義詞語

??使用 suggest_freq(segment, tune=True) 可調(diào)節(jié)單個詞語的詞頻,使其能(或不能)被分出來。

# 調(diào)節(jié)詞頻前 print("【調(diào)節(jié)詞頻前】:" + '/'.join(jieba.cut('如果放到post中將出錯。', HMM=False)))

【調(diào)節(jié)詞頻前】:如果/放到/post/中將/出錯/。

# 調(diào)節(jié)詞頻 jieba.suggest_freq(('中', '將'), True)

494

# 調(diào)節(jié)詞頻后 print("【調(diào)節(jié)詞頻后】:" + '/'.join(jieba.cut('如果放到post中將出錯。', HMM=False)))

【調(diào)節(jié)詞頻后】:如果/放到/post/中/將/出錯/。

4 關(guān)鍵詞提取

??jieba 提供了兩種關(guān)鍵詞提取方法,分別基于 TF-IDF 算法和 TextRank 算法。

4.1 基于 TF-IDF 算法的關(guān)鍵詞提取

??TF-IDF(Term Frequency-Inverse Document Frequency, 詞頻-逆文件頻率)是一種統(tǒng)計方法,用以評估一個詞語對于一個文件集或一個語料庫中的一份文件的重要程度,其原理可概括為:

一個詞語在一篇文章中出現(xiàn)次數(shù)越多,同時在所有文檔中出現(xiàn)次數(shù)越少,越能夠代表該文章

??計算公式:TF-IDF = TF * IDF,其中:

  • TF(term frequency, TF):詞頻,某一個給定的詞語在該文件中出現(xiàn)的次數(shù),計算公式:

    ?

  • IDF(inverse document frequency, IDF):逆文件頻率,如果包含詞條的文件越少,則說明詞條具有很好的類別區(qū)分能力,計算公式:

    ?

??通過 jieba.analyse.extract_tags 方法可以基于 TF-IDF 算法進行關(guān)鍵詞提取,該方法共有 4 個參數(shù):

  • sentence:為待提取的文本
  • topK:為返回幾個 TF/IDF 權(quán)重最大的關(guān)鍵詞,默認值為 20
  • withWeight:是否一并返回關(guān)鍵詞權(quán)重值,默認值為 False
  • allowPOS:僅包括指定詞性的詞,默認值為空
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 anls.extract_tags(s, topK=20, withWeight=True):print('%s %s' % (x, w))

歐亞 0.7300142700289363
吉林 0.659038184373617
置業(yè) 0.4887134522112766
萬元 0.3392722481859574
增資 0.33582401985234045
4.3 0.25435675538085106
7000 0.25435675538085106
2013 0.25435675538085106
139.13 0.25435675538085106
實現(xiàn) 0.19900979900382978
綜合體 0.19480309624702127
經(jīng)營范圍 0.19389757253595744
億元 0.1914421623587234
在建 0.17541884768425534
全資 0.17180164988510638
注冊資本 0.1712441526
百貨 0.16734460041382979
零售 0.1475057117057447
子公司 0.14596045237787234
營業(yè) 0.13920178509021275

??使用 jieba.analyse.TFIDF(idf_path=None) 可以新建 TFIDF 實例,其中 idf_path 為 IDF 頻率文件。

4.2 基于 TextRank 算法的關(guān)鍵詞提取

??TextRank 是另一種關(guān)鍵詞提取算法,基于大名鼎鼎的 PageRank,其原理可參見論文—— TextRank: Bringing Order into Texts 。

??通過 jieba.analyse.textrank 方法可以使用基于 TextRank 算法的關(guān)鍵詞提取,其與 'jieba.analyse.extract_tags' 有一樣的參數(shù),但前者默認過濾詞性(allowPOS=('ns', 'n', 'vn', 'v'))。

for x, w in anls.textrank(s, withWeight=True):print('%s %s' % (x, w))

吉林 1.0
歐亞 0.9966893354178172
置業(yè) 0.6434360313092776
實現(xiàn) 0.5898606692859626
收入 0.43677859947991454
增資 0.4099900531283276
子公司 0.35678295947672795
城市 0.34971383667403655
商業(yè) 0.34817220716026936
業(yè)務(wù) 0.3092230992619838
在建 0.3077929164033088
營業(yè) 0.3035777049319588
全資 0.303540981053475
綜合體 0.29580869172394825
注冊資本 0.29000519464085045
有限公司 0.2807830798576574
零售 0.27883620861218145
百貨 0.2781657628445476
開發(fā) 0.2693488779295851
經(jīng)營范圍 0.2642762173558316

??使用 jieba.analyse.TextRank() 可以新建自定義 TextRank 實例。

4.3 自定義語料庫

??關(guān)鍵詞提取所使用逆向文件頻率(IDF)文本語料庫和停止詞(Stop Words)文本語料庫可以切換成自定義語料庫的路徑。

jieba.analyse.set_stop_words("stop_words.txt") jieba.analyse.set_idf_path("idf.txt.big"); for x, w in anls.extract_tags(s, topK=20, withWeight=True):print('%s %s' % (x, w))

吉林 1.0174270215234043
歐亞 0.7300142700289363
增資 0.5087135107617021
實現(xiàn) 0.5087135107617021
置業(yè) 0.4887134522112766
萬元 0.3392722481859574
此外 0.25435675538085106
全資 0.25435675538085106
有限公司 0.25435675538085106
4.3 0.25435675538085106
注冊資本 0.25435675538085106
7000 0.25435675538085106
增加 0.25435675538085106
主要 0.25435675538085106
房地產(chǎn) 0.25435675538085106
業(yè)務(wù) 0.25435675538085106
目前 0.25435675538085106
城市 0.25435675538085106
綜合體 0.25435675538085106
2013 0.25435675538085106

5 詞性標(biāo)注

??jieba.posseg.POSTokenizer(tokenizer=None) 新建自定義分詞器,tokenizer 參數(shù)可指定內(nèi)部使用的 jieba.Tokenizer 分詞器。jieba.posseg.dt 為默認詞性標(biāo)注分詞器。

# 標(biāo)注句子分詞后每個詞的詞性,采用和 ictclas 兼容的標(biāo)記法。

words = pseg.cut("他改變了中國") for word, flag in words:print("{0} {1}".format(word, flag))

他 r
改變 v
了 ul
中國 ns

6 并行分詞

??將目標(biāo)文本按行分隔后,把各行文本分配到多個 Python 進程并行分詞,然后歸并結(jié)果,從而獲得分詞速度的可觀提升。用法:

  • jieba.enable_parallel(4):開啟并行分詞模式,參數(shù)為并行進程數(shù)
  • jieba.disable_parallel() :關(guān)閉并行分詞模式

# 可參考 test_file.py

注意:基于 python 自帶的 multiprocessing 模塊,目前暫不支持 Windows

7 返回詞語在原文的起止位置

??使用 jieba.tokenize 方法可以返回詞語在原文的起止位置。

注意:輸入?yún)?shù)只接受 unicode

result = jieba.tokenize(u'上海益民食品一廠有限公司') print("【普通模式】") for tk in result:print("word: {0} \t\t start: {1} \t\t end: {2}".format(tk[0],tk[1],tk[2]))

【普通模式】
word: 上海 start: 0 end: 2
word: 益民 start: 2 end: 4
word: 食品 start: 4 end: 6
word: 一廠 start: 6 end: 8
word: 有限公司 start: 8 end: 12

result = jieba.tokenize(u'上海益民食品一廠有限公司', mode='search') print("【搜索模式】") for tk in result:print("word: {0} \t\t start: {1} \t\t end: {2}".format(tk[0],tk[1],tk[2]))

【搜索模式】
word: 上海 start: 0 end: 2
word: 益民 start: 2 end: 4
word: 食品 start: 4 end: 6
word: 一廠 start: 6 end: 8
word: 有限 start: 8 end: 10
word: 公司 start: 10 end: 12
word: 有限公司 start: 8 end: 12

?

?

總結(jié)

以上是生活随笔為你收集整理的简明 jieba 中文分词教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。