中文分詞利器 jieba 和 HanLP

前言

從本文開(kāi)始钞啸,我們進(jìn)入實(shí)戰(zhàn)部分逾一。首先铸本,我們按照中文自然語(yǔ)言處理流程的第一步獲取語(yǔ)料,然后重點(diǎn)進(jìn)行中文分詞的學(xué)習(xí)遵堵。中文分詞有很多種箱玷,常見(jiàn)的比如有中科院計(jì)算所 NLPIR、哈工大 LTP鄙早、清華大學(xué) THULAC 汪茧、斯坦福分詞器、Hanlp 分詞器限番、jieba 分詞舱污、IKAnalyzer 等。這里針對(duì) jieba 和 HanLP 分別介紹不同場(chǎng)景下的中文分詞應(yīng)用弥虐。

jieba 分詞

jieba 安裝

(1)Python 2.x 下 jieba 的三種安裝方式扩灯,如下:

全自動(dòng)安裝:執(zhí)行命令easy_install jieba或者pip install jieba/pip3 install jieba媚赖,可實(shí)現(xiàn)全自動(dòng)安裝。

半自動(dòng)安裝:先下載 jieba珠插,解壓后運(yùn)行python setup.py install惧磺。

手動(dòng)安裝:將 jieba 目錄放置于當(dāng)前目錄或者 site-packages 目錄。

安裝完通過(guò)import jieba驗(yàn)證安裝成功與否捻撑。

(2)Python 3.x 下的安裝方式磨隘。

Github 上 jieba 的 Python3.x 版本的路徑是:https://github.com/fxsjy/jieba/tree/jieba3k

通過(guò)git clone https://github.com/fxsjy/jieba.git命令下載到本地顾患,然后解壓番捂,再通過(guò)命令行進(jìn)入解壓目錄,執(zhí)行python setup.py install命令江解,即可安裝成功设预。

jieba 的分詞算法

主要有以下三種:

基于統(tǒng)計(jì)詞典,構(gòu)造前綴詞典犁河,基于前綴詞典對(duì)句子進(jìn)行切分鳖枕,得到所有切分可能,根據(jù)切分位置桨螺,構(gòu)造一個(gè)有向無(wú)環(huán)圖(DAG)宾符;

基于DAG圖,采用動(dòng)態(tài)規(guī)劃計(jì)算最大概率路徑(最有可能的分詞結(jié)果)彭谁,根據(jù)最大概率路徑分詞吸奴;

對(duì)于新詞(詞庫(kù)中沒(méi)有的詞),采用有漢字成詞能力的 HMM 模型進(jìn)行切分缠局。

jieba 分詞

下面我們進(jìn)行 jieba 分詞練習(xí),第一步首先引入 jieba 和語(yǔ)料:

importjieba? ? content ="現(xiàn)如今考润,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)帶動(dòng)人工智能飛速的發(fā)展狭园,并在圖片處理、語(yǔ)音識(shí)別領(lǐng)域取得巨大成功糊治。"

(1)精確分詞

精確分詞:精確模式試圖將句子最精確地切開(kāi)唱矛,精確分詞也是默認(rèn)分詞。

segs_1 = jieba.cut(content, cut_all=False)print("/".join(segs_1))

其結(jié)果為:

現(xiàn)如今/井辜,/機(jī)器/學(xué)習(xí)/和/深度/學(xué)習(xí)/帶動(dòng)/人工智能/飛速/的/發(fā)展/绎谦,/并/在/圖片/處理/、/語(yǔ)音/識(shí)別/領(lǐng)域/取得/巨大成功/粥脚。

(2)全模式

全模式分詞:把句子中所有的可能是詞語(yǔ)的都掃描出來(lái)窃肠,速度非常快刷允,但不能解決歧義冤留。

segs_3 = jieba.cut(content, cut_all=True)print("/".join(segs_3))

結(jié)果為:

