【NLP】jieba分詞-Python中文分詞領(lǐng)域的佼佼者
1. jieba的江湖地位
NLP(自然語言)領(lǐng)域現(xiàn)在可謂是群雄紛爭,各種開源組件層出不窮,其中一支不可忽視的力量便是jieba分詞,號稱要做最好的 Python 中文分詞組件。

“最好的”這三個字可不是空穴來風,jieba在開源社區(qū)的受歡迎程度非常之高。
jieba項目目前的github star數(shù)已經(jīng)達到24k,其他熱門分詞組件像HanLP star數(shù)20k、ansj_seg star數(shù)5.6k、pkuseg-python star數(shù)5k。可見jieba已經(jīng)穩(wěn)居中文分詞領(lǐng)域c位。

jieba的主要功能是做中文分詞,可以進行簡單分詞、并行分詞、命令行分詞,當然它的功能不限于此,目前還支持關(guān)鍵詞提取、詞性標注、詞位置查詢等。
更讓人愉悅的是jieba雖然立足于python,但同樣支持其他語言和平臺,諸如:C++、Go、R、Rust、Node.js、PHP、 iOS、Android等。所以jieba能滿足各類開發(fā)者的需求。
2. 如何學jieba
據(jù)我所知,jieba最靠譜的文檔是github項目的readme,因為它似乎還沒有獨立的使用文檔。但由于使用起來簡單,看readme也能快速上手。https://github.com/fxsjy/jieba
國內(nèi)各大博客有關(guān)于jieba的使用教程,但需要甄別下準確度和時效性,因為jieba項目一直在更新。
當然本文不是純粹的種草文章,會簡單介紹下jieba的使用方法。
3. 安裝jieba
jieba支持pip或者conda安裝,直接在命令行執(zhí)行:
pip?install?jieba
不出意外,應該能很快安裝好。
你也可以下載jieba安裝包再安裝,jieba的pypi地址:http://pypi.python.org/pypi/jieba/
4. 分詞初體驗
分詞是NLP處理的第一步,也是最基本的任務,分詞的好壞直接決定了后面語義分析的精準度。
所謂分詞就是將一段表述里的詞匯進行分解,比如“我愛中國”,分解后有三個詞:我、愛、中國,詞性分別是名詞、動詞、名詞。
jieba庫中用于分詞的方法有三個:
jieba.cut
給定中文字符串,分解后返回一個迭代器,需要用for循環(huán)訪問。
參數(shù)解釋:
「strs」:需要分詞的字符串;
「cut_all」:用來控制是否采用全模式;
「HMM」:用來控制是否使用 HMM 模型;
「use_paddle」:用來控制是否使用paddle模式下的分詞模式,paddle模式采用延遲加載方式,通過enable_paddle接口安裝paddlepaddle-tiny,并且import相關(guān)代碼;
這里區(qū)分全模式和精確模式,舉個例子先看看區(qū)別:
#?全模式
seg_list?=?jieba.cut("中國上海是一座美麗的國際性大都市",?cut_all=True)
print("Full?Mode:?"?+?"/?".join(seg_list))??
#?返回結(jié)果
Full?Mode:?中國/?上海/?是/?一座/?美麗/?的/?國際/?國際性/?大都/?大都市/?都市
#?精確模式
seg_list?=?jieba.cut("中國上海是一座美麗的國際性大都市",?cut_all=False)
print("Full?Mode:?"?+?"/?".join(seg_list))??
#?返回結(jié)果
Default?Mode:?中國/?上海/?是/?一座/?美麗/?的/?國際性/?大都市
可以看到,全模式把句子中所有的可以成詞的詞語都掃描出來, 會出現(xiàn)一詞多用、一詞多意。精確模式將句子最精確的切分開,每個詞都只有一種含義。
jieba.cut方法默認是精確模式。
還有一個參數(shù)控制paddle模式,會更加精確,使用這個的前提是你需要先安裝paddlepaddle-tiny。
安裝命令:pip install paddlepaddle-tiny==1.6.1
詳情可以去官網(wǎng)看下,這里不舉例。
jieba.cut_for_search
該方法和cut一樣,分解后返回一個迭代器,需要用for循環(huán)訪問。不過它是搜索引擎模式,在精確模式的基礎(chǔ)上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。
參數(shù)解釋:
「strs」:需要分詞的字符串;
「HMM」:是否使用 HMM 模型,默認值為 True。該方法適合用于搜索引擎構(gòu)建倒排索引的分詞,粒度比較細。
#?搜索引擎模式
seg_list?=?jieba.cut_for_search("中國上海是一座美麗的國際性大都市,擁有復旦大學、上海交通大學等知名高等學府")??
print(",?".join(seg_list))
#?返回結(jié)果
Search?Mode:?中國,?上海,?是,?一座,?美麗,?的,?國際,?國際性,?大都,?都市,?大都市,?,,?擁有,?復旦,?大學,?復旦大學,?、,?上海,?交通,?大學,?上海交通大學,?等,?知名,?高等,?學府,?高等學府
jieba.lcut
和jieba.cut使用方法一樣,不過返回的是列表。
cut和cut_for_search方法都是支持繁體字的。
5. 添加自定義詞典
如果是對專業(yè)新聞或者小說進行分詞,會有很多的新詞匯,jieba庫里沒有就沒辦法識別,那么就需要添加自定義的詞匯,比如:奧利給。
添加自定義詞匯的方法:jieba.load_userdict(file_name)參數(shù)是文本文件,txt、csv都可以。
自定義詞典文件的詞匯格式是一個詞占一行,每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。比如:
以"奧利給,管虎執(zhí)導的八佰是一部讓人熱血沸騰的好電影。" 這段話為例, 如果不添加自定義詞典,很多詞沒辦法識別出來。
#?不添加自定義詞典
seg_list?=?jieba.cut("奧利給,管虎執(zhí)導的八佰是一部讓人熱血沸騰的好電影")
print("/?".join(seg_list))??
#?返回結(jié)果
奧利/?給/?,/?管虎/?執(zhí)導/?的/?八佰是/?一部/?讓/?人/?熱血沸騰/?的/?好/?電影
添加自定義詞典后,新詞、人名、電影名都可以識別出來
#?載入詞典
jieba.load_userdict("dict.txt")
seg_list?=?jieba.cut("奧利給,管虎執(zhí)導的八佰是一部讓人熱血沸騰的好電影")
print("/?".join(seg_list))??
#?返回結(jié)果
奧利給/?,/?管虎/?執(zhí)導/?的/?八佰/?是/?一部/?讓/?人/?熱血沸騰/?的/?好/?電影
6. 結(jié)論
jieba無疑是一款優(yōu)秀的分詞工具,而且在不斷地優(yōu)化成長。前面講了一些基本的使用,大家還可以嘗試使用停用詞、提取關(guān)鍵詞、詞性標注、詞位置查詢等功能,也是十分的便捷。
往期精彩回顧
獲取一折本站知識星球優(yōu)惠券,復制鏈接直接打開:
https://t.zsxq.com/662nyZF
本站qq群1003271085。
加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):
