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 相关文章推荐
在Windows版的PHP中使用ADO
Oct 09 PHP
杏林同学录(七)
Oct 09 PHP
PHP开发入门教程之面向对象
Dec 05 PHP
PHP下一个非常全面获取图象信息的函数
Nov 20 PHP
php 随机生成10位字符代码
Mar 26 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
Mar 19 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
PHP中的self关键字详解
Jun 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
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
JS 时间显示效果代码
2009/08/23 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
应届生.NET方向面试题
2015/05/23 面试题
优秀女职工事迹材料
2014/02/06 职场文书
庆元旦活动总结
2014/07/09 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