易网中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4663|回复: 1

[php] PHP中文分词 免费开源系统SCWS详解 [复制链接]

Rank: 7Rank: 7Rank: 7

发表于 2011-6-25 20:19:18 |显示全部楼层
本帖最后由 淘淘 于 2011-6-25 22:49 编辑

首先说明,PHP分词系统是别人,本人只是整理一下,如何使用,让初学者一目了然。
开始啦。。。

运行环境: windows server 2003 + php5.2.10(这是我的电脑配置,嘿嘿...)

组件下载:  

词典文件:  

规则集文件:   

数据转换工具:


组件安装方法:php_scws.dll/Win32 安装说明

1. 根据您当前用的 PHP 版本,下载相应已编译好的 php_scws.dll 扩展库。
2. 将下载后的 php_scws.dll 放到 php 安装目录的 /extensions/ 目录中去(通常为:X:/php/extensions/或 X:/php/ext/)。
3. 建立一个本地目录放规则集文件和词典文件,建议使用:X:/php/scws/etc
4. 根据您当前用PHP程序使用的编码,下载相应的词典文件,解压后将 *.xdb 放到上述目录中。
5. 根据您当前用PHP程序使用的编码,下载相应的规则集文件,解压后将 *.ini 放到第 3 步建立的目录中。
6. 修改 php.ini 通常位于 C:/windows/php.ini 或 X:/php/php.ini 之类的目录,在 php.ini 的末尾加入以下几行:

  1. [scws]
  2. ;
  3. ; 注意请检查 php.ini 中的 extension_dir 的设定值是否正确, 否则请将 extension_dir 设为空,
  4. ; 默认编码规则:utf8 或 gbk
  5. ; 再把 php_scws.dll 指定为绝对路径。
  6. ;
  7. extension = php_scws.dll
  8. scws.default.charset = gbk
  9. scws.default.fpath = "X:/php/scws/etc"
复制代码

7. 重开 web 服务器即可完成。


PHP代码调用方法:
举例:

  1. <?php
  2. $k_code="这是一段测试分词文字,请不要大惊小怪的!"
  3. ///* 分词开始 *///
  4. $cws = scws_new();
  5. $cws->set_charset('utf8'); //编码规则
  6. $cws->set_rule(ini_get('scws.default.fpath') . '/rules.utf8.ini');
  7. $cws->set_dict(ini_get('scws.default.fpath') . '/dict.utf8.xdb');
  8. $cws->add_dict("X:/PHP/scws/etc/dict_extra_utf8.txt", SCWS_XDICT_TXT); //自定义词库(绝对路径)
  9. if (get_magic_quotes_gpc()){
  10. $k_code_all = stripslashes($k_code);
  11. }
  12. $cws->set_ignore(true); //默认去掉标点
  13. $cws->send_text($k_code_all);
  14. while ($res = $cws->get_result()){
  15. foreach ($res as $tmp){
  16. if ($tmp['len'] == 1 && $tmp['word'] == "\r")
  17. continue;
  18. if ($tmp['len'] == 1 && $tmp['word'] == "\n")
  19. $k_code_all_show=$tmp['word'];
  20. else
  21. $k_code_all_show=$k_code_all_show.'|'.$tmp['word'];
  22. }
  23. flush();
  24. }
  25. $cws->close();

  26. //生成sql语句
  27. $k_code_all_arr = explode("|", $k_code_all_show);
  28. foreach ($k_code_all_arr as $i){
  29. if($i != ''){
  30. $sql_all=$sql_all." (title like '%$i%') and ";
  31. }
  32. }
  33. if($sql_all==''){
  34. $sql_all='';
  35. }
  36. else{
  37. $sql_all=substr($sql_all,0,-4);
  38. $sql_all=' and '.$sql_all;
  39. }
  40. ///* 分词结束 *///
  41. echo $sql_all; //打印输出sql语句
  42. ?>
复制代码


结束:好啦,终于搞定了,大家可以按照上面的方式试试吧。。。(全文索引还没整理,等弄好了,在更新吧。。。)

附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 1

发表于 2011-7-11 10:31:56 |显示全部楼层
又看了一次

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|ewcn.net ( 冀ICP备09046650号 )

GMT+8, 2012-5-20 04:17 , Processed in 0.101969 second(s), 14 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部