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无限分类的类
Jan 02 PHP
php中文字母数字验证码实现代码
Apr 25 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
php旋转图片90度的方法
Nov 07 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
Laravel 5 学习笔记
Mar 06 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
php实现的农历算法实例
Aug 11 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 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
多重?l件?合查?(二)
2006/10/09 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
2019/03/25 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
Prototype Date对象 学习
2009/07/12 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
Python入门篇之对象类型
2014/10/17 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
Python3并发写文件与Python对比
2019/11/20 Python
python实现加密的方式总结
2020/01/19 Python
python实现打砖块游戏
2020/02/25 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
大学生职业生涯规划范文
2014/01/08 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
文案策划求职信
2014/04/14 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
Nginx报404错误的详细解决方法
2022/07/23 Servers