PHP 分詞演示
-
首先安裝SCWS,取得 scws 原始碼並解壓到當前目錄
wget -q -O - http://www.xunsearch.com/scws/down/scws-1.... | tar xjf -
-
進入原始碼目錄配置和編譯
cd scws-1.2.1 ; ./configure ; make install
cd /usr/local/scws/etc
wget <http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2>
wget <http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2>
tar xvjf scws-dict-chs-gbk.tar.bz2
tar xvjf scws-dict-chs-utf8.tar.bz2
1.編譯安裝
cd scws-1.2.1;cd phpext;
phpize
./configure --with-scws=/usr/local --with-php-config=php安裝路徑/bin/php-config
sudo make && make install
2.在 php.ini 中加入以下內容
[scws]
; 注意請檢查 php.ini 中的 extension_dir 的設定值是否正確, 否則請將 extension_dir 設為空,
; 再把 extension = scws.so 或 php_scws.dll(win) 指定絕對路徑。
extension = scws.so
scws.default.charset = gbk
scws.default.fpath = /usr/local/scws/etc
3.命令列下執行 php -m
就能看到 scws 了,phpinfo() 也會包含關於 scws 的資訊。
$so = scws_new();
// 這裡沒有呼叫 set_dict 和 set_rule 系統會自動試呼叫 ini 中指定路徑下的詞典和規則檔案
$so->set_charset('utf8'); // $so->set_charset('gbk');
$so->set_dict('/usr/local/scws/etc/dict.utf8.xdb'); //設定分詞所用詞典(此處使用utf8的詞典)
$so->set_rule('/usr/local/scws/etc/rules.utf8.ini ');//設定分詞所用規則
//分詞前去掉標點符號
$so->set_ignore(true);
//是否複式分割,如“中國人”返回“中國+人+中國人”三個詞。
$so->set_multi(true);
//設定將文字自動以二字分詞法聚合
$so->set_duality(true);
//要進行分詞的語句
$words = array();
//var_dump($so->get_result());
while ($tmp = $so->get_result())
{
foreach ($tmp as $val) {
if(!new_in_array($val, $words,'word')){
$words[] = array(
'word' => $val['word'],
'weight' => $val['idf'],
);
}
}
}
$so->close();
var_dump($words);
//遞迴分詞
function new_in_array($need,$array,$column=''){
$flag = false;
foreach ($array as $val) {
if($val[$column] == $need[$column]){
$flag = true; break;
}
}
return $flag;
}
-
scws 這是分詞的命令列工具,執行 scws -h 可以看到詳細幫助說明。
Usage: scws [options] [[-i] input] [[-o] output]
-
-i string|file 要切分的字串或檔案,如不指定則程式自動讀取標準輸入,每輸入一行執行一次分詞
-
-o file 切分結果輸出儲存的檔案路徑,若不指定直接輸出到螢幕
-
-c charset 指定分詞的字符集,預設是 gbk,可選 utf8
-
-r file 指定規則集檔案(規則集用於數詞、數字、專有名字、人名的識別)
-
-d file[:file2[:...]] 指定詞典檔案路徑(XDB格式,請在 -c 之後使用)
自 1.1.0 起,支援多詞典同時載入,也支援純文字詞典(必須是.txt結尾),多詞典路徑之間用冒號(:)隔開, 排在越後面的詞典優先順序越高。 文字詞典的資料格式參見 scws-gen-dict 所用的格式,但更寬鬆一些,允許用不定量的空格分開,只有<詞>是必備專案, 其它資料可有可無,當詞性標註為“!”(歎號)時表示該詞作廢,即使在較低優先順序的詞庫中存在該詞也將作廢。
-
-M level 複合分詞的級別:1~15,按位異或的 1|2|4|8 依次表示 短詞|二元|主要字|全部字,預設不復合分詞。
-
-I 輸出結果忽略跳過所有的標點符號
-
-A 顯示詞性
-
-E 將 xdb 詞典讀入記憶體 xtree 結構 (如果切分的檔案很大才需要)
-
-N 不顯示切分時間和提示
-
-D debug 模式 (很少用,需要編譯時開啟 --enable-debug)
-
-U 將閒散單字自動呼叫二分法結合
-
-t num 取得前 num 個高頻詞
-
-a [~]attr1[,attr2[,...]] 只顯示某些詞性的詞,加~表示過濾該詞性的詞,多個詞性之間用逗號分隔
-
-v 檢視版本
-
-
scws-gen-dict 詞典轉換工具
Usage: scws-gen-dict [options] [-i] dict.txt [-o] dict.xdb
- -c charset 指定字符集,預設為 gbk,可選 utf8
- -i file 文字檔案(txt),預設為 dict.txt
- -o file 輸出 xdb 檔案的路徑,預設為 dict.xdb
- -p num 指定 XDB 結構 HASH 質數(通常不需要)
- -U 反向解壓,將輸入的 xdb 檔案轉換為 txt 格式輸出 (TODO)
文字詞典格式為每行一個詞,各行由 4 個欄位組成,欄位之間用若干個空格或製表符(\t)分隔。 含義(其中只有 <詞> 是必須提供的),
#
開頭的行視為註釋忽略不計:#<詞> <詞頻(TF)> <詞重(IDF)> <詞性(北大標註)> 新詞條 12.0 2.2 n
效能指標
在 FreeBSD 6.2 系統,單核單 CPU 至強 3.0G 的伺服器上,測試長度為 80,535 的文字。 用附帶的命令列工具耗時將約 0.17 秒,若改用 php 擴充套件方式呼叫,則耗時約為 0.65 秒。
分詞精度 95.60%,召回率 90.51% (F-1: 0.93)
本作品採用《CC 協議》,轉載必須註明作者和本文連結