Python中文分詞庫jieba(結(jié)巴分詞)詳細(xì)使用介紹
一,jieba的介紹
jieba 是目前表現(xiàn)較為不錯(cuò)的 Python 中文分詞組件,它主要有以下特性:
支持四種分詞模式:
- 精確模式
- 全模式
- 搜索引擎模式
- paddle模式
支持繁體分詞
支持自定義詞典
MIT 授權(quán)協(xié)議
二,安裝和使用
1,安裝
pip3 install jieba
2,使用
import jieba
三,主要分詞功能
1,jieba.cut 和jieba.lcut
lcut 將返回的對(duì)象轉(zhuǎn)化為list對(duì)象返回
傳入?yún)?shù)解析:
def cut(self, sentence, cut_all=False, HMM=True, use_paddle=False): # sentence: 需要分詞的字符串; # cut_all: 參數(shù)用來控制是否采用全模式; # HMM: 參數(shù)用來控制是否使用 HMM 模型; # use_paddle: 參數(shù)用來控制是否使用paddle模式下的分詞模式,paddle模式采用延遲加載方式,通過enable_paddle接口安裝paddlepaddle-tiny
1)精準(zhǔn)模式(默認(rèn)):
試圖將句子最精確地切開,適合文本分析
seg_list = jieba.cut("我來到北京清華大學(xué)", cut_all=False) print("精準(zhǔn)模式: " + "/ ".join(seg_list)) # 精確模式 # -----output----- 精準(zhǔn)模式: 我/ 來到/ 北京/ 清華大學(xué)
2)全模式:
把句子中所有的可以成詞的詞語都掃描出來, 速度非???,但是不能解決歧義;
seg_list = jieba.cut("我來到北京清華大學(xué)", cut_all=True) print("全模式: " + "/ ".join(seg_list)) # 全模式 # -----output----- 全模式: 我/ 來到/ 北京/ 清華/ 清華大學(xué)/ 華大/ 大學(xué)
3)paddle模式
利用PaddlePaddle深度學(xué)習(xí)框架,訓(xùn)練序列標(biāo)注(雙向GRU)網(wǎng)絡(luò)模型實(shí)現(xiàn)分詞。同時(shí)支持詞性標(biāo)注。
paddle模式使用需安裝paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1。
目前paddle模式支持jieba v0.40及以上版本。
jieba v0.40以下版本,請(qǐng)升級(jí)jieba,pip installjieba --upgrade。 PaddlePaddle官網(wǎng)
import jieba # 通過enable_paddle接口安裝paddlepaddle-tiny,并且import相關(guān)代碼; jieba.enable_paddle() # 初次使用可以自動(dòng)安裝并導(dǎo)入代碼 seg_list = jieba.cut(str, use_paddle=True) print('Paddle模式: ' + '/'.join(list(seg_list))) # -----output----- Paddle enabled successfully...... Paddle模式: 我/來到/北京清華大學(xué)
2,jieba.cut_for_search 和 jieba.lcut_for_search
搜索引擎模式
在精確模式的基礎(chǔ)上,對(duì)長詞再次切分,提高召回率,適合用于搜索引擎分詞
seg_list = jieba.cut_for_search("小明碩士畢業(yè)于中國科學(xué)院計(jì)算所,后在日本京都大學(xué)深造") # 搜索引擎模式 print(", ".join(seg_list)) # -----output----- 小明, 碩士, 畢業(yè), 于, 中國, 科學(xué), 學(xué)院, 科學(xué)院, 中國科學(xué)院, 計(jì)算, 計(jì)算所, ,, 后, 在, 日本, 京都, 大學(xué), 日本京都大學(xué), 深造
3,jieba.Tokenizer(dictionary=DEFAULT_DICT)
新建自定義分詞器,可用于同時(shí)使用不同詞典。jieba.dt 為默認(rèn)分詞器,所有全局分詞相關(guān)函數(shù)都是該分詞器的映射。
import jieba test_sent = "永和服裝飾品有限公司" result = jieba.tokenize(test_sent) ##Tokenize:返回詞語在原文的起始位置 print(result) for tk in result: # print ("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]) ) print (tk) # -----output----- <generator object Tokenizer.tokenize at 0x7f6b68a69d58> ('永和', 0, 2) ('服裝', 2, 4) ('飾品', 4, 6) ('有限公司', 6, 10)
四,添加自定義詞典
開發(fā)者可以指定自己自定義的詞典,以便包含 jieba 詞庫里沒有的詞。雖然 jieba有新詞識(shí)別能力,但是自行添加新詞可以保證更高的正確率。
1,添加詞典用法:
jieba.load_userdict(dict_path) # dict_path為文件類對(duì)象或自定義詞典的路徑。
2,其中自定義字典舉例如下:
一個(gè)詞占一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。
創(chuàng)新辦 3 i 云計(jì)算 5 凱特琳 nz 中信建投 投資公司
3,使用自定義詞典示例:
1)使用自定義詞典文件
import jieba test_sent = "中信建投投資公司投資了一款游戲,中信也投資了一個(gè)游戲公司" jieba.load_userdict("userdict.txt") words = jieba.cut(test_sent) print(list(words)) #-----output------ ['中信建投', '投資公司', '投資', '了', '一款', '游戲', ',', '中信', '也', '投資', '了', '一個(gè)', '游戲', '公司']
2)使用 jieba 在程序中動(dòng)態(tài)修改詞典
import jieba # 定義示例句子 test_sent = "中信建投投資公司投資了一款游戲,中信也投資了一個(gè)游戲公司" #添加詞 jieba.add_word('中信建投') jieba.add_word('投資公司') # 刪除詞 jieba.del_word('中信建投') words = jieba.cut(test_sent) print(list(words)) #-----output------ ['中信', '建投', '投資公司', '投資', '了', '一款', '游戲', ',', '中信', '也', '投資', '了', '一個(gè)', '游戲', '公司']
五,關(guān)鍵詞提取
1,基于TF-IDF算法的關(guān)鍵詞提取
1)TF-IDF接口和示例
import jieba.analyse
- jieba.analyse.extract_tags(sentence, topK=20, withWeight=False,allowPOS=())
其中需要說明的是:- 1.sentence 為待提取的文本
- 2.topK 為返回幾個(gè) TF/IDF 權(quán)重最大的關(guān)鍵詞,默認(rèn)值為 20
- 3.withWeight 為是否一并返回關(guān)鍵詞權(quán)重值,默認(rèn)值為 False
- 4.allowPOS 僅包括指定詞性的詞,默認(rèn)值為空,即不篩選
- jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 實(shí)例,idf_path 為 IDF 頻率文件
import jieba import jieba.analyse #讀取文件,返回一個(gè)字符串,使用utf-8編碼方式讀取,該文檔位于此python同以及目錄下 content = open('data.txt','r',encoding='utf-8').read() tags = jieba.analyse.extract_tags(content,topK=10,withWeight=True,allowPOS=("nr")) print(tags) # ----output------- [('虛竹', 0.20382572423643955), ('丐幫', 0.07839419568792882), ('什么', 0.07287469641815765), ('自己', 0.05838617200768695), ('師父', 0.05459680087740782), ('內(nèi)力', 0.05353758008018405), ('大理', 0.04885277765801372), ('咱們', 0.04458784837687502), ('星宿', 0.04412126568280158), ('少林', 0.04207588649463058)]
2)關(guān)鍵詞提取所使用逆向文件頻率(IDF)文本語料庫可以切換成自定義語料庫的路徑
用法:jieba.analyse.set_idf_path(file_name) # file_name為自定義語料庫的路徑
自定義語料庫示例:
勞動(dòng)防護(hù) 13.900677652 勞動(dòng)防護(hù) 13.900677652 生化學(xué) 13.900677652 生化學(xué) 13.900677652 奧薩貝爾 13.900677652 奧薩貝爾 13.900677652 考察隊(duì)員 13.900677652 考察隊(duì)員 13.900677652 崗上 11.5027823792 崗上 11.5027823792 倒車檔 12.2912397395 倒車檔 12.2912397395 編譯 9.21854642485 編譯 9.21854642485 蝶泳 11.1926274509 外委 11.8212361103
3)關(guān)鍵詞提取所使用停止詞(Stop Words)文本語料庫可以切換成自定義語料庫的路徑
- 用法: jieba.analyse.set_stop_words(file_name) # file_name為自定義語料庫的路徑
- 自定義語料庫示例:
import jieba import jieba.analyse #讀取文件,返回一個(gè)字符串,使用utf-8編碼方式讀取,該文檔位于此python同以及目錄下 content = open(u'data.txt','r',encoding='utf-8').read() jieba.analyse.set_stop_words("stopwords.txt") tags = jieba.analyse.extract_tags(content, topK=10) print(",".join(tags))
4)關(guān)鍵詞一并返回關(guān)鍵詞權(quán)重值示例
import jieba import jieba.analyse #讀取文件,返回一個(gè)字符串,使用utf-8編碼方式讀取,該文檔位于此python同以及目錄下 content = open(u'data.txt','r',encoding='utf-8').read() jieba.analyse.set_stop_words("stopwords.txt") tags = jieba.analyse.extract_tags(content, topK=10,withWeight=True) print(tags)
2,詞性標(biāo)注
- jieba.posseg.POSTokenizer(tokenizer=None) 新建自定義分詞器,tokenizer參數(shù)可指定內(nèi)部使用的 jieba.Tokenizer 分詞器。 jieba.posseg.dt 為默認(rèn)詞性標(biāo)注分詞器。
- 標(biāo)注句子分詞后每個(gè)詞的詞性,采用和 ictclas 兼容的標(biāo)記法。
- 用法示例
import jieba.posseg as pseg words = pseg.cut("我愛北京天安門") for word, flag in words: print('%s %s' % (word, flag)) # ----output-------- 我 r 愛 v 北京 ns 天安門 ns
詞性對(duì)照表
3,并行分詞
將目標(biāo)文本按行分隔后,把各行文本分配到多個(gè) Python 進(jìn)程并行分詞,然后歸并結(jié)果,從而獲得分詞速度的可觀提升。用法:
- jieba.enable_parallel(4):開啟并行分詞模式,參數(shù)為并行進(jìn)程數(shù)
- jieba.disable_parallel() :關(guān)閉并行分詞模式
可參考 test_file.py
注意:基于 python 自帶的 multiprocessing 模塊,目前暫不支持 Windows
4,Tokenize:返回詞語在原文的起止位置
1)默認(rèn)模式
注意,輸入?yún)?shù)只接受 unicode
import jieba import jieba.analyse result = jieba.tokenize(u'永和服裝飾品有限公司') for tk in result: print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])) # ----output------- word 永和 start: 0 end:2 word 服裝 start: 2 end:4 word 飾品 start: 4 end:6 word 有限公司 start: 6 end:10
2)搜索模式
import jieba import jieba.analyse result = jieba.tokenize(u'永和服裝飾品有限公司', mode='search') for tk in result: print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])) # ----output------- 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: 6 end:10
5,搜索引擎ChineseAnalyzer for Whoosh
使用 jieba 和 whoosh 可以實(shí)現(xiàn)搜索引擎功能。
whoosh 是由python實(shí)現(xiàn)的一款全文搜索工具包,可以使用 pip 安裝它:
pip install whoosh
介紹 jieba + whoosh 實(shí)現(xiàn)搜索之前,你可以先看下文 whoosh 的簡單介紹。
下面看一個(gè)簡單的搜索引擎的例子:
import os import shutil from whoosh.fields import * from whoosh.index import create_in from whoosh.qparser import QueryParser from jieba.analyse import ChineseAnalyzer analyzer = ChineseAnalyzer() schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT(stored=True, analyzer=analyzer)) if not os.path.exists("test"): os.mkdir("test") else: # 遞歸刪除目錄 shutil.rmtree("test") os.mkdir("test") idx = create_in("test", schema) writer = idx.writer() writer.add_document( title=u"document1", path="/tmp1", content=u"Tracy McGrady is a famous basketball player, the elegant basketball style of him attract me") writer.add_document( title=u"document2", path="/tmp2", content=u"Kobe Bryant is a famous basketball player too , the tenacious spirit of him also attract me") writer.add_document( title=u"document3", path="/tmp3", content=u"LeBron James is the player i do not like") writer.commit() searcher = idx.searcher() parser = QueryParser("content", schema=idx.schema) for keyword in ("basketball", "elegant"): print("searched keyword ",keyword) query= parser.parse(keyword) print(query,'------') results = searcher.search(query) for hit in results: print(hit.highlights("content")) print("="*50)
六,延遲加載
ieba 采用延遲加載,import jieba 和 jieba.Tokenizer() 不會(huì)立即觸發(fā)詞典的加載,一旦有必要才開始加載詞典構(gòu)建前綴字典。如果你想手工初始 jieba,也可以手動(dòng)初始化。
import jieba jieba.initialize() # 手動(dòng)初始化(可選)
上面代碼中,使用 add_document() 把一個(gè)文檔添加到了 index 中。在這些文檔中,搜索含有 “basketball”和 “elegant” 的文檔。
七,其他詞典
1,占用內(nèi)存較小的詞典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small
2,支持繁體分詞更好的詞典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big
下載你所需要的詞典,然后覆蓋 jieba/dict.txt 即可;或者用
jieba.set_dictionary('data/dict.txt.big')
更多關(guān)于Python中文分詞的文章請(qǐng)查看下面的相關(guān)鏈接
相關(guān)文章
python中fastapi設(shè)置查詢參數(shù)可選或必選
這篇文章主要介紹了python中fastapi設(shè)置查詢參數(shù)可選或必選,文圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下2022-06-06對(duì)python中return與yield的區(qū)別詳解
這篇文章主要介紹了對(duì)python中return與yield的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03python歐拉角和旋轉(zhuǎn)矩陣變換的實(shí)現(xiàn)示例
在計(jì)算機(jī)圖形學(xué)中,歐拉角和旋轉(zhuǎn)矩陣是描述物體旋轉(zhuǎn)的常用方法,本文主要介紹了python歐拉角和旋轉(zhuǎn)矩陣變換的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03用Python實(shí)現(xiàn)校園通知更新提醒功能
今天小編就為大家分享一篇用Python實(shí)現(xiàn)校園通知更新提醒功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python3.5 Pandas模塊之Series用法實(shí)例分析
這篇文章主要介紹了Python3.5 Pandas模塊之Series用法,結(jié)合實(shí)例形式分析了Python3.5中Pandas模塊的Series結(jié)構(gòu)原理、創(chuàng)建、獲取、運(yùn)算等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-04-04