post | sidebar | footer

November 17, 2008

中文分詞系統 - SCWS 簡易中文分詞系統

因為這次案子的功能需求,在網路上找到兩種方式來分詞。一種是 SCWS 採用的詞庫方式,另一種是 WP 的 plugin Bigram Full-Text Search 所採用的 UTF-8 分詞方式。

詞庫方式的分詞系統大都採用知名部落客 蔡志浩 的論文:MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching AlgorithmCScanner - A Chinese Lexical Scanner 中的理論來開發詞庫系統。

SCWS 簡易中文分詞系統 是由 hightman 開發,版權方面並沒有很清楚的宣告,僅僅宣告「本人保留一切相關權利」。但是套件中包含所有原始碼及正體/簡體中文詞庫,論壇中也有許多網友一起討論,就像一般 Open Source 套件開發社群的運作模式。另外也有其他網友把 scws 移植到 windows 環境



安裝方式
本範例在 Ubuntu 8.04 中,用 tarball 方式安裝。下載頁面:http://www.hightman.cn/down/scws-1.0.0.tar.gz
% tar zxvf /path/to/scws-1.0.0.tar.gz
% cd /path/to/scws-1.0.0
% ./configure --prefix=/usr/local/scws
% make; make install


製作字典及規則檔
在解開的套件中的 /path/to/etc 有存放字典及規則檔,可以利用 /usr/local/scws/bin/gen_scws_dict 來製作字典及規則檔。
% /usr/local/scws/bin/gen_scws_dict -i /path/to/scws-1.0.0/etc/dict_cht_gbk.txt -o /usr/local/scws/etc/dict.utf8.xdb -c utf8


scws 與 php 結合
在解開的套件中的 /path/to/phpext 有提供跟 php 結合的 module,需另外 complier。

1. complier phpext
# 解決在 php 中指定 dict 字典及 rule 規則檔路徑的問題
% joe /path/to/phpext/php_scws.c
# 在 zend_module_entry scws_module_entry 附近
ZEND_DECLARE_MODULE_GLOBALS(scws);

static zend_module_dep scws_deps[] = {
{NULL, NULL, NULL}
};

zend_module_entry scws_module_entry = {
#if ZEND_MODULE_API_NO >= 20050922
STANDARD_MODULE_HEADER_EX, NULL,
scws_deps,
#else
STANDARD_MODULE_HEADER,
#endif
"scws",
scws_functions,
PHP_MINIT(scws),
PHP_MSHUTDOWN(scws),
NULL,
PHP_RSHUTDOWN(scws),
PHP_MINFO(scws),
PHP_SCWS_MODULE_VERSION,
PHP_MODULE_GLOBALS(scws),
NULL,
NULL,
NULL,
STANDARD_MODULE_PROPERTIES_EX
};

% ./configure -with-scws=/usr/local/scws -with-php-config=/usr/local/php/bin/php-config
% make; make install

2. 完成後,在 /path/to/phpext/modules 裡會有 scws.so,請把他放置在 php 存放 modules 的路徑下。並在 php.ini 加上
[scws]
extension="scws.so"
scws.default.charset = utf8
scws.default.fpath = /usr/local/scws

3. 重新啟動 apache
% /usr/local/apache/bin/apachectl restart
利用 phpinfo() 來看看 scws module 有沒有安裝成功。


如何應用
在解開的套件中的 /path/to/phpext 有 scws.php 是提供使用 scws 物件的範例。另外在 論壇 也有提供其他範例。

No comments: