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之COOKIE支持详解
Sep 20 PHP
php中的三元运算符使用说明
Jul 03 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
ThinkPHP模型详解
Jul 27 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
php+js实现裁剪任意形状图片
Oct 31 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 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简单实现合并2个数字键数组值的方法
2017/05/30 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
node.js基础知识汇总
2020/08/25 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
python thread 并发且顺序运行示例
2009/04/09 Python
Python Matplotlib库入门指南
2015/05/18 Python
python提取字典key列表的方法
2015/07/11 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
Python 从attribute到property详解
2020/03/05 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
物流管理专业应届生求职信
2013/11/21 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers