SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统)。
这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成词。 词是中文的最小语素单位,但在书写时并不像英语会在词之间用空格分开, 所以如何准确并快速分词一直是中文分词的攻关难点。
SCWS 采用纯 C 语言开发,不依赖任何外部库函数,可直接使用动态链接库嵌入应用程序, 支持的中文编码包括 GBK、UTF-8 等。此外还提供了 PHP 扩展模块, 可在 PHP 中快速而方便地使用分词功能。
分词算法上并无太多创新成分,采用的是自己采集的词频词典,并辅以一定的专有名称,人名,地名, 数字年代等规则识别来达到基本分词,经小范围测试准确率在 90% ~ 95% 之间, 基本上能满足一些小型搜索引擎、关键字提取等场合运用。首次雏形版本发布于 2005 年底。
官网地址:http://www.xunsearch.com/scws/index.php
github地址:https://github.com/hightman/scws
开发环境:虚拟机+php7+nginx 1.10.2
实际安装步骤:
第一部分:扩展安装
1、进入服务器的根目录 [root@root /]# cd /usr/local/src 2、取得 scws的代码 [root@root src]# wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 3、解开压缩包 [root@root src]# tar xvjf scws-1.2.3.tar.bz2 4、进入目录 [root@root src]# cd scws-1.2.3 5、执行配置脚本和编译 [root@root scws-1.2.3]# ./configure --prefix=/usr/local/scws [root@root scws-1.2.3]# make [root@root scws-1.2.3]# make install 6、顺利的话已经编译并安装成功到 /usr/local/scws 中了,执行下面命令看看文件是否存在 [root@root scws-1.2.3]# ls -al /usr/local/scws/lib/libscws.la -rwxr-xr-x 1 root root 916 11月 27 17:52 /usr/local/scws/lib/libscws.la 7、 [root@root scws-1.2.3]# /usr/local/scws/bin/scws -h 如果安装成功会显现类似下面的信息 scws (scws-cli/1.2.3) Simple Chinese Word Segmentation - Command line usage. Copyright (C)2007 by hightman. 8、用 wget 下载并解压词典,或从主页下载然后自行解压再将 *.xdb 放入 [root@root scws-1.2.3]# cd /usr/local/scws/etc [root@root etc]# wget http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2 [root@root etc]# wget http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2 [root@root etc]# tar xvjf scws-dict-chs-gbk.tar.bz2 dict.xdb [root@root etc]# tar xvjf scws-dict-chs-utf8.tar.bz2 dict.utf8.xdb [root@root etc]# ls dict.utf8.xdb dict.xdb rules_cht.utf8.ini rules.ini rules.utf8.ini scws-dict-chs-gbk.tar.bz2 scws-dict-chs-utf8.tar.bz2
第二部分:
1、进入到scws源码的安装目录的(即: /usr/local/src/scws-1.2.3) [root@root src]# cd scws-1.2.3/ [root@root scws-1.2.3]# ls aclocal.m4 AUTHORS cli config.guess config.h.in config.status configure COPYING etc install-sh libtool Makefile Makefile.in NEWS README win32API.md ChangeLog compile config.h config.log config.sub configure.ac depcomp INSTALL libscws ltmain.sh Makefile.am missing phpext stamp-h1 2、进入源码目录的 phpext/ 目录 [root@root scws-1.2.3]# cd phpext/ 3、执行 phpize (在PHP安装目录的bin/目录下) [root@root phpext]# /usr/local/php7/bin/phpize Configuring for: PHP Api Version: 20160303 Zend Module Api No: 20160303 Zend Extension Api No: 320160303 4、执行 ./configure --with-scws=/usr/local/scws 若php安装在特殊目录$php_prefix, 则请在 configure 后加上 --with-php-config=$php_prefix/bin/php-config [root@root phpext]# ./configure --with-scws=/usr/local/scws --with-php-config=/usr/local/php7/bin/php-config [root@root phpext]# make [root@root phpext]# make test [root@root phpext]# make install Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/ [root@root phpext]# 5、在 php.ini 中加入以下几行 [root@root local]# vim /etc/php.ini [scws] extension = scws.so scws.default.charset = utf-8 scws.default.fpath = /usr/local/scws/etc 6、重新启动php.ini [root@root src]# systemctl restart php-fpm.service
最后编写一个测试文件,查看中文分词效果:
在本机添加host:(C:\Windows\System32\drivers\etc)
192.168.216.154 www.laravel.com
在本机访问 http://www.laravel.com/test.php 即可访问虚拟机的该测试文件。
thinkphp3.2.3使用scws中文分词:
1. 下载scws官方提供的类(这里使用的是pscws第四版的)
http://www.xunsearch.com/scws/down/pscws4-20081221.tar.bz2
下载XDB 词典文件 (这里使用的是utf8简体中文词典包)
http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2
2. 解压 pscws4-20081221.tar.bz2、scws-dict-chs-utf8.tar.bz2
这里把 pscws4 文件夹下 pscws4.class.php 类( 把 pscws4.class.php文件名改为 Pscws4.class.php ),xdb_r.class.php类 ( 把 xdb_r.class.php 文件名改为 XDB_R.class.php) 放到ThinkPHP\Library\Org\Util目录下面。
3. 然后修改 Pscws4.class.php
加入命名空间
namespace Org\Util;
require_once (dirname(__FILE__) . '/xdb_r.class.php'); 修改为
require_once (dirname(__FILE__) . '/XDB_R.class.php');
120行构造函数改为:
function __construct() { $this->PSCWS4('utf-8'); }
修改 XDB_R.class.php
加入命名空间
namespace Org\Util;
4.解压XDB 词典文件
在公共资源目录 Public 目录新增 dict 文件夹,然后将XDB 词典文件的dict.utf8.xdb解压到词目录下,再把scws类中的etc下面的rules.utf8.ini放到此目录下面。
5.在入口文件加入一行常量定义代码(其实就是定义词典文件和配置文件的路径)
define("CONF_PATH", dirname(__FILE__)."/Public/dict/");
6.在IndexController.class.php控制器里面建立一个私有方法,供其他方法调用
<?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index(){ $rzt=$this->get_tags("新款 牛漆皮小尖头直跟高跟单鞋910033 灰羊猄(7.31发货) 39"); print_r($rzt); } /** *中文分词 * @params string $title 需要分词的语句 * @params int $num 分词个数,默认不用填写 **/ private function get_tags($title,$num=null){ $pscws = new \Org\Util\Pscws4('utf8'); $pscws->set_dict(CONF_PATH . 'dict.utf8.xdb'); $pscws->set_rule(CONF_PATH . 'rules.utf8.ini'); $pscws->set_ignore(true); $pscws->send_text($title); $words = $pscws->get_tops($num); $pscws->close(); $tags = array(); foreach ($words as $val) { $tags[] = $val['word']; } return implode(',', $tags); } }
访问 http://localhost/thinkphp/ ,显示的结果为 :
漆皮,单鞋,尖头,高跟,新款,发货,910033,7.31,39
注意:乱码是因为字符集的原因。
附件地址:
链接:https://pan.baidu.com/s/1xN4RdTDUwnbUO-ktf0YO9g 提取码:l1oj
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn