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 22 PHP
php disk_free_space 返回目录可用空间
May 10 PHP
深入PHP magic quotes的详解
Jun 17 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
php自动加载autoload机制示例分享
Feb 20 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
Laravel 实现密码重置功能
Feb 23 PHP
PHP实现页面静态化深入讲解
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
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Python进行数据提取的方法总结
2016/08/22 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
药学专业个人的自我评价
2013/12/31 职场文书
《老山界》教学反思
2014/04/08 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
晚会开场白和结束语
2015/05/29 职场文书
人与自然观后感
2015/06/16 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python