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中,文件上传
Dec 06 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
PHP 模拟登陆MSN并获得用户信息
May 16 PHP
javascript 小型动画组件与实现代码
Jun 02 PHP
php使用sql数据库 获取字段问题介绍
Aug 12 PHP
php网站地图生成类示例
Jan 13 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
php数据库备份还原类分享
Mar 20 PHP
laravel 5 实现模板主题功能(续)
Mar 02 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
php 如何设置一个严格控制过期时间的session
May 05 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
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
Yii2增加验证码步骤详解
2016/04/25 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
python爬虫之百度API调用方法
2017/06/11 Python
python http基本验证方法
2018/12/26 Python
Python中super函数用法实例分析
2019/03/18 Python
python numpy 反转 reverse示例
2019/12/04 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
文明青少年标兵事迹材料
2014/01/28 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
日化店促销方案
2014/03/26 职场文书
综治宣传月活动总结
2014/04/28 职场文书
个人收入证明格式
2015/06/24 职场文书