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中Date获取时间不正确怎么办
Jun 05 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
Mar 01 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
Yii入门教程之目录结构、入口文件及路由设置
Nov 25 PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 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面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
Python中字符编码简介、方法及使用建议
2015/01/08 Python
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
python 中xpath爬虫实例详解
2019/08/26 Python
python中删除某个元素的方法解析
2019/11/05 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
单位办理社保介绍信
2014/01/10 职场文书
给领导的致歉信范文
2014/01/13 职场文书
音乐教学随笔感言
2014/02/19 职场文书
财务科科长岗位职责
2014/03/10 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
政风行风评议整改方案
2014/09/15 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
小学新课改心得体会
2016/01/22 职场文书