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常用的三種模式:
- 精確模式,試圖將句子最精確地切開,適合文本分析;
- 全模式,把句子中所有的可以成詞的詞語(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)', '去', ',', '在', '家里', '睡', '了', '一天']
自定義詞典
開發(fā)者可以指定自己自定義的詞典,以便包含 jieba 詞庫(kù)里沒(méi)有的詞。
用法: jieba.load_userdict(dict_path)
dict_path:為自定義詞典文件的路徑
詞典格式如下:
一個(gè)詞占一行;每一行分三部分:詞語(yǔ)、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。
下面使用一個(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設(shè)計(jì)模式之適配器模式的實(shí)現(xiàn)
這篇文章主要介紹了Java設(shè)計(jì)模式之適配器模式的實(shí)現(xiàn),適配器模式(Adapter Pattern)是作為兩個(gè)不兼容的接口之間的橋梁,這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能,需要的朋友可以參考下2023-11-11Java微信小程序oss圖片上傳的實(shí)現(xiàn)方法
這篇文章主要介紹了Java微信小程序oss圖片上傳的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Java中xxl-job實(shí)現(xiàn)分片廣播任務(wù)的示例
本文主要介紹了Java中xxl-job實(shí)現(xiàn)分片廣播任務(wù)的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03如何配置Eclipse實(shí)現(xiàn)定制登錄界面
本文介紹了如何配置Eclipse實(shí)現(xiàn)定制登錄界面,每一步的講解都很細(xì)致,感興趣的小伙伴可以閱讀一下2015-07-07Java字節(jié)流 從文件輸入輸出到文件過(guò)程解析
這篇文章主要介紹了Java字節(jié)流 從文件輸入 輸出到文件過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Spring Boot啟動(dòng)時(shí)調(diào)用自己的非web邏輯
在spring Boot中,有些代碼是WEB功能,例如API等,但是有些邏輯是非WEB,啟動(dòng)時(shí)就要調(diào)用并持續(xù)運(yùn)行的,該如何加載自己的非WEB邏輯呢,下面通過(guò)實(shí)例代碼給大家講解,一起看看吧2017-07-07HttpsURLConnection上傳文件流(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇HttpsURLConnection上傳文件流(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07