現(xiàn)如今/如今///機(jī)器/學(xué)習(xí)/和/深度/學(xué)習(xí)/帶動(dòng)/動(dòng)人/人工/人工智能/智能/飛速/的/發(fā)展///并/在/圖片/處理///語(yǔ)音/識(shí)別/領(lǐng)域/取得/巨大/巨大成功/大成/成功//

(3)搜索引擎模式

搜索引擎模式:在精確模式的基礎(chǔ)上碧囊,對(duì)長(zhǎng)詞再次切分,提高召回率纤怒,適合用于搜索引擎分詞糯而。

segs_4 = jieba.cut_for_search(content)print("/".join(segs_4))

結(jié)果為:

如今/現(xiàn)如今/,/機(jī)器/學(xué)習(xí)/和/深度/學(xué)習(xí)/帶動(dòng)/人工/智能/人工智能/飛速/的/發(fā)展/泊窘,/并/在/圖片/處理/熄驼、/語(yǔ)音/識(shí)別/領(lǐng)域/取得/巨大/大成/成功/巨大成功/。

(4)用 lcut 生成 list

jieba.cut 以及jieba.cut_for_search返回的結(jié)構(gòu)都是一個(gè)可迭代的 Generator烘豹,可以使用 for 循環(huán)來(lái)獲得分詞后得到的每一個(gè)詞語(yǔ)(Unicode)谜洽。jieba.lcut 對(duì) cut 的結(jié)果做了封裝,l 代表 list吴叶,即返回的結(jié)果是一個(gè) list 集合阐虚。同樣的,用jieba.lcut_for_search也直接返回 list 集合蚌卤。

segs_5 = jieba.lcut(content)print(segs_5)

結(jié)果為:

['現(xiàn)如今', '实束,', '機(jī)器', '學(xué)習(xí)', '和', '深度', '學(xué)習(xí)', '帶動(dòng)', '人工智能', '飛速', '的', '發(fā)展', ',', '并', '在', '圖片', '處理', '逊彭、', '語(yǔ)音', '識(shí)別', '領(lǐng)域', '取得', '巨大成功', '咸灿。']

(5)獲取詞性

jieba 可以很方便地獲取中文詞性,通過(guò) jieba.posseg 模塊實(shí)現(xiàn)詞性標(biāo)注侮叮。

importjieba.possegaspsg? ? print([(x.word,x.flag)forxinpsg.lcut(content)])

結(jié)果為:

[('現(xiàn)如今', 't'), ('避矢,', 'x'), ('機(jī)器', 'n'), ('學(xué)習(xí)', 'v'), ('和', 'c'), ('深度', 'ns'), ('學(xué)習(xí)', 'v'), ('帶動(dòng)', 'v'), ('人工智能', 'n'), ('飛速', 'n'), ('的', 'uj'), ('發(fā)展', 'vn'), (',', 'x'), ('并', 'c'), ('在', 'p'), ('圖片', 'n'), ('處理', 'v'), ('囊榜、', 'x'), ('語(yǔ)音', 'n'), ('識(shí)別', 'v'), ('領(lǐng)域', 'n'), ('取得', 'v'), ('巨大成功', 'nr'), ('审胸。', 'x')]

(6)并行分詞

并行分詞原理為文本按行分隔后,分配到多個(gè) Python 進(jìn)程并行分詞卸勺,最后歸并結(jié)果砂沛。

用法:

jieba.enable_parallel(4)# 開(kāi)啟并行分詞模式,參數(shù)為并行進(jìn)程數(shù) 曙求。jieba.disable_parallel()# 關(guān)閉并行分詞模式 碍庵。

注意: 并行分詞僅支持默認(rèn)分詞器 jieba.dt 和 jieba.posseg.dt。目前暫不支持 Windows悟狱。

(7)獲取分詞結(jié)果中詞列表的 top n

fromcollectionsimportCounter? ? top5= Counter(segs_5).most_common(5)? ? print(top5)

結(jié)果為:

[('静浴,', 2), ('學(xué)習(xí)', 2), ('現(xiàn)如今', 1), ('機(jī)器', 1), ('和', 1)]

(8)自定義添加詞和字典

默認(rèn)情況下,使用默認(rèn)分詞挤渐,是識(shí)別不出這句話(huà)中的“鐵甲網(wǎng)”這個(gè)新詞苹享,這里使用用戶(hù)字典提高分詞準(zhǔn)確性。

txt ="鐵甲網(wǎng)是中國(guó)最大的工程機(jī)械交易平臺(tái)挣菲。"print(jieba.lcut(txt))

結(jié)果為:

['鐵甲', '網(wǎng)是', '中國(guó)', '最大', '的', '工程機(jī)械', '交易平臺(tái)', '富稻。']

如果添加一個(gè)詞到字典掷邦,看結(jié)果就不一樣了。

jieba.add_word("鐵甲網(wǎng)")print(jieba.lcut(txt))

結(jié)果為:

['鐵甲網(wǎng)', '是', '中國(guó)', '最大', '的', '工程機(jī)械', '交易平臺(tái)', '椭赋。']

但是抚岗,如果要添加很多個(gè)詞,一個(gè)個(gè)添加效率就不夠高了哪怔,這時(shí)候可以定義一個(gè)文件宣蔚,然后通過(guò)load_userdict()函數(shù),加載自定義詞典认境,如下:

jieba.load_userdict('user_dict.txt')print(jieba.lcut(txt))

結(jié)果為:

['鐵甲網(wǎng)', '是', '中國(guó)', '最大', '的', '工程機(jī)械', '交易平臺(tái)', '胚委。']

注意事項(xiàng):

jieba.cut 方法接受三個(gè)輸入?yún)?shù): 需要分詞的字符串;cut_all參數(shù)用來(lái)控制是否采用全模式叉信;HMM 參數(shù)用來(lái)控制是否使用 HMM 模型亩冬。

jieba.cut_for_search方法接受兩個(gè)參數(shù):需要分詞的字符串;是否使用 HMM 模型硼身。該方法適合用于搜索引擎構(gòu)建倒排索引的分詞硅急,粒度比較細(xì)。

HanLP 分詞

pyhanlp 安裝

其為 HanLP 的 Python 接口佳遂,支持自動(dòng)下載與升級(jí) HanLP营袜,兼容 Python2、Python3丑罪。

安裝命令為pip install pyhanlp荚板,使用命令 hanlp 來(lái)驗(yàn)證安裝。

pyhanlp 目前使用 jpype1 這個(gè) Python 包來(lái)調(diào)用 HanLP吩屹,如果遇到:

building '_jpype' extensionerror: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft VisualC++ Build Tools":http://landinghub.visualstudio.com/visual-cpp-build-tools

則推薦利用輕量級(jí)的 Miniconda 來(lái)下載編譯好的 jpype1跪另。

? ? conda install -c conda-forge jpype1

? ? pip install pyhanlp

未安裝 Java 時(shí)會(huì)報(bào)錯(cuò)

jpype.jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVAHOME environment variable properly.

HanLP 主項(xiàng)目采用 Java 開(kāi)發(fā),所以需要 Java 運(yùn)行環(huán)境祟峦,請(qǐng)安裝 JDK罚斗。

命令行交互式分詞模式

在命令行界面,使用命令 hanlp segment 進(jìn)入交互分詞模式宅楞,輸入一個(gè)句子并回車(chē),HanLP 會(huì)輸出分詞結(jié)果:

HanlP分詞1.png

HanLp分詞2.png

可見(jiàn)袱吆,pyhanlp 分詞結(jié)果是帶有詞性的厌衙。

服務(wù)器模式

通過(guò) hanlp serve 來(lái)啟動(dòng)內(nèi)置的 HTTP 服務(wù)器,默認(rèn)本地訪(fǎng)問(wèn)地址為:http://localhost:8765绞绒。

