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中在数据库中保存Checkbox数据(2)
Oct 09 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
php使用类继承解决代码重复的问题
Feb 11 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
php检查页面是否被百度收录
Oct 28 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
Sep 22 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
PHP设计模式之简单工厂和工厂模式实例分析
Mar 25 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 PHP
Swoole扩展的6种模式深入详解
Mar 04 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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
javascript新手语法小结
2008/06/15 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
javascript event 事件解析
2011/01/31 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
解析Python编程中的包结构
2015/10/25 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
Python 在函数上添加包装器
2020/07/28 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
小学毕业典礼演讲稿
2014/09/09 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
2015年司法所工作总结
2015/04/27 职场文书
员工表扬信怎么写
2015/05/05 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
关于使用Redisson订阅数问题
2022/01/18 Redis
德劲DE1105机评
2022/04/05 无线电