一、背景
筆者2年前寫過一篇《PHP使用elasticsearch搜索安裝及分詞方法》的文章,記錄了使用ES的分詞的實現步驟,最近又需要用到分詞,在網上發現一個百度的中文分詞項目,中文詞法分析(LAC) ,決定使用一番,並把這次試用通過文章記錄下來,給有需要的朋友一個參考吧
中文詞法分析LAC 支持Python、C++、JAVA、Android 用接口調用,其他語言的話就需要開發者自己自行封裝了,筆者這次決定使用Python進行實驗,在文中也會把相關代碼給貼出來,給大家作為一個參考
二 安裝LAC
LAC2.0 的安裝方式非常簡單,直接使用pip安裝即可,但是國內訪問pip軟件源可能比較慢,因此我們可以用上加速地址,參考命令如下所示
pip3 install lac -i https://mirror.baidu.com/pypi/simple
命令執行完成之后,返回的信息如下所示

安裝注意事項
- LAC有1.0 和2.0 ,在碼雲中顯示的是1.0,但是並沒有特意標明,1.0 的版本安裝過程非常比較麻煩,安裝過程也容易出錯,建議大家可以去github查看LAC 2.0的安裝方式
- 如果你是windows系統想用wsl去安裝,不要使用WSL1.0,因為他不支持LAC的依賴組件
paddle,也就沒辦法正確安裝LAC了 - LAC 安裝需要注意你的Python版本,不能大於3.7,筆者做實驗的時候使用的Python3.8版本,結果報了如下錯誤

三、 運行DEMO
為了驗證是否已經將LAC安裝成功,這里筆者運行了一下DEMO示例代碼,首先新建了一個代碼文件lac.py,然后將demo代碼復制進去,代碼如下所示
# -*- coding: utf-8 -*-
from LAC import LAC
# 裝載分詞模型
lac = LAC(mode='seg')
# 單個樣本輸入,輸入為Unicode編碼的字符串
text = u"大王叫我來巡山"
seg_result = lac.run(text)
print(seg_result)
# 批量樣本輸入, 輸入為多個句子組成的list,平均速率會更快
texts = [u"山里有個廟", u"廟里有個老和尚跟一個小和尚"]
seg_result = lac.run(texts)
print(seg_result)
接着使用Python運行這個文件,執行命令如下
python lac.py
命令執行之后,返回的分詞詞匯標注信息如下所示

從上面圖片可以看到,LAC已經將一段文本進行了分詞,說明我們安裝LAC成功,
LAC 除了可以進行分詞之外,還可以用來做詞性標注與實體識別,我們接着繼續運行demo代碼,筆者首先新建了一個代碼文件lac2.py,然后將用來做詞性標注和實體識別的demo代碼復制進去,代碼如下所示
from LAC import LAC
# 裝載LAC模型
lac = LAC(mode='lac')
# 單個樣本輸入,輸入為Unicode編碼的字符串
text = u"我想漲工資"
lac_result = lac.run(text)
print(lac_result)
# 批量樣本輸入, 輸入為多個句子組成的list,平均速率更快
texts = [u"湯青松長得好帥", u"我喜歡做安全開發工程師"]
lac_result = lac.run(texts)
print(lac_result)
接着使用Python運行這個文件,執行命令如下
python lac2.py
命令執行之后,返回的分詞詞匯標注信息如下所示

在上圖中我們可以看到,這次LAC不僅返回了分詞結果,還返回另外一個詞匯類型的list,筆者粗略的核對了一下,基本都能對應上,比如筆者的名字標識為PER 人名類型,好帥標示為 a 形容詞類型
下面是詞性和專名類別標簽集合,其中我們將最常用的4個專名類別標記為大寫的形式:
| 標簽 | 含義 | 標簽 | 含義 | 標簽 | 含義 | 標簽 | 含義 |
|---|---|---|---|---|---|---|---|
| n | 普通名詞 | f | 方位名詞 | s | 處所名詞 | nw | 作品名 |
| nz | 其他專名 | v | 普通動詞 | vd | 動副詞 | vn | 名動詞 |
| a | 形容詞 | ad | 副形詞 | an | 名形詞 | d | 副詞 |
| m | 數量詞 | q | 量詞 | r | 代詞 | p | 介詞 |
| c | 連詞 | u | 助詞 | xc | 其他虛詞 | w | 標點符號 |
| PER | 人名 | LOC | 地名 | ORG | 機構名 | TIME | 時間 |
四、試用感想
LAC是一個非常不錯的分詞工具,並不是用來直接為業務提供搜索支持,而是作為一個搜索引擎的基礎工具;
比如當你想將網站的文章標題用於站內搜索,使用LAC進行了分詞,分詞之后這些數據你還需要額外的存儲,用來作為搜索使用,因為LAC只提供分詞功能,所以感覺LAC適合作為分詞搜索引擎的一部分,如果你想用來分詞搜索站內信息,倒不如ES的那么方便。
筆者也好奇LAC項目的適用場景是什么?從LAC項目的產品口中得知回答如下:
LAC適用場景更多是與實體識別相關的,比如知識圖譜,知識問答,信息抽取等,也可以作為其他模型算法的基礎工具,因為其分詞粒度是以實體作為粒度的,同時兼具實體識別的效果,而在搜索引擎中一般使用的分詞粒度會更小一些,或者同時提供多種粒度,如果要面向搜索的分詞,還需要用戶自行進行微調模型
作者:湯青松
日期:2020-07-07
