SCWS 中文分词

        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中文分词:

冷暖自知一抹茶ck

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 

冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论