php 一元分词算法


Posted in PHP onNovember 30, 2009
/** 
* 一元分词算法 
* UTF8编码下一个字符如果首字符ASCII码不大于192则只占1个字节 
* 如果首字符ASCII码大于192小于224则占用2个字节,否则占用3个字节 
* 一元分词需要在mysql的my.ini文件中增加 ft_min_word_len=1 
* 可以使用mysql查询语句 show variables like '%ft%' 查看mysql全文搜索相关设置 
* 
* @access global 
* @param string $str 
* @param boolean $unique 是否去除重复值 
* @param boolean $merge 是否合并附加值 
* @return array 
*/ 
function seg_word($str,$unique=false,$merge=true) 
{ 
$str = trim(strip_tags($str)); 
$strlen = strlen($str); 
if($strlen == 0) return array(); 
$spc = ' '; 
//按需增加需要过滤的字符 
$search = array(',', '/', '\\', '.', ';', ':', '\'', '!', '~','"', '`', '^', '(', ')', '?', '-', "\t", "\n", '\'', '<', '>', "\r", "\r\n", '\$', '&', '%', '#', '@', '+', '=', '{', '}', '[', ']', ')', '(', '.', '。', ',', '!', ';', '“', '”', '‘', ''', '[', ']', '、', '—', ' ', '《', '》', '-', '…', '【', '】',':'); 
$numpairs = array('1'=>'一','2'=>'二','3'=>'三','4'=>'四','5'=>'五','6'=>'六','7'=>'七','8'=>'八','9'=>'九','0'=>'零'); 
$str = alab_num($str); 
$str = str_replace($search,' ',$str); 
$ord = $i = $k = 0; 
$prechar = 0;// 0-空白 1-英文和符号 2-中文 
$result = array(); 
$annex = array(); 
while($ord = ord($str[$i])) 
{ 
//1字节字符 
if ($ord <= 0xC0 ) 
{ 
//去除空字符串 
if($ord < 33) { 
$prechar=0; 
$i++; 
$k++; 
continue; 
} 
//附加中文大写数字转换 
if(isset($numpairs[$str[$i]])) { 
$annex[]=$numpairs[$str[$i]]; 
} 
//如果前面是中文 
if( $prechar == 2 ){ 
$result[++$k] = $str[$i]; 
} 
else { 
$result[$k] .= $str[$i]; 
} 
$prechar = 1; 
$i++; 
} 
else //2-3字节字符(中文) 
{ 
if($ord < 0xE0) 
$step = 2; 
else 
$step = 3; 
$c = substr($str,$i,$step); 
if(false !== $key = array_search($c,$numpairs)){ 
$annex[] = $key; 
} 
if ($prechar != 0) { 
$result[++$k] = $c; 
} 
else { 
$result[$k] .= $c; 
} 
$prechar = 2; 
$i+=$step; 
} 
} 
$result = $merge ? array_merge($result,$annex) : $result ; 
return $unique ? array_unique($result) : $result ; 
}
PHP 相关文章推荐
php discuz 主题表和回帖表的设计
Mar 13 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
php验证手机号码
Nov 11 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
PHP实现批量删除(封装)
Apr 28 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 #PHP
php读取html并截取字符串的简单代码
Nov 30 #PHP
php 获取客户端的真实ip
Nov 30 #PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 #PHP
php中$this-&amp;gt;含义分析
Nov 29 #PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 #PHP
Ajax+PHP 边学边练之四 表单
Nov 27 #PHP
You might like
PHP时间戳使用实例代码
2008/06/07 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python 3 判断2个字典相同
2019/08/06 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
Python错误的处理方法
2020/06/23 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
园长自我鉴定
2013/10/06 职场文书
大学生军训自我评价分享
2013/11/09 职场文书
后勤部长岗位职责
2013/12/14 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript