http://blog.atime.me/note/mmseg-custom-dict.html
總結使用搜狗詞庫製作mmseg詞典的方法和步驟。另外,最近一直沒寫新博客,一方面是因爲懶,另一方面是確實沒什麼可寫的。
coreseek的介紹和安裝説明可參考這裏,不再贅述。以下是接下來需要注意的幾點:
- 下面假設libmmseg安裝於
/usr/local/mmseg3
目錄 - 生成的mmseg詞典文件必須爲UTF-8編碼。
- 下面用到的兩個python腳本見輔助腳本
提取搜狗字庫
目前只支持搜狗詞庫,搜狗詞庫可以在這裏這裏下載。
下載後的詞庫文件(.scel)放在sougou目錄下,然後運行腳本
./extract-sougou-dict.py sougou/*.scel -o sougou-dict.txt -mmseg
生成的sougou-dict.txt可供mmseg庫分詞使用。
合併已有的詞典和自定義詞典
假設已有的詞典文件爲unigram.txt,則運行腳本
./merge-mmseg-dict.py -a unigram.txt -b sougou-dict.txt -o merged.txt
這裏以unigram.txt爲主詞典,意味着如果在合併的過程中出現重複詞組,則忽略sougou-dict.txt中的重複詞組。
更新mmseg詞典
首先備份下舊的詞典文件
cd /usr/local/mmseg3/etc mv unigram.txt unigram.txt.bak mv uni.lib uni.lib.bak cd -
將合併後的詞典重命名爲unigram.txt,在指定的目錄裏運行mmseg
mv merged.txt /usr/local/mmseg3/etc/unigram.txt /usr/local/mmseg3/bin/mmseg -u /usr/local/mmseg3/etc/unigram.txt
最後將生成的unigram.txt.uni重命名爲uni.lib
cd /usr/local/mmseg3/etc mv unigram.txt.uni uni.lib
需要注意一個比較蛋疼的問題,更新後的分詞效果對已建立的索引無效1。
檢驗分詞效果
找一個之前無法分詞的詞組,然後用mmseg進行測試,這裏假設詞典位於/usr/local/mmseg3/etc目錄下
echo "金交所" > whatever.txt /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc whatever.txt
如果詞典中沒有`金交所'這個詞組,結果通常如下
金/x 交/x 所/x Word Splite took: 0 ms.
如果在自定義的詞典中有`金交所'這個詞組,則結果如下
金交所/x Word Splite took: 0 ms.
輔助腳本
以下兩個腳本放在Github上。
-
extract-sougou-dict.py
參考了這篇文章裏的代碼。
-
merge-mmseg-dict.py
合併兩個mmseg詞典,如果兩個詞典包含相同的詞組,那麼以主詞典爲準(-a)。