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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
discuz目录文件资料汇总
Dec 30 PHP
Symfony核心类概述
Mar 17 PHP
PHP函数import_request_variables()用法分析
Apr 02 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 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
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
javascript测试题练习代码
2012/10/10 Javascript
jQuery图片轮播的具体实现
2013/09/11 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
nodejs教程之入门
2014/11/21 NodeJs
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
python如何安装下载后的模块
2020/07/03 Python
python matplotlib库的基本使用
2020/09/23 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
法律工作求职自荐信
2013/10/31 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
2014年建筑工作总结
2014/11/26 职场文书
小学生学习保证书
2015/02/26 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
交通事故起诉书
2015/05/19 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js