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 相关文章推荐
初探PHP5
Oct 09 PHP
PHP中的日期处理方法集锦
Jan 02 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
php 获取页面中指定内容的实现类
Jan 23 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 PHP
PHP+MySQL修改记录的方法
Jan 21 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
PHP实现图片压缩
Sep 09 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 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自定义的格式化时间示例代码
2013/12/05 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
微信小程序实现登录遮罩效果
2018/11/01 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
详解jquery和vue对比
2019/04/16 jQuery
vue+element实现打印页面功能
2019/05/20 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
详解Python Socket网络编程
2016/01/05 Python
用matplotlib画等高线图详解
2017/12/14 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
pandas的resample重采样的使用
2020/04/24 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
医学专业毕业生推荐信
2013/11/14 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
公司职员入党自传书
2015/06/26 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
table不让td文字溢出操作方法
2022/12/24 HTML / CSS