基於HTTP協議的開源中文分詞系統:HTTPCWS 1.0.0 發佈

發佈版本:
  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位版:

[plain] view plain copy
  1. cd /usr/local/  
  2. wget http://httpcws.googlecode.com/files/httpcws-1.0.0-i386-bin.tar.gz  
  3. tar zxvf httpcws-1.0.0-i386-bin.tar.gz  
  4. rm -f httpcws-1.0.0-i386-bin.tar.gz  
  5. cd httpcws-1.0.0-i386-bin/  
  6. ulimit -SHn 65535  
  7. /usr/local/httpcws-1.0.0-i386-bin/httpcws -d -x /usr/local/httpcws-1.0.0-i386-bin/dict/  


64位版:

[plain] view plain copy
  1. cd /usr/local/  
  2. wget http://httpcws.googlecode.com/files/httpcws-1.0.0-x86_64-bin.tar.gz  
  3. tar zxvf httpcws-1.0.0-x86_64-bin.tar.gz  
  4. rm -f httpcws-1.0.0-x86_64-bin.tar.gz  
  5. cd httpcws-1.0.0-x86_64-bin/  
  6. ulimit -SHn 65535  
  7. /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對文本進行編碼):
[plain] view plain copy
  1. http://192.168.8.42:1985/?w=有人的地方就有江湖  
  2. 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對文本進行編碼):
[plain] view plain copy
  1. curl -d "有人的地方就有江湖" http://192.168.8.42:1985  
  2. 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方式):
[plain] view plain copy
  1. <?php  
  2. @header('Content-Type: text/html; charset=gb2312');   
  3. $text = "有人的地方就有江湖";  
  4. $text = urlencode($text);  
  5. $opts = array(  
  6.   'http'=>array(  
  7.     'method'=>"POST",  
  8.     'header'=>"Content-type: application/x-www-form-urlencoded\r\n".  
  9.               "Content-length:".strlen($data)."\r\n" .  
  10.               "Cookie: foo=bar\r\n" .  
  11.               "\r\n",  
  12.     'content' => $text,  
  13.   )  
  14. );  
  15. $context = stream_context_create($opts);  
  16. $result = file_get_contents("http://127.0.0.1:1985", false, $context);  
  17. echo $result;  
  18. ?>  
②、對UTF-8編碼的字符串進行中文分詞處理(HTTP POST方式):
[plain] view plain copy
  1. <?php  
  2. @header('Content-Type: text/html; charset=utf-8');  
  3. $text = "有人的地方就有江湖";  
  4. $text = iconv("UTF-8", "GBK//IGNORE", $text);  
  5. $text = urlencode($text);  
  6. $opts = array(  
  7.   'http'=>array(  
  8.     'method'=>"POST",  
  9.     'header'=>"Content-type: application/x-www-form-urlencoded\r\n".  
  10.               "Content-length:".strlen($data)."\r\n" .  
  11.               "Cookie: foo=bar\r\n" .  
  12.               "\r\n",  
  13.     'content' => $text,  
  14.   )  
  15. );  
  16. $context = stream_context_create($opts);  
  17. $result = file_get_contents("http://127.0.0.1:1985", false, $context);  
  18. $result = iconv("GBK", "UTF-8//IGNORE", $result);  
  19. echo $result;  
  20. ?>  


③、對GBK編碼的字符串進行中文分詞處理(HTTP GET方式):

[plain] view plain copy
  1. <?php  
  2. @header('Content-Type: text/html; charset=gb2312');   
  3. $text = "有人的地方就有江湖";  
  4. $text = urlencode($text);  
  5. $result = file_get_contents("http://127.0.0.1:1985/?w=".$text);  
  6. echo $result;  
  7. ?>  

④、對UTF-8編碼的字符串進行中文分詞處理(HTTP GET方式):

[plain] view plain copy
  1. <?php  
  2. @header('Content-Type: text/html; charset=utf-8');  
  3. $text = "有人的地方就有江湖";  
  4. $text = iconv("UTF-8", "GBK//IGNORE", $text);  
  5. $text = urlencode($text);  
  6. $result = file_get_contents("http://127.0.0.1:1985/?w=".$text);  
  7. $result = iconv("GBK", "UTF-8//IGNORE", $result);  
  8. echo $result;  
  9. ?>  

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/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章