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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
YII实现分页的方法
Jul 09 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
php生成酷炫的四个字符验证码
Apr 22 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
php实现文件预览功能
May 23 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 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的FTP学习(三)
2006/10/09 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
深入理解node.js http模块
2018/01/24 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
python实现隐马尔科夫模型HMM
2018/03/25 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
公司JAVA开发面试题
2015/04/02 面试题
电子商务专业学生的自我鉴定
2013/11/28 职场文书
工作失误检讨书范文
2015/01/26 职场文书
办公室文员岗位职责
2015/02/04 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
如何写辞职信
2015/05/13 职场文书
感恩的心主题班会
2015/08/12 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
python 批量压缩图片的脚本
2021/06/02 Python
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL