python中jieba庫(kù)(中文分詞庫(kù))使用安裝教程
python中jieba庫(kù)(中文分詞庫(kù))使用安裝教程
介紹
jieba是優(yōu)秀的中文分詞第三方庫(kù)。由于中文文本之間每個(gè)漢字都是連續(xù)書寫的,我們需要通過(guò)特定的手段來(lái)獲得其中的每個(gè)單詞,這種手段就叫分詞。而jieba是Python計(jì)算生態(tài)中非常優(yōu)秀的中文分詞第三方庫(kù),需要通過(guò)安裝來(lái)使用它。
jieba庫(kù)提供了三種分詞模式,但實(shí)際上要達(dá)到分詞效果只要掌握一個(gè)函數(shù)就足夠了,非常的簡(jiǎn)單有效。
安裝第三方庫(kù)需要使用pip工具,在命令行下運(yùn)行安裝命令(不是IDLE)。注意:需要將Python目錄和其目錄下的Scripts目錄加到環(huán)境變量中。
使用命令pip install jieba安裝第三方庫(kù),安裝之后會(huì)提示successfully installed,告知是否安裝成功。
分詞原理:簡(jiǎn)單來(lái)說(shuō),jieba庫(kù)是通過(guò)中文詞庫(kù)的方式來(lái)識(shí)別分詞的。它首先利用一個(gè)中文詞庫(kù),通過(guò)詞庫(kù)計(jì)算漢字之間構(gòu)成詞語(yǔ)的關(guān)聯(lián)概率,所以通過(guò)計(jì)算漢字之間的概率,就可以形成分詞的結(jié)果。當(dāng)然,除了jieba自帶的中文詞庫(kù),用戶也可以向其中增加自定義的詞組,從而使jieba的分詞更接近某些具體領(lǐng)域的使用。
jieba是python的一個(gè)中文分詞庫(kù),下面介紹它的使用方法。
安裝
方式1: pip install jieba 方式2: 先下載 http://pypi.python.org/pypi/jieba/ 然后解壓,運(yùn)行 python setup.py install
功能
下面介紹下jieba的主要功能,具體信息可參考github文檔:https://github.com/fxsjy/jieba
分詞
jieba常用的三種模式:
- 精確模式,試圖將句子最精確地切開(kāi),適合文本分析;
- 全模式,把句子中所有的可以成詞的詞語(yǔ)都掃描出來(lái), 速度非???,但是不能解決歧義;
- 搜索引擎模式,在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。
可使用 jieba.cut 和 jieba.cut_for_search 方法進(jìn)行分詞,兩者所返回的結(jié)構(gòu)都是一個(gè)可迭代的 generator,可使用 for 循環(huán)來(lái)獲得分詞后得到的每一個(gè)詞語(yǔ)(unicode),或者直接使用 jieba.lcut 以及 jieba.lcut_for_search 返回 list。
jieba.Tokenizer(dictionary=DEFAULT_DICT) :使用該方法可以自定義分詞器,可以同時(shí)使用不同的詞典。jieba.dt 為默認(rèn)分詞器,所有全局分詞相關(guān)函數(shù)都是該分詞器的映射。
jieba.cut 和 jieba.lcut 可接受的參數(shù)如下:
- 需要分詞的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
- cut_all:是否使用全模式,默認(rèn)值為
False - HMM:用來(lái)控制是否使用 HMM 模型,默認(rèn)值為
True
jieba.cut_for_search 和 jieba.lcut_for_search 接受 2 個(gè)參數(shù):
- 需要分詞的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
- HMM:用來(lái)控制是否使用 HMM 模型,默認(rèn)值為
True
需要注意的是,盡量不要使用 GBK 字符串,可能無(wú)法預(yù)料地錯(cuò)誤解碼成 UTF-8。
三種分詞模式的比較:
# 全匹配
seg_list = jieba.cut("今天哪里都沒(méi)去,在家里睡了一天", cut_all=True)
print(list(seg_list)) # ['今天', '哪里', '都', '沒(méi)去', '', '', '在家', '家里', '睡', '了', '一天']
# 精確匹配 默認(rèn)模式
seg_list = jieba.cut("今天哪里都沒(méi)去,在家里睡了一天", cut_all=False)
print(list(seg_list)) # ['今天', '哪里', '都', '沒(méi)', '去', ',', '在', '家里', '睡', '了', '一天']
# 精確匹配
seg_list = jieba.cut_for_search("今天哪里都沒(méi)去,在家里睡了一天")
print(list(seg_list)) # ['今天', '哪里', '都', '沒(méi)', '去', ',', '在', '家里', '睡', '了', '一天']自定義詞典
開(kāi)發(fā)者可以指定自己自定義的詞典,以便包含 jieba 詞庫(kù)里沒(méi)有的詞。
用法: jieba.load_userdict(dict_path)
dict_path:為自定義詞典文件的路徑
詞典格式如下:
一個(gè)詞占一行;每一行分三部分:詞語(yǔ)、詞頻(可省略)、詞性(可省略),用空格隔開(kāi),順序不可顛倒。
下面使用一個(gè)例子說(shuō)明一下:
自定義字典 user_dict.txt:
大學(xué)課程
深度學(xué)習(xí)
下面比較下精確匹配、全匹配和使用自定義詞典的區(qū)別:
import jieba
test_sent = """
數(shù)學(xué)是一門基礎(chǔ)性的大學(xué)課程,深度學(xué)習(xí)是基于數(shù)學(xué)的,尤其是線性代數(shù)課程
"""
words = jieba.cut(test_sent)
print(list(words))
# ['\n', '數(shù)學(xué)', '是', '一門', '基礎(chǔ)性', '的', '大學(xué)', '課程', ',', '深度',
# '學(xué)習(xí)', '是', '基于', '數(shù)學(xué)', '的', ',', '尤其', '是', '線性代數(shù)', '課程', '\n']
words = jieba.cut(test_sent, cut_all=True)
print(list(words))
# ['\n', '數(shù)學(xué)', '是', '一門', '基礎(chǔ)', '基礎(chǔ)性', '的', '大學(xué)', '課程', '', '', '深度',
# '學(xué)習(xí)', '是', '基于', '數(shù)學(xué)', '的', '', '', '尤其', '是', '線性', '線性代數(shù)', '代數(shù)', '課程', '\n']
jieba.load_userdict("userdict.txt")
words = jieba.cut(test_sent)
print(list(words))
# ['\n', '數(shù)學(xué)', '是', '一門', '基礎(chǔ)性', '的', '大學(xué)課程', ',', '深度學(xué)習(xí)', '是',
# '基于', '數(shù)學(xué)', '的', ',', '尤其', '是', '線性代數(shù)', '課程', '\n']
jieba.add_word("尤其是")
jieba.add_word("線性代數(shù)課程")
words = jieba.cut(test_sent)
print(list(words))
# ['\n', '數(shù)學(xué)', '是', '一門', '基礎(chǔ)性', '的', '大學(xué)課程', ',', '深度學(xué)習(xí)', '是',
# '基于', '數(shù)學(xué)', '的', ',', '尤其是', '線性代數(shù)課程', '\n']從上面的例子中可以看出,使用自定義詞典與使用默認(rèn)詞典的區(qū)別。
jieba.add_word():向自定義字典中添加詞語(yǔ)
關(guān)鍵詞提取
可以基于 TF-IDF 算法進(jìn)行關(guān)鍵詞提取,也可以基于TextRank 算法。 TF-IDF 算法與 elasticsearch 中使用的算法是一樣的。
使用 jieba.analyse.extract_tags() 函數(shù)進(jìn)行關(guān)鍵詞提取,其參數(shù)如下:
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
- sentence 為待提取的文本
- topK 為返回幾個(gè) TF/IDF 權(quán)重最大的關(guān)鍵詞,默認(rèn)值為 20
- withWeight 為是否一并返回關(guān)鍵詞權(quán)重值,默認(rèn)值為 False
- allowPOS 僅包括指定詞性的詞,默認(rèn)值為空,即不篩選
- jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 實(shí)例,idf_path 為 IDF 頻率文件
也可以使用 jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 實(shí)例,idf_path 為 IDF 頻率文件。
基于 TF-IDF 算法和TextRank算法的關(guān)鍵詞抽?。?/p>
import jieba.analyse
file = "sanguo.txt"
topK = 12
content = open(file, 'rb').read()
# 使用tf-idf算法提取關(guān)鍵詞
tags = jieba.analyse.extract_tags(content, topK=topK)
print(tags)
# ['玄德', '程遠(yuǎn)志', '張角', '云長(zhǎng)', '張飛', '黃巾', '封谞', '劉焉', '鄧茂', '鄒靖', '姓名', '招軍']
# 使用textrank算法提取關(guān)鍵詞
tags2 = jieba.analyse.textrank(content, topK=topK)
# withWeight=True:將權(quán)重值一起返回
tags = jieba.analyse.extract_tags(content, topK=topK, withWeight=True)
print(tags)
# [('玄德', 0.1038549799467099), ('程遠(yuǎn)志', 0.07787459004363208), ('張角', 0.0722532891360849),
# ('云長(zhǎng)', 0.07048801593691037), ('張飛', 0.060972692853113214), ('黃巾', 0.058227157790330185),
# ('封谞', 0.0563904127495283), ('劉焉', 0.05470798376886792), ('鄧茂', 0.04917692565566038),
# ('鄒靖', 0.04427258239705188), ('姓名', 0.04219704283997642), ('招軍', 0.04182041076757075)]上面的代碼是讀取文件,提取出現(xiàn)頻率最高的前12個(gè)詞。
詞性標(biāo)注
詞性標(biāo)注主要是標(biāo)記文本分詞后每個(gè)詞的詞性,使用例子如下:
import jieba
import jieba.posseg as pseg
# 默認(rèn)模式
seg_list = pseg.cut("今天哪里都沒(méi)去,在家里睡了一天")
for word, flag in seg_list:
print(word + " " + flag)
"""
使用 jieba 默認(rèn)模式的輸出結(jié)果是:
我 r
Prefix dict has been built successfully.
今天 t
吃 v
早飯 n
了 ul
"""
# paddle 模式
words = pseg.cut("我今天吃早飯了",use_paddle=True)
"""
使用 paddle 模式的輸出結(jié)果是:
我 r
今天 TIME
吃 v
早飯 n
了 xc
"""paddle模式的詞性對(duì)照表如下:

