Home  >  Article  >  Backend Development  >  How to install php scws (word segmentation component)?

How to install php scws (word segmentation component)?

藏色散人
藏色散人forward
2019-04-26 11:32:413219browse

centOs environment to install scws

1、安装 bzip2 及 gcc gcc-c++
yum install bzip2
yum -y install gcc gcc-c++
2、下载  scws-1.2.3 的代码
wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2
3、解压
tar xvjf scws-1.2.3.tar.bz2
4、安装
cd scws-1.2.3
./configure --prefix=/usr/local/scws
make ; 
make install
顺利的话已经编译并安装成功到 /usr/local/scws 中了,执行下面命令看看文件是否存在
ls -al /usr/local/scws/lib/libscws.la
5、用 wget 下载并解压词典,或从主页下载然后自行解压再将 *.xdb 放入 /usr/local/scws/etc 目录中
cd /usr/local/scws/etc
wget http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2
wget http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2
tar xvjf scws-dict-chs-gbk.tar.bz2
tar xvjf scws-dict-chs-utf8.tar.bz2
6、php扩展
如果您需要在 php 中调用分词,建议继续阅读本文安装 php 扩展,否则可跳过不看。
假设您已经将 scws 按上述步骤安装到 /usr/local/scws 中。
安装此扩展要求您的 php 和系统环境安装了相应的 autoconf automake 工具及 phpize 。
1) 进入源码目录的 phpext/ 目录 
cd /var/scws-1.2.3/phpext
2) 执行 phpize (在PHP安装目录的bin/目录下)[没有安装phpize 使用 yum install php-devel 安装]
3) 执行 ./configure --with-scws=/usr/local/scws 
4) 若 php 安装在特殊目录 $php_prefix, 则请在 configure 后加上 --with-php-config=$php_prefix/bin/php-config
5) 在 php.ini [/etc/php.ini] 中加入以下几行
[scws]
extension = scws.so
scws.default.charset = utf8
scws.default.fpath = /usr/local/scws/etc

Windows environment to install scws

php 扩展下载地址
1. 根据您当前用的 PHP 版本,下载相应已编译好的 php_scws.dll 扩展库。
   目前支持 PHP-4.4.x 和 PHP-5.2.x 系列,下载地址分别为:
   php-4.4.x: http://www.xunsearch.com/scws/down/php-4.4.x/php_scws.dll
   php-5.2.x: http://www.xunsearch.com/scws/down/php-5.2.x/php_scws.dll
   php-5.3.x: http://www.xunsearch.com/scws/down/php-5.3.x/php_scws.dll
2. 将下载后的  php_scws.dll 放到 php 安装目录的
   extensions/ 目录中去(通常为:X:/php/extensions/或 X:/php/ext/)。
3. 建立一个本地目录放规则集文件和词典文件,建议使用:C:/program files/scws/etc
4. 从 scws 主页上下载词典文件,解压后将 *.xdb 放到上述目录中
   词典系列:http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2
           http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2
           http://www.xunsearch.com/scws/down/scws-dict-cht-utf8.tar.bz2
5. 从 scws 主页上下载规则集文件,解压后将 *.ini 放到第 3 步建立的目录
   规则集文件压缩包:http://www.xunsearch.com/scws/down/rules.tgz
   解压后有三个文件分别为 rules.ini  rules.utf8.ini rules_cht.utf8.ini
   将三件文件拷到第 3 步所述的目录中
6. 修改 php.ini 通常位于 C:/windows/php.ini 或 C:/winnt/php.ini 之类的目录,
   在 php.ini 的末尾加入以下几行:
[scws]
;
; 注意请检查 php.ini 中的 extension_dir 的设定值是否正确, 否则请将 extension_dir 设为空,
; 再把 php_scws.dll 指定为绝对路径。
;
extension = php_scws.dll
scws.default.charset = gbk
scws.default.fpath = "c:/program files/scws/etc"
5. 重开 web 服务器即可完成。

php code