Hanlp分詞3.png

enter image description here

也可以訪(fǎng)問(wèn)官網(wǎng)演示頁(yè)面:http://hanlp.hankcs.com/婶希。

通過(guò)工具類(lèi) HanLP 調(diào)用常用接口

通過(guò)工具類(lèi) HanLP 調(diào)用常用接口,這種方式應(yīng)該是我們?cè)陧?xiàng)目中最常用的方式蓬衡。

(1)分詞

frompyhanlpimport*? ? content ="現(xiàn)如今喻杈,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)帶動(dòng)人工智能飛速的發(fā)展彤枢,并在圖片處理、語(yǔ)音識(shí)別領(lǐng)域取得巨大成功筒饰。"print(HanLP.segment(content))

結(jié)果為:

[現(xiàn)如今/t, 缴啡,/w, 機(jī)器學(xué)習(xí)/gi, 和/cc, 深度/n, 學(xué)習(xí)/v, 帶動(dòng)/v, 人工智能/n, 飛速/d, 的/ude1, 發(fā)展/vn, ,/w, 并/cc, 在/p, 圖片/n, 處理/vn, 瓷们、/w, 語(yǔ)音/n, 識(shí)別/vn, 領(lǐng)域/n, 取得/v, 巨大/a, 成功/a, 业栅。/w]

(2)自定義詞典分詞

在沒(méi)有使用自定義字典時(shí)的分詞。

txt ="鐵甲網(wǎng)是中國(guó)最大的工程機(jī)械交易平臺(tái)谬晕。"print(HanLP.segment(txt))

結(jié)果為:

[鐵甲/n, 網(wǎng)/n, 是/vshi, 中國(guó)/ns, 最大/gm, 的/ude1, 工程/n, 機(jī)械/n, 交易/vn, 平臺(tái)/n, 碘裕。/w]

添加自定義新詞:

CustomDictionary.add("鐵甲網(wǎng)")? ? CustomDictionary.insert("工程機(jī)械","nz 1024")? ? CustomDictionary.add("交易平臺(tái)","nz 1024 n 1")print(HanLP.segment(txt))

結(jié)果為:

[鐵甲網(wǎng)/nz, 是/vshi, 中國(guó)/ns, 最大/gm, 的/ude1, 工程機(jī)械/nz, 交易平臺(tái)/nz, 。/w]

當(dāng)然了攒钳,jieba 和 pyhanlp 能做的事還有很多帮孔,關(guān)鍵詞提取、自動(dòng)摘要不撑、依存句法分析文兢、情感分析等,后面章節(jié)我們將會(huì)講到燎孟,這里不再贅述禽作。




文章來(lái)源于米飯超人的博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市揩页,隨后出現(xiàn)的幾起案子旷偿,更是在濱河造成了極大的恐慌,老刑警劉巖爆侣,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萍程,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兔仰,警方通過(guò)查閱死者的電腦和手機(jī)茫负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乎赴,“玉大人忍法,你說(shuō)我怎么就攤上這事¢藕穑” “怎么了饿序?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)羹蚣。 經(jīng)常有香客問(wèn)我原探,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任咽弦,我火速辦了婚禮徒蟆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘型型。我一直安慰自己段审,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布输莺。 她就那樣靜靜地躺著戚哎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嫂用。 梳的紋絲不亂的頭發(fā)上型凳,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音嘱函,去河邊找鬼甘畅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛往弓,可吹牛的內(nèi)容都是我干的疏唾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼函似,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼槐脏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起撇寞,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤顿天,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蔑担,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體牌废,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年啤握,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸟缕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡排抬,死狀恐怖懂从,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹲蒲,我是刑警寧澤莫绣,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站悠鞍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咖祭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一掩宜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧么翰,春花似錦牺汤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至码耐,卻和暖如春追迟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骚腥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工敦间, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人束铭。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓廓块,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親契沫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子带猴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容