简易php论坛_SCWS PHP 中文简易分词

PHP 分词演示

SCWS 安装

首先安装SCWS,取得 scws 源码并解压到当前目录

进入源码目录配置和编译

cd scws-1.2.1 ; ./configure ; make install

下载字典

cd /usr/local/scws/etc

wget 

wget 

tar xvjf scws-dict-chs-gbk.tar.bz2

tar xvjf scws-dict-chs-utf8.tar.bz2

php扩展安装

1.编译安装

cd scws-1.2.1;cd phpext;

phpize

./configure --with-scws=/usr/local --with-php-config=php安装路径/bin/php-config

sudo make && make install

2.在 php.ini 中加入以下内容

[scws]

; 注意请检查 php.ini 中的 extension_dir 的设定值是否正确, 否则请将 extension_dir 设为空,

; 再把 extension = scws.so 或 php_scws.dll(win) 指定绝对路径。

extension = scws.so

scws.default.charset = gbk

scws.default.fpath = /usr/local/scws/etc

3.命令行下执行 php -m 就能看到 scws 了,phpinfo() 也会包含关于 scws 的信息。

DEMO

$so = scws_new();

// 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件

$so->set_charset('utf8'); // $so->set_charset('gbk');

$so->set_dict('/usr/local/scws/etc/dict.utf8.xdb'); //设置分词所用词典(此处使用utf8的词典)

$so->set_rule('/usr/local/scws/etc/rules.utf8.ini ');//设置分词所用规则

//分词前去掉标点符号

$so->set_ignore(true);

//是否复式分割,如“中国人”返回“中国+人+中国人”三个词。

$so->set_multi(true);

//设定将文字自动以二字分词法聚合

$so->set_duality(true);

//要进行分词的语句

$words = array();

//var_dump($so->get_result());

while ($tmp = $so->get_result())

{

foreach ($tmp as $val) {

if(!new_in_array($val, $words,'word')){

$words[] = array(

'word' => $val['word'],

'weight' => $val['idf'],

);

}

}

}

$so->close();

var_dump($words);

//递归分词

function new_in_array($need,$array,$column=''){

$flag = false;

foreach ($array as $val) {

if($val[$column] == $need[$column]){

$flag = true; break;

}

}

return $flag;

}

SCWS命令行使用

scws 这是分词的命令行工具,执行 scws -h 可以看到详细帮助说明。

Usage: scws [options] [[-i] input] [[-o] output]

-i string|file 要切分的字符串或文件,如不指定则程序自动读取标准输入,每输入一行执行一次分词

-o file 切分结果输出保存的文件路径,若不指定直接输出到屏幕

-c charset 指定分词的字符集,默认是 gbk,可选 utf8

-r file 指定规则集文件(规则集用于数词、数字、专有名字、人名的识别)

-d file[:file2[:...]] 指定词典文件路径(XDB格式,请在 -c 之后使用)

自 1.1.0 起,支持多词典同时载入,也支持纯文本词典(必须是.txt结尾),多词典路径之间用冒号(:)隔开,

排在越后面的词典优先级越高。

文本词典的数据格式参见 scws-gen-dict 所用的格式,但更宽松一些,允许用不定量的空格分开,只有是必备项目,

其它数据可有可无,当词性标注为“!”(叹号)时表示该词作废,即使在较低优先级的词库中存在该词也将作废。

-M level 复合分词的级别:1~15,按位异或的 1|2|4|8 依次表示 短词|二元|主要字|全部字,缺省不复合分词。

-I 输出结果忽略跳过所有的标点符号

-A 显示词性

-E 将 xdb 词典读入内存 xtree 结构 (如果切分的文件很大才需要)

-N 不显示切分时间和提示

-D debug 模式 (很少用,需要编译时打开 --enable-debug)

-U 将闲散单字自动调用二分法结合

-t num 取得前 num 个高频词

-a [~]attr1[,attr2[,...]] 只显示某些词性的词,加~表示过滤该词性的词,多个词性之间用逗号分隔

-v 查看版本

scws-gen-dict 词典转换工具

Usage: scws-gen-dict [options] [-i] dict.txt [-o] dict.xdb

-c charset 指定字符集,默认为 gbk,可选 utf8

-i file 文本文件(txt),默认为 dict.txt

-o file 输出 xdb 文件的路径,默认为 dict.xdb

-p num 指定 XDB 结构 HASH 质数(通常不需要)

-U 反向解压,将输入的 xdb 文件转换为 txt 格式输出 (TODO)文本词典格式为每行一个词,各行由 4 个字段组成,字段之间用若干个空格或制表符(\t)分隔。 含义(其中只有 是必须提供的),# 开头的行视为注释忽略不计:

#

新词条 12.0 2.2 n

性能指标

在 FreeBSD 6.2 系统,单核单 CPU 至强 3.0G 的服务器上,测试长度为 80,535 的文本。 用附带的命令行工具耗时将约 0.17 秒,若改用 php 扩展方式调用,则耗时约为 0.65 秒。

分词精度 95.60%,召回率 90.51% (F-1: 0.93)

本作品采用《CC 协议》,转载必须注明作者和本文链接

七述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值