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 相关文章推荐
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
PHP删除数组中特定元素的两种方法
Jul 02 PHP
浅谈php和.net的区别
Sep 28 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
php递归删除指定文件夹的方法小结
Apr 20 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
Sep 30 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
Laravel创建数据库表结构的例子
Oct 09 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
Python如何访问字符串中的值
2020/02/09 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
python和go语言的区别是什么
2020/07/20 Python
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
个人四风对照检查材料
2014/09/26 职场文书
信息合作协议书
2014/10/09 职场文书
事业单位年度考核评语
2014/12/31 职场文书
离婚案件上诉状
2015/05/23 职场文书
新学期开学标语2015
2015/07/16 职场文书
技能培训通讯稿
2015/07/18 职场文书
关于国庆节的广播稿
2015/08/19 职场文书