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 相关文章推荐
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
PHP会话处理的10个函数
Aug 11 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
php自定义分页类完整实例
Dec 25 PHP
Yii2表单事件之Ajax提交实现方法
May 04 PHP
php无限极分类实现方法分析
Jul 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
PHP模板引擎SMARTY
2006/10/09 PHP
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
thinkphp分页集成实例
2017/07/24 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
JavaScript如何自定义trim方法
2015/07/28 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
浅析Angular19 自定义表单控件
2018/01/31 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
Python代理抓取并验证使用多线程实现
2013/05/03 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
python实现朴素贝叶斯算法
2018/11/19 Python
python实现归并排序算法
2018/11/22 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
python 穷举指定长度的密码例子
2020/04/02 Python
基于matplotlib xticks用法详解
2020/04/16 Python
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
.NET面试问题集
2015/12/08 面试题
个人原因辞职信模板
2015/05/13 职场文书
读书笔记怎么写
2015/07/01 职场文书
八一建军节主持词
2015/07/01 职场文书
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