发布版本:
  httpcws 1.0.0 (最新版本:2009-08-10发布)

  程序网址:http://code.google.com/p/httpcws

  安装使用手册:http://blog.zyan.cc/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.zyan.cc/demo/httpcws/

  PHP演示程序下载:http://blog.zyan.cc/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.zyan.cc/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对文本进行编码):


  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;
?>


  ②、对UTF-8编码的字符串进行中文分词处理(HTTP POST方式):
<?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.zyan.cc/post/385.htm 亿级数据的高并发通用搜索引擎架构设计]》的一部分,用作“搜索查询接口”的关键字分词处理。在此架构中,Sphinx索引引擎对于CJK(中日韩)语言支持一元切分,假设【反恐行动是国产主视角射击网络游戏】这段文字,Sphinx会将其切成【反 恐 行 动 是 国 产 主 视 角 射 击 网 络 游 戏】,然后对每个字建立反向索引。如果用这句话中包含的字组成一个不存在的词语,例如【恐动】,也会被搜索到,所以搜索时,需要加引号,例如搜索【"反恐行动"】,就能完全匹配连在一起的四个字,不连续的【"恐动"】就不会被搜索到。但是,这样还有一个问题,搜索【"反恐行动游戏"】或【"国产网络游戏"】就会搜索不到。所以,我在搜索层写了个PHP中文分词扩展,搜索“反恐行动游戏”、“国产网络游戏”,会被httpcws中文分词函数分别切分为“反恐行动 游戏”、“国产 网络游戏”,这时候,用PHP函数给以空格分隔的词语加上引号,去搜索【"反恐行动" "游戏"】或【"国产" "网络游戏"】,就能搜索到这条记录了。由于httpcws位于搜索层,中文分词词库发生增、删、改,只需重启httpcws进程即可,无需重建搜索索引。

  根据上述情况,对于那些采用二元交叉切分的搜索引擎,httpcws用在前端搜索层对用户输入的搜索关键字、短语进行分词处理,同样适合。httpcws开发的目的正在于此,对于短句、小文本中文分词切分,速度非常之快。



  6、自定义词库
  修改dict/httpcws_dict.txt文件,可以自由增加自己需要的词语。重启httpcws即可生效。


技术大类 » 搜索引擎技术 | 评论(95) | 引用(1) | 阅读(94602)
jj
2009-8-11 10:24
哈哈

一直在等PHPCWS的64位版,没想到等来的是另一番风景!
airwin
2009-8-11 11:34
赞! 刚在瑞豪买了个vps, 装上试试去~为作者张宴的开源精神感动 :)
uuuuu
2009-8-11 13:17
好强大啊
addcn Homepage
2009-8-11 13:52
感謝分享,down回去研究一下
小宝 Email Homepage
2009-8-11 16:17
占个位,研究一下!
haijd Homepage
2009-8-11 16:22
在 Solidot 看到介绍后就赶忙装了一个,大致测试了一下感觉效果不错!感谢作者分享!
芸临浙商大 Email Homepage
2009-8-11 17:24
前排支持~~HOHO~漫漫看
truefire
2009-8-11 17:25
赞!有个问题请教一下,如何停掉这个?是直接kill掉吗,kill掉后占用的内存会被释放掉吧,谢谢了!
张宴 回复于 2009-8-11 18:44
直接kill掉即可。killall httpcws 或 pkill -9 httpcws
uuuuu
2009-8-11 22:58
问个问题 我的mysql库是gbk的
sphinx 中文一元切分 却需要 uft8 支持

sphinx.conf 应该中应该怎么处理编码转换

还是只能将库转换成utf8
张宴 回复于 2009-8-11 23:23
如果你使用SphinxSE和MySQL结合的话,需要将库转换成UTF-8。
pete Email
2009-8-11 23:37
请问有和开源搜索引擎结合的演示程序吗?
demoneyes Email
2009-8-11 23:50
我也是用 sphinx ,请问怎样把 httpcws 结合到sphinx (在sphinx建立索引时候调用httpcws进行中文切词)
kakashilw Email
2009-8-12 13:17
要是增加分词的【权重】就更好了。。。
wayne Email
2009-8-12 13:57
请问httpcws 他可以把字典里包含的几个词返回吗?

比如
“我是一个好宝宝,明天去上学!”

