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 相关文章推荐
mysql建立外键
Nov 25 PHP
php字符串截取中文截取2,单字节截取模式
Dec 10 PHP
PHP字符串 ==比较运算符的副作用
Oct 21 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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去除头尾空格的2种方法
2015/03/16 PHP
帝国cms目录结构分享
2015/07/06 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
python正则实现提取电话功能
2018/02/24 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
求职自荐信怎么写
2014/03/06 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
工作检讨书大全
2015/01/26 职场文书
亮剑观后感600字
2015/06/05 职场文书
婚庆主持词大全
2015/06/30 职场文书
创业计划书之服装
2019/10/07 职场文书