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实现文件上传二法
Oct 09 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
PHP安全防范技巧分享
Nov 03 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
Apr 10 PHP
浅谈php冒泡排序
Dec 30 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
微信接口生成带参数的二维码
Jul 31 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
php实现在线考试系统【附源码】
Sep 18 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文件怎么打开 如何执行php文件
2011/12/21 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
php-fpm配置详解
2014/02/12 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
js Function类型
2011/12/04 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
python实现自动登录
2018/09/17 Python
Python如何使用字符打印照片
2020/01/03 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
省优秀教师事迹材料
2014/01/30 职场文书
总账会计岗位职责
2014/03/13 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
学雷锋活动总结范文
2014/04/25 职场文书