發佈版本:
httpcws 1.0.0 (最新版本:2009-08-10發佈)
程序網址:http://code.google.com/p/httpcws
安裝使用手冊:http://blog.s135.com/httpcws_v100/
下載地址(32位版):http://httpcws.googlecode.com/files/httpcws-1.0.0-i386-bin.tar.gz
下載地址(64位版):http://httpcws.googlecode.com/files/httpcws-1.0.0-x86_64-bin.tar.gz
中文分詞在線演示:http://blog.s135.com/demo/httpcws/
PHP演示程序下載:http://blog.s135.com/demo/httpcws/httpcws-php-demo.zip
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位版:
- cd /usr/local/
- 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位版:
- cd /usr/local/
- 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=有人的地方就有江湖
- 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 "有人的地方就有江湖" http://192.168.8.42:1985
- 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方式):
- <?php
- @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;
- ?>
- <?php
- @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方式):
- <?php
- @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方式):
- <?php
- @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即可生效。
原文鏈接: http://blog.s135.com/httpcws_v100/