VicWord 一個純php的分詞

探索者1492569170005發表於2019-04-22

安裝

composer require lizhichao/word
複製程式碼

github:github.com/lizhichao/V…

分詞說明

  • 含有3種切分方法
    • getWord 長度優先切分 。最快
    • getShortWord 細粒度切分。比最快慢一點點
    • getAutoWord 自動切分 。效果最好
  • 可自定義詞典,自己新增詞語到詞庫,詞庫支援文字格式json和二級制格式igb 二進位制格式詞典小,載入快
  • dict.igb含有175662個詞,歡迎大家補充詞語到 dict.txt ,格式(詞語 \t idf \t 詞性)
    • idf 獲取方法 百度搜尋這個詞語 Math.log(100000001/結果數量),如果你有更好的方法歡迎補充。
    • 詞性 [標點符號,名詞,動詞,形容詞,區別詞,代詞,數詞,量詞,副詞,介詞,連詞,助詞,語氣詞,擬聲詞,嘆詞] 取index ;標點符號取0
  • 三種分詞結果對比
$fc = new VicWord('igb');
$arr = $fc->getWord('北京大學生喝進口紅酒,在北京大學生活區喝進口紅酒');
//北京大學|生喝|進口|紅酒|,|在|北京大學|生活區|喝|進口|紅酒
//$arr 是一個陣列 每個單元的結構[詞語,詞語位置,詞性,這個詞語是否包含在詞典中] 這裡只值列出了詞語

$arr =  $fc->getShortWord('北京大學生喝進口紅酒,在北京大學生活區喝進口紅酒');
//北京|大學|生喝|進口|紅酒|,|在|北京|大學|生活|區喝|進口|紅酒

$arr = $fc->getAutoWord('北京大學生喝進口紅酒,在北京大學生活區喝進口紅酒');
//北京|大學生|喝|進口|紅酒|,|在|北京大學|生活區|喝|進口|紅酒

//對比
//qq的分詞 http://nlp.qq.com/semantic.cgi#page2 
//百度的分詞 http://ai.baidu.com/tech/nlp/lexical

複製程式碼

分詞速度

機器阿里雲 Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
getWord 每秒140w字
getShortWord 每秒138w字
getAutoWord 每秒40w字
測試文字在百度百科拷貝的一段5000字的文字

製作詞庫

  • 詞庫支援utf-8的任意字元
  • 詞典大小不影響 分詞速度

只有一個方法 VicDict->add(詞語,詞性 = null)

//定義詞典檔案路徑
define('_VIC_WORD_DICT_PATH_',__DIR__.'/Data/dict.igb');

require __DIR__.'/Lib/VicDict.php';

//目前可支援 igb 和 json 兩種詞典庫格式;igb需要安裝igbinary擴充套件,igb檔案小,載入快
$dict = new VicDict('igb');

//新增詞語詞庫 add(詞語,詞性) 不分語言,可以是utf-8編碼的任何字元
$dict->add('中國','n');

//儲存詞庫
$dict->save();
複製程式碼

demo

demo

該作者的其他軟體

一個極簡的高效能框架,可在php-fpm或者swoole非同步協程環境執行

相關文章