一浆竭、背景
筆者2年前寫過一篇《PHP使用elasticsearch搜索安裝及分詞方法》的文章浸须,記錄了使用ES的分詞的實(shí)現(xiàn)步驟,最近又需要用到分詞邦泄,在網(wǎng)上發(fā)現(xiàn)一個(gè)百度的中文分詞項(xiàng)目删窒,中文詞法分析(LAC) ,決定使用一番虎韵,并把這次試用通過文章記錄下來易稠,給有需要的朋友一個(gè)參考吧
中文詞法分析LAC 支持Python、C++包蓝、JAVA驶社、Android 用接口調(diào)用,其他語言的話就需要開發(fā)者自己自行封裝了测萎,筆者這次決定使用Python進(jìn)行實(shí)驗(yàn)亡电,在文中也會把相關(guān)代碼給貼出來,給大家作為一個(gè)參考
二 安裝LAC
LAC2.0 的安裝方式非常簡單硅瞧,直接使用pip安裝即可份乒,但是國內(nèi)訪問pip軟件源可能比較慢,因此我們可以用上加速地址,參考命令如下所示
pip3 install lac -i https://mirror.baidu.com/pypi/simple
命令執(zhí)行完成之后或辖,返回的信息如下所示
安裝注意事項(xiàng)
- LAC有1.0 和2.0 瘾英,在碼云中顯示的是1.0,但是并沒有特意標(biāo)明颂暇,1.0 的版本安裝過程非常比較麻煩缺谴,安裝過程也容易出錯(cuò),建議大家可以去github查看LAC 2.0的安裝方式
- 如果你是windows系統(tǒng)想用wsl去安裝耳鸯,不要使用WSL1.0湿蛔,因?yàn)樗恢С諰AC的依賴組件
paddle
,也就沒辦法正確安裝LAC了 - LAC 安裝需要注意你的Python版本县爬,不能大于3.7,筆者做實(shí)驗(yàn)的時(shí)候使用的Python3.8版本阳啥,結(jié)果報(bào)了如下錯(cuò)誤
三、 運(yùn)行DEMO
為了驗(yàn)證是否已經(jīng)將LAC安裝成功财喳,這里筆者運(yùn)行了一下DEMO示例代碼察迟,首先新建了一個(gè)代碼文件lac.py
,然后將demo代碼復(fù)制進(jìn)去耳高,代碼如下所示
# -*- coding: utf-8 -*-
from LAC import LAC
# 裝載分詞模型
lac = LAC(mode='seg')
# 單個(gè)樣本輸入卷拘,輸入為Unicode編碼的字符串
text = u"大王叫我來巡山"
seg_result = lac.run(text)
print(seg_result)
# 批量樣本輸入, 輸入為多個(gè)句子組成的list,平均速率會更快
texts = [u"山里有個(gè)廟", u"廟里有個(gè)老和尚跟一個(gè)小和尚"]
seg_result = lac.run(texts)
print(seg_result)
接著使用Python運(yùn)行這個(gè)文件祝高,執(zhí)行命令如下
python lac.py
命令執(zhí)行之后,返回的分詞詞匯標(biāo)注信息如下所示
從上面圖片可以看到污筷,LAC已經(jīng)將一段文本進(jìn)行了分詞工闺,說明我們安裝LAC成功,
LAC 除了可以進(jìn)行分詞之外瓣蛀,還可以用來做詞性標(biāo)注與實(shí)體識別,我們接著繼續(xù)運(yùn)行demo代碼陆蟆,筆者首先新建了一個(gè)代碼文件lac2.py
,然后將用來做詞性標(biāo)注和實(shí)體識別的demo代碼復(fù)制進(jìn)去惋增,代碼如下所示
from LAC import LAC
# 裝載LAC模型
lac = LAC(mode='lac')
# 單個(gè)樣本輸入叠殷,輸入為Unicode編碼的字符串
text = u"我想漲工資"
lac_result = lac.run(text)
print(lac_result)
# 批量樣本輸入, 輸入為多個(gè)句子組成的list,平均速率更快
texts = [u"湯青松長得好帥", u"我喜歡做安全開發(fā)工程師"]
lac_result = lac.run(texts)
print(lac_result)
接著使用Python運(yùn)行這個(gè)文件诈皿,執(zhí)行命令如下
python lac2.py
命令執(zhí)行之后林束,返回的分詞詞匯標(biāo)注信息如下所示
在上圖中我們可以看到,這次LAC不僅返回了分詞結(jié)果稽亏,還返回另外一個(gè)詞匯類型的list壶冒,筆者粗略的核對了一下,基本都能對應(yīng)上截歉,比如筆者的名字標(biāo)識為PER 人名
類型胖腾,好帥
標(biāo)示為 a 形容詞
類型
下面是詞性和專名類別標(biāo)簽集合,其中我們將最常用的4個(gè)專名類別標(biāo)記為大寫的形式:
標(biāo)簽 | 含義 | 標(biāo)簽 | 含義 | 標(biāo)簽 | 含義 | 標(biāo)簽 | 含義 |
---|---|---|---|---|---|---|---|
n | 普通名詞 | f | 方位名詞 | s | 處所名詞 | nw | 作品名 |
nz | 其他專名 | v | 普通動詞 | vd | 動副詞 | vn | 名動詞 |
a | 形容詞 | ad | 副形詞 | an | 名形詞 | d | 副詞 |
m | 數(shù)量詞 | q | 量詞 | r | 代詞 | p | 介詞 |
c | 連詞 | u | 助詞 | xc | 其他虛詞 | w | 標(biāo)點(diǎn)符號 |
PER | 人名 | LOC | 地名 | ORG | 機(jī)構(gòu)名 | TIME | 時(shí)間 |
四、試用感想
LAC是一個(gè)非常不錯(cuò)的分詞工具咸作,并不是用來直接為業(yè)務(wù)提供搜索支持锨阿,而是作為一個(gè)搜索引擎的基礎(chǔ)工具;
比如當(dāng)你想將網(wǎng)站的文章標(biāo)題用于站內(nèi)搜索记罚,使用LAC進(jìn)行了分詞墅诡,分詞之后這些數(shù)據(jù)你還需要額外的存儲,用來作為搜索使用毫胜,因?yàn)長AC只提供分詞功能书斜,所以感覺LAC適合作為分詞搜索引擎的一部分,如果你想用來分詞搜索站內(nèi)信息酵使,倒不如ES的那么方便荐吉。
筆者也好奇LAC項(xiàng)目的適用場景是什么?從LAC項(xiàng)目的產(chǎn)品口中得知回答如下:
LAC適用場景更多是與實(shí)體識別相關(guān)的口渔,比如知識圖譜样屠,知識問答,信息抽取等缺脉,也可以作為其他模型算法的基礎(chǔ)工具痪欲,因?yàn)槠浞衷~粒度是以實(shí)體作為粒度的,同時(shí)兼具實(shí)體識別的效果攻礼,而在搜索引擎中一般使用的分詞粒度會更小一些业踢,或者同時(shí)提供多種粒度,如果要面向搜索的分詞礁扮,還需要用戶自行進(jìn)行微調(diào)模型
作者:湯青松
日期:2020-07-07