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基础知识:类与对象(4) 范围解析操作符(::)
Dec 13 PHP
UCenter Home二次开发指南
May 28 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
常用PHP框架功能对照表
Oct 23 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
PHP扩展开发入门教程
Feb 26 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 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生成唯一订单号的方法汇总
2015/04/16 PHP
分享3个php获取日历的函数
2015/09/25 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
JavaScript 高级语法介绍
2009/06/15 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
9种改善AngularJS性能的方法
2017/11/28 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
应用化学专业职业生涯规划书
2013/12/31 职场文书
转党组织关系介绍信
2014/01/08 职场文书
高三高考决心书
2014/03/11 职场文书
精彩的广告词
2014/03/19 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
财会专业大学生求职信
2014/09/26 职场文书
军人离婚协议书样本
2014/10/21 职场文书
instantclient客户端 连接oracle数据库
2022/04/26 Oracle