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;?>> 智能识别人名
<input type=checkbox name=ignor value="yes"<?php echo $checked_ignore;?>> 清除标点符号
<input type=checkbox name=debug value="yes"<?php echo $checked_debug;?>> debug v2
<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>
尝试采用第
<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>
版分词算法
</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 } ?>