`
dcj3sjt126com
  • 浏览: 1871373 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP开源中文分词 pscws4

    博客分类:
  • PHP
阅读更多

SCWS 是 Simple Chinese Words Segmentation 的缩写,即简易中文分词系统。

这是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。词是汉语的基本语素单位,而书写的时候不像英语会在词 之间用空格分开,所以如何准确而又快速的分词一直是中文分词的攻关难点。

SCWS 在概念上并无创新成分,采用的是自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些中小型搜索引擎、关键字提取等场合运用。 SCWS 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码,切词效率高。

[推荐]首个搭载 SCWS 分词系统的中小型站内全文检索解决方案 - FTPHP!

以下为本人在win03平台下,php5.2.5+apache2.2.11平台下推荐的方法,特别的简单,用的是gbk的字库的

1.首先从http://www.ftphp.com/scws/download.php下载相关压缩包 .

php_scws.dll (1.1.1)

php_scws.dll 是由 ben 移植用于 Windows 平台下的 PHP 动态扩展库,请根据您使用的 php 版本下载,编译环境均为:VC6 x86 Thread Safe。

[For PHP-4.4.x (20KB)]  [For PHP-5.2.x (20KB)]  [For PHP-5.3.x (20KB)]  [详细安装说明]  [PHP扩展-API 文档]

XDB 词典文件

XDB 格式的词典文件,可用于 SCWS-1.x.x 和 PSCWS4,不可用于 PSCWS23。
此为通用词典文件,定制词典或其它服务请查看服务支持页面。

[简体中文 (GBK) (3.84MB, 28万词, 2010/03/19更新)]
[简体中文 (UTF-8) (3.9MB, 28万词, 2010/03/19更新)]
[繁 体中文(UTF-8) (1.21MB, 10万词)]

PSCWS23

纯 PHP 开发的 SCWS 第二版和第三版,仅支持 GBK 字符集,速度较快,推荐在全 PHP 环境中使用,已含专用 xdb 词典一部。

[立即下载: pscws23-20081221.tar.bz2 (2.79MB)] [说明文档]

规则集文件

SCWS 及 PSCWS4 通用的规则集文件,用于识别人名、地名、数字年代等。内含简体GBK、繁体UTF8、简体UTF8三个文件。
一般不需要单独下载,随 scws 一起发布的源码包中已经包含这些文件。

[立即下载: scws-rules-all.zip (6.67KB)]

2.将下面下载的几个压缩文件解压,将scws_1.1.1_win32_php-5.2.x.zip包里的php_scws.dll文件放在d:/php/ext目录里,注意这个地方需要根据你自己的php的环境来存放.

3.在d:/php目录里新建 scws/etc文件夹,将规则集文件cws-rules-all.zip里的ini文件放在这里,我用的时候有三个的,再将解压后的词典件dict.xdb也放在这里.

4.修改c:/windows/php.ini文件,在配置文件的最后面添加:

[scws]
extension = php_scws.dll
scws.default.charset = gbk
scws.default.fpath = "d:/php/scws/etc"

这三行,重启apache即可.可以通过查看phpino信息,来查看是否启用了scws扩展.

以上配置基本完成了,特别的简单的吧,呵呵!

如果需要查看演示的话只需要将从网站上下载的演示包放在一个站点的根目录里就可以了.如http://www.ftphp.com/scws/demo/v4.php,我下的v4版本里的演示和官方网站上的演示有些出入的,你要以通过http://www.ftphp.com/scws/demo/v4.php?source来复制一下php代码,保存到本地文件即可了.

以下为本人的用的配置信息,点击下载scws配置,记得将最后的的_.txt去掉,实际上是一个rar的压缩包的.

 

配置文件如下:

 

<?php
// hightman, SCWS v4 (built as php_extension)
// 2007/06/02
//
// view the source code
if (isset($_SERVER['QUERY_STRING']) 
    && !strncasecmp($_SERVER['QUERY_STRING'], 'source', 6))
{
    highlight_file(__FILE__);
    exit(0);
}

// try to count the time
function get_microtime()
{
    list($usec, $sec) = explode(' ', microtime()); 
    return ((float)$usec + (float)$sec); 
}
$time_start = get_microtime();

// demo data
if (!isset($_REQUEST['mydata']) || empty($_REQUEST['mydata']))
    $mydata = file_get_contents('sample.txt');    
else
{
    $mydata = & $_REQUEST['mydata'];
    if (get_magic_quotes_gpc())
        $mydata = stripslashes($mydata);
}

// other options
$ignore = $showa = $stats = $duality = false;

// 是否清除标点符号
if (isset($_REQUEST['ignore']) && !strcmp($_REQUEST['ignore'], 'yes'))
{
    $ignore = true;
    $checked_ignore = ' checked';
}

// 是否散字自动二元
if (isset($_REQUEST['duality']) && !strcmp($_REQUEST['duality'], 'yes'))
{
    $duality = true;
    $checked_duality = ' checked';
}

// 是否标注词性
if (isset($_REQUEST['showa']) && !strcmp($_REQUEST['showa'], 'yes'))
{
    $showa = true;
    $checked_showa = ' checked';
}

// 是转看统计表
if (isset($_REQUEST['stats']) && !strcmp($_REQUEST['stats'], 'yes'))
{
    $stats = true;
    $checked_stats = ' checked';
}

// 是否复合分词?
$multi = 0;
if (isset($_REQUEST['multi']) && is_array($_REQUEST['multi'])){
    foreach ($_REQUEST['multi'] as $mval) $multi |= intval($mval);
}
$mtags = array('最短词' => 1, '二元' => 2, '重要单字' => 4, '全部单字' => 8);

$xattr = &$_REQUEST['xattr'];
if (!isset($xattr)) $xattr = '~v';
$limit = &$_REQUEST['limit'];
if (!isset($limit)) $limit = 10;

// do the segment
$cws = scws_new();
$cws->set_charset('gbk');
$cws->set_rule(ini_get('scws.default.fpath') . '/rules.ini');
$cws->set_dict(ini_get('scws.default.fpath') . '/dict.xdb');

//
// use default dictionary & rules
//
$cws->set_duality($duality);
$cws->set_ignore($ignore);
$cws->set_multi($multi);
$cws->send_text($mydata);
?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=gbk">
<title>PHP简易中文分词(SCWS) 第4版在线演示 (by hightman)</title>
<style type="text/css">
<!--
td, body    { background-color: #efefef; font-family: tahoma; font-size: 14px; word-break: break-all; }
.demotx        { font-size: 12px; width: 100%; height: 140px; }
small        { font-size: 12px; }
//-->
</style>
</head>
<body>
<h3>
  <font color=red>PHP简易中文分词(SCWS)</font>
  <font color=blue>第4版(GBK)</font> - 在线演示 (by hightman)
</h3>  
基本功能: 根据词频词典较为智能的中文分词,支持规则识别人名、地区等。(<a href="v48.php">UTF-8点这里</a> <a href="v48.cht.php">繁体版</a>)<br />
<a href="http://www.xunsearch.com" target="_blank">推荐看看,结合 scws + xapian 构建的开源全文搜索引擎 xunsearch !!</a> <hr />

<table width=100% border=0>
  <tr>
    <form method=post>
    <td width=100%>
      <strong>请输入文字点击提交尝试分词: </strong> <br />
      <textarea name=mydata cols=60 rows=14 class=demotx><?php echo $mydata; ?></textarea>
      <small>
        <span style="color:#666666;">        
        <strong>[复合分词选项]</strong>
<?php foreach ($mtags as $mtag => $mval) { ?>
        <input type=checkbox name="multi[]" value=<?php echo $mval . " " . (($multi & $mval) ? " checked" : "");?>><?php echo $mtag;?>&nbsp;
<?php } ?>
        </span>
        <br />
        <input type=checkbox name=ignore value="yes"<?php echo $checked_ignore;?>> 清除标点符号
        &nbsp;
        <input type=checkbox name=duality value="yes"<?php echo $checked_duality;?>> 散字二元
        &nbsp;
        <input type=checkbox name=showa value="yes"<?php echo $checked_showa;?>> <font color=green>标注词性</font>
        &nbsp;
        <input type=checkbox name=stats value="yes"<?php echo $checked_stats;?>> <font color=red>只看统计</font>
        <input type=text name=limit size=2 value="<?php echo intval($limit);?>">个
        &nbsp;
        统计词性: 
        <input type=text name=xattr size=8 value="<?php echo htmlspecialchars($xattr);?>">(多个用,分开 以~开头表示不包含)
      </small>
      <input type=submit>
      </td>
      </form>
    </tr>
    <tr>
      <td><hr /></td>
    </tr>
    <tr>
      <td width=100%>
        <strong>分词结果(原文总长度 <?php echo strlen($mydata); ?> 字符) </strong>
        (<a href="http://bbs.xunsearch.com/forumdisplay.php?fid=8" target="_blank">这次分词结果不对,点击汇报</a>)
        <br />
        <textarea cols=60 rows=14 class=demotx readonly style="color:#888;">
<?php
if ($stats == true)
{
    // stats
    printf("No. WordString               Attr  Weight(times)\n");
    printf("-------------------------------------------------\n");
    $list = $cws->get_tops($limit, $xattr);
    $cnt = 1;
    settype($list, 'array');
    foreach ($list as $tmp)
    {
        printf("%02d. %-24.24s %-4.2s  %.2f(%d)\n",
            $cnt, $tmp['word'], $tmp['attr'], $tmp['weight'], $tmp['times']);
        $cnt++;
    }
}
else
{
    // segment
    while ($res = $cws->get_result())
    {
        foreach ($res as $tmp)
        {
            if ($tmp['len'] == 1 && $tmp['word'] == "\r")
                continue;
            if ($tmp['len'] == 1 && $tmp['word'] == "\n")
                echo $tmp['word'];
            else if ($showa)
                printf("%s/%s ", $tmp['word'], $tmp['attr']);
            else
                printf("%s ", $tmp['word']);
        }
        flush();
    }
}

$cws->close();
$time_end = get_microtime();
$time = $time_end - $time_start;
?>
        </textarea>
        <small>
          分词耗时: <?php echo $time; ?>秒
          <a href="../">返回scws主页</a>或直接<a href="?source" target="_blank">查看源码</a> Powered by <?php echo scws_version();?>
        </small>
    </td>
  </tr>
</table>
</body>
</html>

 

分享到:
评论

相关推荐

    基于HTTP协议的开源中文分词系统,php演示

    5. **HTTPCWS**:虽然具体实现细节未提供,但我们可以推测HTTPCWS是这个开源分词系统的名称,可能包括一个服务器端组件(处理HTTP请求和执行分词)以及可能的客户端库(如PHP示例代码)。 6. **PHP演示**:提供的`...

    PHP中文分词扩展(demoPHPCWS)

    中文分词是将连续的汉字序列切分成具有语义的词汇单元,它是自然语言处理(NLP)的基础,对于信息检索、文本分析、机器翻译等领域至关重要。`demoPHPCWS`是一个专门用于PHP的中文分词扩展,它旨在帮助开发者更高效地...

    pscws23-20081221.tar.bz2【中文分词】

    SCWS 是一套开源并且免费的中文分词系统,提供优秀易用的 PHP 接口。 项目主页:http://www.ftphp.com/scws PSCWS 的第二版和第三版调用接口完全一致,词典也通用,仅仅是内部分词算法不一样。其中第二版 采用的是...

    php 分词(切词)

    在PHP中,实现分词功能可以借助开源库,如PHPCore的`PSCWS`、`Snownlp`或`hanLP`等,它们提供了便捷的API接口供开发者使用。同时,PHP自身也有字符串处理函数,如`str_split()`可以简单地将字符串按字符分割,但这并...

    中文分词搜索,商城搜索分词

    2. pscws4.class.php:PSCWS(普什中文分词系统)是一个开源的PHP分词组件,它支持多模式分词,包括精确模式、全模式、简明模式和搜索引擎模式,适应不同场景的需求。 3. xdb_r.class.php:这部分可能是用于读取扩展...

    基于PHP的中文分词代码 UTF-8.zip

    4. **词典构建**:中文分词效果很大程度上取决于词典的质量。词典通常包含常用词汇、专有名词、成语等,并可能包含词语的词性标注。开发者可能需要根据实际需求定制或扩展词典。 5. **性能优化**:在处理大量中文...

    SCWS 中文分词

    SCWS中文分词系统是一种基于PHP的开源中文分词组件,其全称为Simple Chinese Word Segmentation。这个系统设计的目标是为了解决在处理中文文本时遇到的分词问题,因为中文句子不像英文那样以空格作为单词之间的边界...

    基于PSCWS4词库的PHP中文分词工具.zip

    1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担 2. 部分字体及插图等来自网络,若是侵权请联系删除,本人不对所涉及的版权问题或内容负法律责任。收取的费用仅用于整理和收集资料耗费时间的...

    thinkphp 3.1.3 分词完整版

    在现代互联网应用中,中文分词是处理中文文本的关键步骤,它能够将连续的汉字序列分割成具有独立语义的词语,为信息检索、自然语言处理等提供基础。ThinkPHP 3.1.3 分词完整版正是这样一款专为PHP开发者设计的高效...

    scws23-php

    SCWS 是一套开源并且免费的中文分词系统,提供优秀易用的 PHP 接口。 项目主页:http://www.ftphp.com/scws PSCWS 的第二版和第三版调用接口完全一致,词典也通用,仅仅是内部分词算法不一样。其中第二版 采用的是...

    php实现自动获取生成文章主题关键词功能的深入分析

    针对PHP环境,介绍了PSCWS和HTTPCWS两种实现方式,其中HTTPCWS是通过API调用ICTCLAS算法实现初步分词,再结合逆向最大匹配算法对结果进行词语合并处理,并对分词结果进行标点符号过滤。 4. 与词库的配合使用: 分词...

Global site tag (gtag.js) - Google Analytics