字典里只有“天下、宝宝、明天、游戏”

通过检查后,就把匹配的,宝宝和明天返回?
张宴 回复于 2009-8-12 15:47
这就属于关键字匹配技术了。用tokyo cabinet或BDB新建一份key-value数据词库,基于做Key。然后将“我是一个好宝宝,明天去上学!”分词后的结果“我是一个 好 宝宝 , 明天 去上学 !”,用正则过滤掉标点成“我是一个 好 宝宝 明天 去上学”,拿每个词去key-value数据库比对一次即可。
lj
2009-8-13 10:09
怎么从来都是搞一些没有意义的东西?直接用ICTCLAS就好了!
要么写点核心代码 不要核心代码总用别人的sleepy
没有特点
张宴 回复于 2009-8-14 00:24
HTTPCWS就是一个方便PHP等其他解析型语言去调用ICTCLAS的很简单的工具,时间不允许我们花上几个月的时间去研究一套分词算法,人家是做学术研究的,而我们必须考虑到做这件事的价值。

另一款开发测试完成,正准备在月底上线的SNS产品中使用的,用于部分取代MySQL的高并发数据库,属于有价值的东西,所以已经由公司申请专利并得到专利局的受理。

企业是市场驱动型的,每个人的精力是有限的,一些非重要、非核心的组成部分可以购买、采用其他公司的成熟产品与服务,时间、费用、维护成本可能要更低。《暗黑之门》的失败在于事必躬亲,新浪space空间的失败,很大原因在于所有的APP应用都自己开发。
nickname
2009-8-13 11:33
这个跟web services有什么区别?用libevent和基于apache+php或者ngins+php,甚至是erlang的mochiweb的基础上,性能有什么优势么?或者从开发代价和性能收获来看?
张宴 回复于 2009-8-14 00:19
原来的PHPCWS是作为PHP的一个扩展运行的,由于FastCGI进程内存不共享,造成了每个FastCGI进程都要加载词库,消耗的资源过多。另外,PHP(php-fpm.conf FastCGI)的<value name="max_requests">10240</value>设置了每个php-cgi进程处理10240次请求后将结束该进程再新开一个进程,这时候又会加载词库,影响性能。

HTTPCWS在启动时一次性加载词库到内存中即可,消耗资源比较小。libevent是单进程、单线程的方式,不用加锁,对于单次处理速度非常快的应用比较适合(例如Memcached、中文分词)。1万次/秒的请求,是在1秒钟内将这1万次请求按顺序一个个处理完成的,这就要求单次请求的速度必须非常快。

而Erlang的mochiweb可以支持巨大的并发网络连接,适用于长连接、WebIM等应用。
jacky Email Homepage
2009-8-13 19:57
呵呵 希望快点用上啊 谢谢开源 ^_^ 辛苦 辛苦
dodge Email
2009-8-14 13:29
你这中文分词是直接调用ICTCLAS的核心库吗?怎么ICTCLAS目录里没源码呢?很早前我测试过这个开源版本是用VC开发的,字符集都是UNICODE,如果ICTCLAS当初在linux环境开发就好了,省得字符集转换。
张宴 回复于 2009-8-14 16:56
ICTCLAS 共享版提供的是静态链接库。如需编译,请从其官网下载。
askie1 Email Homepage
2009-8-16 11:34
非常感谢这样子的精品东西公布给大家使用!
以前用phpcsws但是后来无缘无故不能用了,而且你的演示也是无法使用了,是不是加了时间限制?

这次提供的东西会不会也有这样子的问题?
张宴 回复于 2009-8-16 14:21
ICTCLAS 的各个版本不一样,你可以自行尝试。
askie1 Email Homepage
2009-8-16 11:48
如何提取出现次数最多的词语?内核有没有这样子的参数?
张宴 回复于 2009-8-16 14:23
ICTCLAS 有提取关键字的功能,但不是完全按照出现次数最多计算的。
wiwind
2009-8-28 11:23
/usr/local/httpcws-1.0.0-i386-bin/httpcws -d -x /usr/local/httpcws-1.0.0-i386-bin/dict/
我在安装这步的时候出现 Count not open the Chinese dictionary!
我的系统是centos5.2
分页: 1/5 第一页 1 2 3 4 5 下页 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]