php 代码
<?php
$so = scws_new();
//$so->set_charset(&#39;utf-8&#39;);
// 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件
$so->send_text("我是一个中国人,我会C++语言,我也有很多T恤衣服 name is hai");
while ($tmp = $so->get_result())
{
  print_r($tmp);
}
$so->close();
?>
预定义常量
-----------
* `SCWS_XDICT_XDB`  词典文件为 XDB
* `SCWS_XDICT_MEM`  将词典全部加载到内存里
* `SCWS_XDICT_TXT`  词典文件为 TXT(纯文本)
* `SCWS_MULTI_NONE`     不进行复合分词
* `SCWS_MULTI_SHORT` 短词复合  
* `SCWS_MULTI_DUALITY`   散字二元复合
* `SCWS_MULTI_ZMAIN` 重要单字
* `SCWS_MULTI_ZALL`     全部单字
预定义类
---------
这是一个类似 `Directory` 的内置式伪类操作,类方法建立请使用 `scws_new()` 函数,而不能直接用 `new SimpleCWS`。
否则不会包含有 handle 指针,将无法正确操作。它包含的方法有:
```php
class SimpleCWS  {
  resource handle;
  bool close(void);
  bool set_charset(string charset)
  bool add_dict(string dict_path[, int mode = SCWS_XDICT_XDB])
  bool set_dict(string dict_path[, int mode = SCWS_XDICT_XDB])
  bool set_rule(string rule_path)
  bool set_ignore(bool yes)
  bool set_multi(int mode)
  bool set_duality(bool yes)
  bool send_text(string text)
  mixed get_result(void)
  mixed get_tops([int limit [, string xattr]])
  bool has_word(string xattr)
  mixed get_words(string xattr)
  string version(void)
};
```
> **注意** 类方法的用与支 scws_xxx_xxx 系列函数用法一致,只不过免去第一参数,
> 故不另外编写说明,请参见函数列表即可。
**例子1** 使用类方法分词
```php
<?php
$so = scws_new();
$so->set_charset(&#39;gbk&#39;);
// 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件
$so->send_text("我是一个中国人,我会C++语言,我也有很多T恤衣服");
while ($tmp = $so->get_result())
{
  print_r($tmp);
}
$so->close();
?>
```
**例子2** 使用函数提取高频词
```php
<?php
$sh = scws_open();
scws_set_charset($sh, &#39;gbk&#39;);
scws_set_dict($sh, &#39;/path/to/dict.xdb&#39;);
scws_set_rule($sh, &#39;/path/to/rules.ini&#39;);
$text = "我是一个中国人,我会C++语言,我也有很多T恤衣服";
scws_send_text($sh, $text);
$top = scws_get_tops($sh, 5);
print_r($top);
?>
```
> **注意** 为方便使用,当 `SimpleCWS::send_text` 方法或 `scws_send_text()` 函数被调用前并且没有
> 加载任何词典和规则集时,系统会自动在 `scws.default.fpath` (ini配置)目录中查找相应的字符集词典。
> 词典和规则文件的命名方式为 dict[.字符集].xdb 和 rules[.字符集].ini ,当字符集是 gbk 时中括号里面的
> 部分则不需要,直接使用 dict.xdb 和 rules.ini 而不是 dict.gbk.xdb 。
> 
> 此外,输入的文字,词典、规则文件这三者的字符集必须统一,如果不是默认的 gbk 字符集请调用 
> `SimpleCWS::set_charset` 或 `scws_set_charset` 来设定,否则可能出现意外错误。
函数详解
--------
1. `mixed scws_new(void)` 创建并返回一个 `SimpleCWS` 类操作对象。
   > **返回值** 成功返回类操作句柄,失败返回 false。
2. `mixed scws_open(void)` 创建并返回一个分词操作句柄。
   > **返回值** 成功返回 scws 操作句柄,失败返回 false。
3. `bool scws_close(resource scws_handle)`  
   `SimpleCWS::close(void)` 关闭一个已打开的 scws 分词操作句柄。
   > **参数 scws_handle** 即之前由 scws_open 打开的返回值。  
   > **返回值** 始终为 true  
   > **注意** 后面的 API 中省去介绍 scws_handle 参数,含义和本函数相同。
4. `bool scws_set_charset(resource scws_handle, string charset)`  
   `bool SimpleCWS::set_charset(string charset)` 设定分词词典、规则集、欲分文本字符串的字符集。
   > **参数 charset** 要新设定的字符集,目前只支持 utf8 和 gbk。(注:默认为 gbk,utf8不要写成utf-8)  
   > **返回值** 始终为 true
5. `bool scws_add_dict(resource scws_handle, string dict_path [, int mode])`
   `bool SimpleCWS::add_dict(string dict_path [, int mode])` 添加分词所用的词典,新加入的优先查找。
   > **参数 dict_path** 词典的路径,可以是相对路径或完全路径。(遵循安全模式下的 open_basedir)  
   > **参数 mode** 可选,表示加载的方式。其值有:
   >
   >   - SCWS_XDICT_TXT  表示要读取的词典文件是文本格式,可以和后2项结合用
   >   - SCWS_XDICT_XDB  表示直接读取 xdb 文件(此为默认值)
   >   - SCWS_XDICT_MEM  表示将 xdb 文件全部加载到内存中,以 XTree 结构存放,可用异或结合另外2个使用。
   >
   > **返回值** 成功返回 true 失败返回 false
6. `bool scws_set_dict(resource scws_handle, string dict_path [, int mode])`  
   `bool SimpleCWS::set_dict(string dict_path [, int mode])` 设定分词所用的词典并清除已存在的词典列表。
   > **参数 dict_path** 词典的路径,可以是相对路径或完全路径。(遵循安全模式下的 open_basedir)  
   > **参数 mode** 可选,表示加载的方式。参见 `scws_add_dict`  
   > **返回值** 成功返回 true 失败返回 false
7. `bool scws_set_rule(resource scws_handle, string rule_path)`  
   `bool SimpleCWS::set_rule(string rule_path)` 设定分词所用的新词识别规则集(用于人名、地名、数字时间年代等识别)。
   > **参数 rule_path** 规则集的路径,可以是相对路径或完全路径。(遵循安全模式下的 open_basedir)  
   > **参数 mode** 可选,表示加载的方式。参见 `scws_add_dict`  
   > **返回值** 成功返回 true 失败返回 false