補(bǔ)充:Python中文分詞庫(kù)——jieba的用法
.使用說(shuō)明
jieba分詞有三種模式:精確模式、全模式和搜索引擎模式。
簡(jiǎn)單說(shuō),精確模式就是把一段文本精確的切分成若干個(gè)中文單詞,若干個(gè)中文單詞之間經(jīng)過(guò)組合就精確的還原為之前的文本,其中不存在冗余單詞。精確模式是最常用的分詞模式。
進(jìn)一步j(luò)ieba又提供了全模式,全模式是把一段中文文本中所有可能的詞語(yǔ)都掃描出來(lái),可能有一段文本它可以切分成不同的模式或者有不同的角度來(lái)切分變成不同的詞語(yǔ),那么jieba在全模式下把這樣的不同的組合都挖掘出來(lái),所以如果用全模式來(lái)進(jìn)行分詞,分詞的信息組合起來(lái)并不是精確的原有文本,會(huì)有很多的冗余。
而搜索引擎模式更加智能,它是在精確模式的基礎(chǔ)上對(duì)長(zhǎng)詞進(jìn)行再次切分,將長(zhǎng)的詞語(yǔ)變成更短的詞語(yǔ),進(jìn)而適合搜索引擎對(duì)短詞語(yǔ)的索引和搜索,在一些特定場(chǎng)合用的比較多。
jieba庫(kù)提供的常用函數(shù):
- jieba.lcut(s)
精確模式,能夠?qū)σ粋€(gè)字符串精確地返回分詞結(jié)果,而分詞的結(jié)果使用列表形式來(lái)組織。例如:
>>> import jieba
>>> jieba.lcut("中國(guó)是一個(gè)偉大的國(guó)家")
Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache
Loading model cost 2.489 seconds.
Prefix dict has been built successfully.
['中國(guó)', '是', '一個(gè)', '偉大', '的', '國(guó)家']- jieba.lcut(s,cut_all=True)
全模式,能夠返回一個(gè)列表類型的分詞結(jié)果,但結(jié)果存在冗余。例如:
>>> import jieba
>>> jieba.lcut("中國(guó)是一個(gè)偉大的國(guó)家",cut_all=True)
['中國(guó)', '國(guó)是', '一個(gè)', '偉大', '的', '國(guó)家']jieba.lcut_for_search(s)
搜索引擎模式,能夠返回一個(gè)列表類型的分詞結(jié)果,也存在冗余。例如:
>>> import jieba
>>> jieba.lcut_for_search("中華人民共和國(guó)是偉大的")
['中華', '華人', '人民', '共和', '共和國(guó)', '中華人民共和國(guó)', '是', '偉大', '的']
- jieba.add_word(w)
向分詞詞庫(kù)添加新詞w
最重要的就是jieba.lcut(s)函數(shù),完成精確的中文分詞。
到此這篇關(guān)于python中jieba庫(kù)(中文分詞庫(kù))使用安裝教程的文章就介紹到這了,更多相關(guān)python中jieba庫(kù)使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA SE包裝類和泛型詳細(xì)介紹及說(shuō)明方法
這篇文章主要介紹了JAVA SE包裝類和泛型的相關(guān)資料,包括基本數(shù)據(jù)類型與包裝類的對(duì)應(yīng)關(guān)系,以及裝箱和拆箱的概念,并重點(diǎn)講解了自動(dòng)裝箱和自動(dòng)拆箱的機(jī)制,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
Spring?Cloud?Gateway遠(yuǎn)程命令執(zhí)行漏洞分析(CVE-2022-22947)
使用Spring Cloud Gateway的應(yīng)用程序在Actuator端點(diǎn)啟用、公開(kāi)和不安全的情況下容易受到代碼注入的攻擊,攻擊者可以惡意創(chuàng)建允許在遠(yuǎn)程主機(jī)上執(zhí)行任意遠(yuǎn)程執(zhí)行的請(qǐng)求,這篇文章主要介紹了Spring?Cloud?Gateway遠(yuǎn)程命令執(zhí)行漏洞(CVE-2022-22947),需要的朋友可以參考下2023-03-03
Java Online Exam在線考試系統(tǒng)的實(shí)現(xiàn)
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+springboot+vue+jsp+mysql+maven實(shí)現(xiàn)Online Exam在線考試系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11
淺談Java中SimpleDateFormat 多線程不安全原因
SimpleDateFormat是Java中用于日期時(shí)間格式化的一個(gè)類,本文主要介紹了淺談Java中SimpleDateFormat 多線程不安全原因,感興趣的可以了解一下2024-01-01
Java設(shè)計(jì)模式常用的七大原則總結(jié)
今天給大家總結(jié)了Java設(shè)計(jì)模式的七大原則,主要有單一職責(zé)原則,接口隔離原則,依賴倒轉(zhuǎn)原則,里氏替換原則等,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06
深入了解Java核心類庫(kù)--BigDecimal和System類
這篇文章主要為大家詳細(xì)介紹了javaBigDecimal和System類定義與使用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來(lái)幫助2021-07-07

