【Python】jieba分詞模組
0、前言
jieba庫是進行中文分詞的利器,根據文件描述,具有以下特點:
-
支援三種分詞模式:
-
精確模式,試圖將句子最精確地切開,適合文字分析;
-
全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
-
搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞
支援繁體分詞
支援自定義詞典
本文立足實際需求,提取出部分常用的功能作為講解,內容包括:
-
分詞
-
提取關鍵詞
-
搜尋詞彙位置
1、分詞
中文分詞是 jieba 庫的核心,其下包括常用的 cut() 和 cut_for_search() 函式。
cut() 函式傳入待分詞的字串,返回一個可迭代的生成器,可使用 for 迴圈提取或者 list 轉為列表形式。
import jieba string = '今天天氣特別好,很開心' result = jieba.cut(string) print(list(result))
結果:
['今天天氣', '特別', '好', ',', '很', '開心']
cut() 函式預設採用精確模式,使用全模式需修改 cut_all 引數為 True
程式碼如下:
result = jieba.cut(string,cut_all=True)
結果為:
['今天', '今天天氣', '天天', '天氣', '特別', '好', '', '', '很', '開心']
cut_for_search() 分詞函式採用搜尋引擎模式,該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細,通俗來說就是儘可能多的將字串分割為有效的詞彙。
示例:
string = '今天天氣' res = jieba.cut(string) res2 = jieba.cut_for_search(string) print('使用cut:',list(res)) print('使用cut_for_search:',list(res2))
結果:
使用cut: ['今天天氣'] 使用cut_for_search: ['今天', '天天', '天氣', '今天天氣']
由於採取了不同的分詞策略,所以最後的結果也不一樣,使用哪個需要根據應用場景來選擇。
2、提取詞彙
在處理詞彙時,常常我們會提取出現頻率比較高的關鍵詞,jieba.analyse.extract_tags()具有此功能,它接受 4 個引數
-
sentence 為待提取的文字
-
topK 為返回幾個 TF/IDF 權重最大的關鍵詞,預設值為 20
-
withWeight 為是否一併返回關鍵詞權重值,預設值為 False
-
allowPOS 僅包括指定詞性的詞,預設值為空,即不篩選
我們以西遊記為例,提取出權重佔比最高的前20個詞彙,程式碼如下:
from jieba.analyse import extract_tags with open('西遊記.txt','r',errors='ignore')as f: data = f.read() res = extract_tags(data) print(res)
結果如下:
['行者', '八戒', '師父', '三藏', '唐僧', '大聖', '沙僧', '妖精', '菩薩', '和尚', '那怪', '那裡', '長老', '呆子', '徒弟', '怎麼', '不知', '老孫', '國王', '一個']
修改 topK = 10 得到:
['行者', '八戒', '師父', '三藏', '唐僧', '大聖', '沙僧', '妖精', '菩薩', '和尚']
修改 withWeight = True 得到:
[('行者', 0.14971032916840787), ('八戒', 0.0684495682590684), ('師父', 0.06131338130166949), ('三藏', 0.05296939997015923), ('唐僧', 0.034778382561747076), ('大聖', 0.032424843415734234), ('沙僧', 0.03158331000220929), ('妖精', 0.027699530179843303), ('菩薩', 0.02576333341504996), ('和尚', 0.02426762372832522)]
jieba 只能返回詞彙的權重,而不能返回該詞出現的頻率,所以在一些特定的應用場景下,比如生成詞雲圖,需要頻數時,使用 jieba.cut() 和 collections 下的 Counter 解決起來更方便,關於 Counter參考:【Counter】
3、搜尋詞彙位置
jieba 庫也包含了定位詞彙位置的功能,jieba.tokenize() 可以實現此功能,該函式接收字串,返回一個生成器,包含所有分詞結果以及始末位置,基本用法如下:
import jieba string = '今天天氣特別好,很開心' result = jieba.tokenize(string) print(list(result))
結果如下:
[('今天天氣', 0, 4), ('特別', 4, 6), ('好', 6, 7), (',', 7, 8), ('很', 8, 9), ('開心', 9, 11)]
如果我們只是找到某個特定的詞彙在文中的位置,拿之前的西遊記文字為例,我們去尋找詞彙 “行者” 第一次出現的位置
with open('西遊記.txt','r',errors='ignore')as f: data = f.read() result = jieba.tokenize(data) for i in result: if '行者' in i: print(i) break
結果:
('行者', 8593, 8595)
如此,就能很方便的找到特定詞彙在文章中出現的位置。
4、小結
以上就是 jieba 庫的常用的方法,該庫還包括詞性標註、並行分詞、命令列分詞、新增字典等等功能。
更詳細的內容參考官方文件:
對該庫的演算法感興趣的同學可參考
jieba分詞的基本思路:
對Python中文分詞模組結巴分詞演算法過程的理解和分析:http://blog.csdn.net/rav009/article/details/12196623
相似模組snowNLP
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2146148/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python jieba庫,句子分詞PythonJieba分詞
- python 中文分詞包 jiebaPython中文分詞Jieba
- Python:Python 中 jieba 庫的使用(中文分詞)PythonJieba中文分詞
- [Python] 基於 jieba 的中文分詞總結PythonJieba中文分詞
- python使用jieba實現中文文件分詞和去停用詞PythonJieba分詞
- jieba 詞性標註 & 並行分詞Jieba詞性標註並行分詞
- Python 自然語言處理(基於jieba分詞和NLTK)Python自然語言處理Jieba分詞
- java版JieBa分詞原始碼走讀JavaJieba分詞原始碼
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- Laravel 中使用 PHP 分詞庫 (jieba) 和 (scws)LaravelPHP分詞Jieba
- HanLP分類模組的分詞器介紹HanLP分詞
- 將使用jieba分詞的語料庫轉化成TFIDF向量Jieba分詞
- 什麼是模組?Python模組分為哪幾類?Python
- JB的Python之旅-資料分析篇-jieba&wordcloud(詞雲)PythonJiebaCloud
- Python語言模組分為哪幾類?有哪些主要模組?Python
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- python分詞和生成詞雲圖Python分詞
- Python模組之urllib模組Python
- python模組之collections模組Python
- Python 模組Python
- [Python模組學習] glob模組Python
- 中文分詞原理及常用Python中文分詞庫介紹中文分詞Python
- Python 精靈模組製作的月滿西樓李清照詞 MVPython
- Python中模組是什麼?Python有哪些模組?Python
- 06 ## 模組分類
- 【leetcode 49】【字母異位詞分組】LeetCode
- Python Execl模組Python
- Python mongoHelper模組PythonGo
- Python——JSON 模組PythonJSON
- [Python] pipe模組Python
- Python - 模組包Python
- python——typing模組Python
- Python functools 模組Python
- Python pymsql模組PythonSQL
- Python:requests模組Python
- Python模組reloadPython
- python之模組Python
- 15 Python模組Python