PHP分词

这是一个关于PHP中文分词的示例代码,使用SCWS库进行分词操作。文章提供了CLI和Web两种环境的参数设置,并展示了如何读取不同格式的词典文件,以及如何开启人名识别和清除标点符号等功能。
摘要由CSDN通过智能技术生成

PHP分词

转载请标明出处: http://blog.csdn.net/mozillafirefox/ 本文来自 CSDN 博客。x

<?php

/* ----------------------------------------------------------------------- */

   PHP- 简易中文分词 SCWS ver 3.1/2.1 实例演示 )

  

双向根据词频取较高之分法    * 基于词频词典逐点搜索最长词 .

   -----------------------------------------------------------------------

   作者 : 马明练 ( hightman MSN: MingL_Mar@msn.com php-QQ 群 : 17708754

   网站 : http://php.twomice.net

   时间 : 2006/03/05

希望有好的建议及用途希望能进一步交流    目的 : 学习研究交流用 ..

   -----------------------------------------------------------------------

   运行环境 : PHP 4.x.* x>0 编译需要 --enable-dba --with-[cdb|gdbm]

/* ----------------------------------------------------------------------- */

/**

 * 检查源码的参数 <*.php?source>

 */

if isset $_SERVER['QUERY_SPING']

'source'     && !strcasecmp $_SERVER['QUERY_SPING'].

{

    highlight_fil __FILE__ ;

    exit 0 ;

}

/**

 * 实例进行

 */

// 尝试计算实列运算时间

function get_microtim

{

$sec = explod ' ',    list $usec. microtim ;

    return float $usec + float $sec ;

}

$time_start = get_microtim ;

// 分词结果之回调函数 param: 分好的词组成的数组 )

function words_cb $ar

{

$ar     echo implod ' '.;

    flush ;

}

// 实例化前的参数指定与读取

$dict = 'dict/dict.cdb';

$mydata  = NULL;    // 待切数据

$version = 3;        // 采用版本

$autodi = false;    // 否识别名字

$ignore  = false;    // 否忽略标点

$debug   = false;    // 否为除错模式

$is_cli  = php_sapi_nam == 'cli' ;    // 否为 cli 运行环境

// 根据不同版本的环境读取参数设置

if $is_cli

{

    $argc = $_SERVER['argc'];

    for $i = 1; $i < $argc; $i++

    {

        $optarg = $_SERVER['argv'][$i];

"--",        if !strncmp $optarg. 2

        {

2             $cmp = substr $optarg.;

"help"             if !strcasecmp $cmp.

            {

                $mydata = NULL;

                break;

            }

"autodis"             els if !strcasecmp $cmp.

                $autodi = true;

"ignore"             els if !strcasecmp $cmp.

                $ignor = true;

"v2"             els if !strcasecmp $cmp.

                $version = 2;

"debug"             els if !strcasecmp $cmp.

                $debug = true;

"dict"             els if !strcasecmp $cmp.

            {

                $i++;

                $dict = $_SERVER['argv'][$i];

            }

        }

        els if is_nul $mydata

            $mydata = trim $optarg ;

        if !is_nul $mydata && is_fil $mydata

            $mydata = @file_get_cont $mydata ;

    }

}

else

{

    // 局部参数选项

    $checked_ignor = $checked_autodi = $checked_v2 = '';

   

    // 否指定有第 2 版

    if isset $_REQUEST['version'] && $_REQUEST['version'] == 2

    {

        $version = 2;

        $checked_v2 = ' selected';

    }

    // 否指定一个词典格式

    $selected_gdbm = $selected_text = $selected_sqlit = '';

    if isset $_REQUEST['dict']

    {

        if $_REQUEST['dict'] == 'gdbm'

        {

            $dict = 'dict/dict.gdbm';

            $selected_gdbm = ' selected';

        }

        els if $_REQUEST['dict'] == 'text'

        {

            $dict = 'dict/cwords.txt';

            $selected_text = ' selected';

        }

        els if $_REQUEST['dict'] == 'sqlite'

        {

            $dict = 'dict/dict.sqlite';

            $selected_sqlit = ' selected';

        }

        else

        {

            $_REQUEST['dict'] = 'cdb';

        }

    }

    // 否开启人名识别 缺省关闭 )

'yes'     if isset $_REQUEST['autodis'] && !strcmp $_REQUEST['autodis'].

    {

        $autodi = true;

        $checked_autodi = ' checked';

    }

    // 否清除标点符号

'yes'     if isset $_REQUEST['ignore'] && !strcmp $_REQUEST['ignore'].

    {

        $ignor = true;

        $checked_ignor = ' checked';

    }

    // 否开启 debug

'yes'     if isset $_REQUEST['debug'] && !strcmp $_REQUEST['debug'].

    {

        $debug = true;

        $checked_debug = ' checked';

    }

    // 切分数据

    if !isset $_REQUEST['mydata'] || empti $_REQUEST['mydata']

    {

        $mydata = @file_get_cont 'sample.txt' ;

    }

    else

    {

        $mydata = & $_REQUEST['mydata'];

        if get_magic_quotes_gpc

            $mydata = stripslash $mydata ;

    }

}

// 清除最后的 /r/n/t

if !is_nul $mydata

    $mydata = trim $mydata ;

// 实例化分词对像 ( mydata 非空 )

$object = 'my_SimpledCWS' . $version;

requir $object . '.class.php' ;

   

$cw = new $object $dict ;

$cws->set_ignore_mark $ignor ;

$cws->set_autodi $autodi ;

$cws->set_debug $debug ;

?>

<?php if !$is_cli { ?>

<html>

<head>

<title>PHP 简易中文分词 ( SCWS 第 <?php echo $version; ?> 版在线演示 by hightman </title>

<meta http-equiv="Content-type" content="text/html; charset=gbk">

<styl type="text/css">

<!--

body    { background-color: #efefef; font-family: tahoma; font-size: 14px; td.}

.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> 第 <?php echo $version; ?> 版 </font> - 线演示 by hightman

</h3> 

基本功能 : 根据词频词典进行机械分词、中外人名智能识别 词典格式 : gdbm/cdb 等 )

<hr />

<tabl width=100% border=0>

  <tr>

    <form method=post>

    <td width=100%>

      <strong> 请输入文字点击提交尝试分词 : </strong> <br />

      <textarea name=mydata cols=60 rows=8 class=demotx><?php echo $mydata; ?></textarea>

      <small>

        <input type=checkbox name=autodi value="yes"<?php echo $checked_autodis;?>> 智能识别人名

        &nbsp;

        <input type=checkbox name=ignor value="yes"<?php echo $checked_ignore;?>> 清除标点符号

        &nbsp;

        <input type=checkbox name=debug value="yes"<?php echo $checked_debug;?>> debug v2

        &nbsp;

        <br />

        词典格式 :

        <select name=dict size=1>       

        <option value=cdb>CDB</option>

        <option value=gdbm<?php echo $selected_gdbm; ?>>GDBM</option>

        <option value=text<?php echo $selected_text; ?>>Text</option>

        <option value=sqlite<?php echo $selected_sqlite; ?>>SQLite2.x</option>

        </select>

        &nbsp;

        尝试采用第

        <select name=vers size=1 style="color: red; font-weight: bold;">

          <option value=3>3</option>

          <option value=2<?php echo $checked_v2;?>>2</option>

        </select>

        版分词算法

        &nbsp;&nbsp;

      </small>

      <input type=submit>

      </td>

      </form>

    </tr>

    <tr>

      <td><hr /></td>

    </tr>

    <tr>

      <td width=100%>

        <strong> 分词结果 ( 原文总长度 <?php echo strlen $mydata ; ?> 字符 ) </strong>

        <br />

        <textarea cols=60 rows=8 class=demotx readonly>

<?php } els { ?>

_____________________________________________________________________

PHP 简易中文分词程序 ( SCWS - 第 <?php echo $version; ?> 版 - by hightman

_____________________________________________________________________

双向根据词频取较高之分法 1. 基于词频词典逐点搜索最长词 .

2. 用法 : <?php echo $_SERVER['argv'][0]; ?> [ 选项 ] <string|file>

3. 选项 : --autodis    打开人名识别

        --ignore     清除结果中的标点符号

        --v2         使用第 2 版分词算法 ( 缺省第 3 版 )

后缀 ( .cdb|.gdbm|.txt|.sqlite         --dict <file> 直接指定词典文件 .

        --help       显示本页帮助文件

词之间以空格分隔 4. 结果 : 直接输出分词结果 .

_____________________________________________________________________

<?php } ?>

<?php

分词结果数组执行 words_cb // 执行切分 .

'words_cb' $cws->segment $mydata.;

// 切分时间统计

$time_end = get_microtim ;

$time = $time_end - $time_start;

// 以下显示结果

?>

<?php if !$is_cli { ?>

      </textarea>       

      <small>

        分词耗时 : <?php echo $time; ?> 秒 .

        词典查询次数 : <?php echo $cws->_dict->query_times; ?> 次

      </small>

    </td>

  </tr>

</table>

<hr />

<small>

供研究学习交流   注 : 本顺序代码及相关词典免费开放下载 ..

  参见网页 <a href=http://php.twomice.net target=_blank>http://php.twomice.net</a>

  或直接 <a href="?source" target="_blank"> 检查源码 </a>

</small>

</body>

</html>

<?php } els if !empti $mydata { ?>

_____________________________________________________________________

耗时 : <?php echo $time; ?> 秒 , 总长 : <?php echo strlen $mydata ; ?> 字符 . 查词次数 : <?php echo $cws->_dict->query_times; ?> 次

<?php } ?>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值