8. `bool scws_set_ignore(resource scws_handle, bool yes)`  
   `bool SimpleCWS::set_ignore(bool yes)` 设定分词返回结果时是否去除一些特殊的标点符号之类。
   > **参数 yes** 设定值,如果为 true 则结果中不返回标点符号,如果为 false 则会返回,缺省为 false。  
   > **返回值** 始终为 true
9. `bool scws_set_multi(resource scws_handle, int mode)`  
   `bool SimpleCWS::set_multi(bool yes)` 设定分词返回结果时是否复式分割,如“中国人”返回“中国+人+中国人”三个词。
   > **参数 mode** 复合分词法的级别,缺省不复合分词。取值由下面几个常量异或组合(也可用 1-15 来表示):
   >
   >   - SCWS_MULTI_SHORT   (1)短词
   >   - SCWS_MULTI_DUALITY (2)二元(将相邻的2个单字组合成一个词)
   >   - SCWS_MULTI_ZMAIN   (4)重要单字
   >   - SCWS_MULTI_ZALL    (8)全部单字
   >
   > **返回值** 始终为 true
10. `bool scws_set_duality(resource scws_handle, bool yes)`  
    `bool SimpleCWS::set_duality(bool yes)` 设定是否将闲散文字自动以二字分词法聚合
   > **参数 yes** 设定值,如果为 true 则结果中多个单字会自动按二分法聚分,如果为 false 则不处理,缺省为 false。  
   > **返回值** 始终为 true
11. `bool scws_send_text(resource scws_handle, string text)`  
    `bool SimpleCWS::send_text(string text)` 发送设定分词所要切割的文本。
   > **参数 text** 要切分的文本的内容。  
   > **返回值** 成功返回 true 失败返回 false  
   > **注意** 系统底层处理方式为对该文本增加一个引用,故不论多长的文本并不会造成内存浪费;
   > 执行本函数时,若未加载任何词典和规则集,则会自动试图在 ini 指定的缺省目录下查找缺省字符集的词典和规则集。
12. `mixed scws_get_result(resource scws_handle)`  
    `mixed SimpleCWS::get_result()` 根据 send_text 设定的文本内容,返回一系列切好的词汇。
   > **返回值** 成功返回切好的词汇组成的数组,若无更多词汇,返回 false。返回的词汇包含的键值如下:
   >
   >   - word _string_ 词本身
   >   - idf _float_ 逆文本词频
   >   - off _int_ 该词在原文本路的位置
   >   - attr _string_ 词性
   >
   > **注意** 每次切词后本函数应该循环调用,直到返回 false 为止,因为程序每次返回的词数是不确定的。
13. `mixed scws_get_tops(resource scws_handle [, int limit [, string attr]])`  
    `mixed SimpleCWS::get_tops([int limit [, string attr]])` 根据 send_text 设定的文本内容,返回系统计算出来的最关键词汇列表。
   > **参数 limit** 可选参数,返回的词的最大数量,缺省是 10  
   > **参数 attr** 可选参数,是一系列词性组成的字符串,各词性之间以半角的逗号隔开,
   > 这表示返回的词性必须在列表中,如果以~开头,则表示取反,词性必须不在列表中,缺省为NULL,返回全部词性,不过滤。  
   > **返回值** 成功返回统计好的的词汇组成的数组,返回 false。返回的词汇包含的键值如下:
   >
   >   - word _string_ 词本身
   >   - times _int_ 词在文本中出现的次数
   >   - weight _float_ 该词计算后的权重
   >   - attr _string_ 词性
14. `mixed scws_get_words(resource scws_handle, string attr)`  
    `mixed SimpleCWS::get_words(string attr)` 根据 send_text 设定的文本内容,返回系统中词性符合要求的关键词汇。
   > **参数 attr** 是一系列词性组成的字符串,各词性之间以半角的逗号隔开,
   > 这表示返回的词性必须在列表中,如果以~开头,则表示取反,词性必须不在列表中,若为空则返回全部词。  
   > **返回值** 成功返回符合要求词汇组成的数组,返回 false。返回的词汇包含的键值参见 `scws_get_result`
15. `bool scws_has_words(resource scws_handle, string attr)`  
    `mixed SimpleCWS::has_words(string attr)` 根据 send_text 设定的文本内容,返回系统中是否包括符合词性要求的关键词。
   > **参数 attr** 是一系列词性组成的字符串,各词性之间以半角的逗号隔开,
   > 这表示返回的词性必须在列表中,如果以~开头,则表示取反,词性必须不在列表中,若为空则返回全部词。  
   > **返回值** 如果有则返回 true,没有就返回 false。
16. `string scws_version(void)`  
    `string SimpleCWS::version(void)` 返回 scws 版本号名称信息(字符串)。

The above is the detailed content of How to install php scws (word segmentation component)?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:hcoder.net. If there is any infringement, please contact admin@php.cn delete