中文分詞系統 HTTPCWS 1.0.0
套件名稱:HTTPCWS
版本:1.0.0
官網:http://blog.s135.com/httpcws_v100/
下載:http://blog.s135.com/httpcws_v100/
demo:http://blog.s135.com/demo/httpcws/
執行結果畫面:
軟體介紹:
1、什麼是 httpcws ?
HTTPCWS 是一款基於HTTP協議的開源中文分詞系統,目前僅支持Linux系統。HTTPCWS 使用「ICTCLAS 3.0 2009共享版中文分詞算法」的API進行分詞處理,得出分詞結果。HTTPCWS 將取代本人之前開發的 PHPCWS 中文分詞擴展。
ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是中國科學院計算技術研究所在多年研究工作積累的基礎上,基於多層隱馬模型研製出的漢語詞法分析系統,主要功能包括中文分詞;詞性標註;命 名實體識別;新詞識別;同時支持用戶詞典。ICTCLAS經過五年精心打造,內核升級6次,目前已經升級到了ICTCLAS3.0,分詞精度 98.45%,各種詞典數據壓縮後不到3M。ICTCLAS在國內973專家組組織的評測中活動獲得了第一名,在第一屆國際中文處理研究機構SigHan 組織的評測中都獲得了多項第一名,是當前世界上最好的漢語詞法分析器。
ICTCLAS 3.0 商業版是收費的,而免費提供的 ICTCLAS 3.0 共享版不開源,詞庫是根據人民日報一個月的語料得出的,很多詞語不存在。所以本人補充的一個19萬條詞語的自定義詞庫,對ICTCLAS分詞結果進行合併處理,輸出最終分詞結果。
由於 ICTCLAS 3.0 2009 共享版只支持GBK編碼,因此,如果是UTF-8編碼的字符串,可以先用iconv函數轉換成GBK編碼,再用httpcws進行分詞處理,最後轉換回UTF-8編碼。
HTTPCWS 軟件自身(包括httpcws.cpp源文件、dict/httpcws_dict.txt自定義詞庫)採用NewBSD開源協議,可以自由修改。 HTTPCWS 使用的 ICTCLAS 共享版 API 及 dict/Data/ 目錄內的語料庫,版權及著作權歸中國科學院計算技術研究所、ictclas.org所有,使用需遵循其相關協議。
2、httpcws 中文分詞在線演示
演示網址:http://blog.s135.com/demo/httpcws/
3、httpcws 中文分詞下載安裝
32位版:
wget http://httpcws.googlecode.com/files/httpcws-1.0.0-i386-bin.tar.gz
tar zxvf httpcws-1.0.0-i386-bin.tar.gz
rm -f httpcws-1.0.0-i386-bin.tar.gz
cd httpcws-1.0.0-i386-bin/
ulimit -SHn 65535
/usr/local/httpcws-1.0.0-i386-bin/httpcws -d -x /usr/local/httpcws-1.0.0-i386-bin/dict/
64位版:
wget http://httpcws.googlecode.com/files/httpcws-1.0.0-x86_64-bin.tar.gz
tar zxvf httpcws-1.0.0-x86_64-bin.tar.gz
rm -f httpcws-1.0.0-x86_64-bin.tar.gz
cd httpcws-1.0.0-x86_64-bin/
ulimit -SHn 65535
/usr/local/httpcws-1.0.0-x86_64-bin/httpcws -d -x /usr/local/httpcws-1.0.0-x86_64-bin/dict/
命令行啟動參數:
4、httpcws 使用方法
GET方法(文本長度受URL的長度限制,需要分詞的文本為GBK編碼,最好採用urlencode對文本進行編碼):
http://192.168.8.42:1985/?w=%D3%D0%C8%CB%B5%C4%B5%D8%B7%BD%BE%CD%D3%D0%BD%AD%BA%FE
POST方法(文本長度無限制,適用於大文本分詞,需要分詞的文本為GBK編碼,最好採用urlencode對文本進行編碼):
curl -d “%D3%D0%C8%CB%B5%C4%B5%D8%B7%BD%BE%CD%D3%D0%BD%AD%BA%FE” http://192.168.8.42:1985
PHP 調用 HTTPCWS 示例:
①、對GBK編碼的字符串進行中文分詞處理(HTTP POST方式):
@header(’Content-Type: text/html; charset=gb2312′);
$text = “有人的地方就有江湖”;
$text = urlencode($text);
$opts = array(
‘http’=>array(
‘method’=>”POST”,
‘header’=>”Content-type: application/x-www-form-urlencoded\r\n”.
“Content-length:”.strlen($data).”\r\n” .
“Cookie: foo=bar\r\n” .
“\r\n”,
‘content’ => $text,
)
);
$context = stream_context_create($opts);
$result = file_get_contents(”http://127.0.0.1:1985″, false, $context);
echo $result;
?>
②、對UTF-8編碼的字符串進行中文分詞處理(HTTP POST方式):
@header(’Content-Type: text/html; charset=utf-8′);
$text = “有人的地方就有江湖”;
$text = iconv(”UTF-8″, “GBK//IGNORE”, $text);
$text = urlencode($text);
$opts = array(
‘http’=>array(
‘method’=>”POST”,
‘header’=>”Content-type: application/x-www-form-urlencoded\r\n”.
“Content-length:”.strlen($data).”\r\n” .
“Cookie: foo=bar\r\n” .
“\r\n”,
‘content’ => $text,
)
);
$context = stream_context_create($opts);
$result = file_get_contents(”http://127.0.0.1:1985″, false, $context);
$result = iconv(”GBK”, “UTF-8//IGNORE”, $result);
echo $result;
?>
③、對GBK編碼的字符串進行中文分詞處理(HTTP GET方式):
@header(’Content-Type: text/html; charset=gb2312′);
$text = “有人的地方就有江湖”;
$text = urlencode($text);
$result = file_get_contents(”http://127.0.0.1:1985/?w=”.$text);
echo $result;
?>
④、對UTF-8編碼的字符串進行中文分詞處理(HTTP GET方式):
@header(’Content-Type: text/html; charset=utf-8′);
$text = “有人的地方就有江湖”;
$text = iconv(”UTF-8″, “GBK//IGNORE”, $text);
$text = urlencode($text);
$result = file_get_contents(”http://127.0.0.1:1985/?w=”.$text);
$result = iconv(”GBK”, “UTF-8//IGNORE”, $result);
echo $result;
?>
5、httpcws 分詞速度及用途
局域網內 HTTPCWS 接口中文分詞平均處理速度(Wait時間):0.001秒。HTTPCWS 基於 libevent + epoll 網絡IO模型開發,經測試,每秒可處理5000~20000次請求。
HTTPCWS 屬於《[http://blog.s135.com/post/385.htm 億級數據的高並發通用搜索引擎架構設計]》的一部分,用作「搜索查詢接口」的關鍵字分詞處理。在此架構中,Sphinx索引引擎對於CJK(中日韓)語言 支持一元切分,假設【反恐行動是國產主視角射擊網絡遊戲】這段文字,Sphinx會將其切成【反 恐 行 動 是 國 產 主 視 角 射 擊 網 絡 游 戲】,然後對每個字建立反向索引。如果用這句話中包含的字組成一個不存在的詞語,例如【恐動】,也會被搜索到,所以搜索時,需要加引號,例如搜索【”反恐 行動”】,就能完全匹配連在一起的四個字,不連續的【”恐動”】就不會被搜索到。但是,這樣還有一個問題,搜索【”反恐行動遊戲”】或【”國產網絡遊 戲”】就會搜索不到。所以,我在搜索層寫了個PHP中文分詞擴展,搜索「反恐行動遊戲」、「國產網絡遊戲」,會被httpcws中文分詞函數分別切分為 「反恐行動 遊戲」、「國產 網絡遊戲」,這時候,用PHP函數給以空格分隔的詞語加上引號,去搜索【”反恐行動” “遊戲”】或【”國產” “網絡遊戲”】,就能搜索到這條記錄了。由於httpcws位於搜索層,中文分詞詞庫發生增、刪、改,只需重啟httpcws進程即可,無需重建搜索索 引。
根據上述情況,對於那些採用二元交叉切分的搜索引擎,httpcws用在前端搜索層對用戶輸入的搜索關鍵字、短語進行分詞處理,同樣適合。httpcws開發的目的正在於此,對於短句、小文本中文分詞切分,速度非常之快。
6、自定義詞庫
修改dict/httpcws_dict.txt文件,可以自由增加自己需要的詞語。重啟httpcws即可生效。
9月 25, 2009 | Posted by 林翔 
Categories:
Tags: