PHP实现的最大正向匹配算法示例


Posted in PHP onDecember 19, 2017

本文实例讲述了PHP实现的最大正向匹配算法。分享给大家供大家参考,具体如下:

正向最大匹配算法:从左到右将待分词文本中的几个连续字符与词表匹配,如果匹配上,则切分出一个词。但这里有一个问题:要做到最大匹配,并不是第一次匹配到就可以切分的 。

函数中包含三个参数:

$query   查询词
$dict    词典
$max_len 最大长度(这里默认值设置为15)

词典示例:

$dict = array(
  '三水点靠木'=>'三水点靠木',
  '脚本下载'=>'脚本下载',
  'JS编程'=>'JS编程'
);

函数定义:

/*
 * $query 查询词
 * $dict 词典
 * $max_len 最大长度
 */
function extractWords($query,$dict,$max_len=15){
    $feature = "";
    $slen=mb_strlen($query,'UTF8');
    $c_bg = 0;
    while($c_bg<$slen){
      $matched = false;
      $c_len =(($slen-$c_bg)>$max_len)?$max_len:($slen-$c_bg);
      $t_str = mb_substr($query, $c_bg,$c_len,'UTF8');
      for($i=$c_len;$i>1;$i--){
        $ttts = mb_substr($t_str, 0,$i,'UTF8');
          if(!empty($dict[$ttts])){
//          echo 'matched = '.$ttts.PHP_EOL;
            $matched = true;
            $c_bg += $i;
            if(!empty($feature)){
              $feature.=",";
            }
            $feature.=$ttts;
            break;
          }
      }
      if(!$matched){
        $c_bg++;
      }
    }
    echo $feature.PHP_EOL;
}

使用方法:

$query='欢迎访问三水点靠木!三水点靠木是国内专业的网站,提供各种脚本下载及JS、Python、php等编程资料';
extractWords($query,$dict);

运行结果:

三水点靠木,三水点靠木,脚本下载

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
QQ登录 PHP OAuth示例代码
Jul 20 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
php画图实例
Nov 05 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
php筛选不存在的图片资源
Apr 28 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
Mar 02 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 15 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 #PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
php之header的不同用法总结(实例讲解)
Nov 28 #PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 #PHP
PHP命令空间namespace及use的用法小结
Nov 27 #PHP
Laravel 批量更新多条数据的示例
Nov 27 #PHP
PHP开发实现微信退款功能示例
Nov 25 #PHP
You might like
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
PHP6新特性分析
2016/03/03 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
Javascript注入技巧
2007/06/22 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
解读Python编程中的命名空间与作用域
2015/10/16 Python
django model通过字典更新数据实例
2020/04/01 Python
golang/python实现归并排序实例代码
2020/08/30 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
SQL注入攻击的种类有哪些
2013/12/30 面试题
夜大自我鉴定
2013/10/31 职场文书
员工培训邀请函
2014/01/11 职场文书
讲座主持词
2014/03/20 职场文书
校庆口号
2014/06/20 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
五年级上册复习计划
2015/01/19 职场文书
求职信范文怎么写
2015/03/19 职场文书
家装业务员岗位职责
2015/04/03 职场文书
大学军训心得体会800字
2016/01/11 职场文书
导游词之大雁塔景区
2019/09/17 职场文书