基于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位版:

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


②、对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.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/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
php中文分词 ===== PSCWS23 - 说明文档 ===== $Id: readme.txt,v 1.3 2008/12/21 04:37:59 hightman Exp $ [ 关于 PSCWS23 ] PSCWS23 是由 hightman 于 2006 年开发的纯 PHP 代码实现的简易中文分词系统第二和第三版的简称。 PSCWS 是英文 PHP Simple Chinese Words Segmentation 的头字母缩写,它是 SCWS 项目的前身。 现 SCWS 已作为 FTPHP 项目的一个子项目继续发展,现于 2008-12 重新修订并整理发布。 SCWS 是一套开源并且免费的中文分词系统,提供优秀易用的 PHP 接口。 项目主页:http://www.ftphp.com/scws PSCWS 的第二版和第三版调用接口完全一致,词典也通用,仅仅是内部分词算法不一样。其中第二版 采用的是正向最大匹配结合N(默认为2)层消岐方案;第三版则采用双向匹配比较相邻词汇的频率取优。 使用速度上第二版略快一些,但差别不大,准确率也相差不多各有特色。 [ 性能评估 ] 采用 demo.php 的分词调用, 操作系统 FreeBSD 6.2 , CPU 为双至强 3.0G PSCWS2 - 长度为 80, 535 的文本, 耗时 4.9 秒, 查词 44688 次 分词精度 93.67%, 召回率 88.54% (F-1: 0.91) PSCWS3 - 长度为 80, 535 的文本, 耗时 6.8 秒, 查词 48181 次 分词精度 92.99%, 召回率 87.91% (F-1: 0.90) 附:同等长度文本在 scws-1.0 (PHP 扩展方式) 耗时仅需 0.65 秒(C调用则为 0.17秒). 分词精度 95.60%, 召回率 90.51% (F-1: 0.93), 强烈建议有条件者改用 scws-1.0 (C版) 注:多次评测后发现在单 CPU 的机器上性能也大致差不多。 [ 文件结构 ] 文件 描述 使用必需? -------------------------------------------------------------- dict/dict.xdb - XDB 格式词典 (必要文件) pscws2.class.php - PSCWS 第二版核心类库代码 (必要文件) pscws3.class.php - PSCWS 第三版核心类库代码 (必要文件) dict.class.php - 词典操作类库 (必要文件) xdb_r.class.php - XDB 格式读取类 (必要文件) demo.php - 演示文件, 支持 web/命令行 (可选) readme.txt - 说明文件 (可选) [ 使用说明 ] PSCWS2 和 PSCWS3 这两个类对应的文件分别为 pscws2.class.php 和 pscws3.class.php ,分别为 第二版及第三版。在 PHP 代码中的调用方法如下: // 加入头文件, 若用第3版则文件名应为 pscws3.class.php require '/path/to/pscws2.class.php'; // 建立分词类对像, 参数为词典路径 $pscws = new PSCWS2('/path/to/dict/dict.xdb'); // // 接下来, 设定一些分词参数或选项 // 包括: set_dict, set_ignore_mark, set_autodis, set_debug ... 等方法 // // 调用 segment 方法执行词汇切割, segment 的第二参数为回调函数, 这将使系统自动将切好的词 // 组成的数组作为参数传递给该回调函数去执行,若为空则将词组成的数组返回。 $res = $pscws->segment($string); print_r($res); 或 (特别地,回调函数视情况会多次调用) function seg_cb($res) { print_r($res); } $pscws->segment($string, 'seg_cb'); --- 类方法完全手册 --- (注: 构造函数可传入词典路径作为参数, 这与另外调用 set_dict 效果是一样的) class PSCWS2 { | class PSCWS3 { void set_dict(string dict_fpath); 说明:设置分词引擎所采用的词典文件。 参数:dict_fpath 为词典路径,内部会根据词典路径的后缀名采用相应的处理方式。 返回值:无。 错误:若有错误会给出 WARNING 级的错误提示。 void set_ignore_mark(bool set); 说明:设置分词结果是否忽略标点符号。 参数:set 必须为布尔型的 true 或 false,分别表示要忽略和不忽略。 返回值:无。 void set_autodis(bool set); 说明:设置分词算法是否启用自动识别人名。 参数:set 必须为布尔型的 true 或 false,分别表示要识别和不识别。 返回值:无。 void set_debug(bool set); 说明:设置分词过程是否输出分词过程的调试信息。 参数:set 必须为布尔型的 true 或 false,分别表示要输出和不输出。 返回值:无。 void set_statistics(bool set); 说明:设置分词过程是否记录各词汇出现的次数及位置。 参数:set 必须为布尔型的 true 或 false,分别表示要记录和不记录。 返回值:无。 其它:在 segment() 方法执行结束后调用 get_statistics() 方法获取统计信息。 Array &get_statistics(void); 说明:返回上次 segment() 调用的分词结果的各词汇出现的次数及位置信息(引用返回)。 参数:无。 返回值:以词汇为键名,其值由次数(times)和(poses)位置列表数组组成。 其它:该方法应该在 segment() 方法后调用,每次 segment() 调用前统计信息自动清零。 mixed &segment(string text [, string cb]); 说明:对字符串 text 执行分词。 参数:text 为要执行分词的字符串; cb 是处理分词结果的回调函数名称,它接受由切好的词语组成的数组这一参数。 返回值:当 cb 参数没有传入时,返回切好的词语组成的数组成(可以以引用方式返回), 若采用回调函数处理分词结果,则直接返回 true。 其它:cb 函数在一次 segment() 过程中可能是多次调用的。 若没有传入 cb 参数,segment() 将会在 text 分词结果后再将结果一次返回, 当 text 很长时速度较慢,建议将 text 按明显的换行标记切分后再依次调用 segment() 方法进行切词以提高效率! }; [ 关于词典 ] PSCWS23 支持的词典格式包括:XDB,SQLite,CDB/GDBM 及 Txt 文本格式,依据所设词典的后缀名 而自动识别(后缀名为小写,如:dict.xdb, dict.sqlite ...) 目前推荐和默认采用 XDB 格式,这是专为 SCWS 开发而且采用纯 PHP 代码实现的 XTreeDB,效率 非常不错,比 CDB 还略快。 其它格式仅作简介,一般也不再推荐使用,其中 CDB/GDBM 需要 PHP 的 dba 扩展及相关库函数。 (编译选项 --enable-dba --with-cdb --with-gdbm) 我们提供的默认词典是通用的互联网信息词汇集,约 26 万个词。如果您需要定制词典以作特殊用 途,请与我们联系,可能会视情况进行收费。 [ 注意事项 ] PSCWS23 由纯 PHP 代码实现,不同的词典格式可能需要适当的 PHP 扩展支持,默认推荐的词典格式 现在已经改为 XDB (原先是CDB),不再需要外部扩展支持。 PSCWS23 可以良好的运行在各种版本的 PHP4 和 PHP5 上,但仅支持 GBK 字符集,若您的系统采用 的是 UTF-8 字符集,则不适合用本系统,请参见项目主页上的 scws-1.0.0 ,这套工具完美支持 GBK 和 UTF-8 字符集同时支持词性标注等。(注:BIG5 字符集可以按 GBK 字符集处理) 提供下载的词典是在 Intel 架构的平台上制作的,放到其它架构的机器中运行可能会存在问题导致 切词完全错误(典型的如:Sparc 架构的 Solaris/SunOS 服务器中),若您发现问题请及时与我们 联系寻求解决。 [ 联系我们 ] SCWS 项目网站:http://www.ftphp.com/scws 我的个人 Email:hightman2@yahoo.com.cn (一般问题请勿直接来信,谢谢) -- 2008.12.20 - hightman

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值