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 相关文章推荐
MySQL修改密码方法总结
Mar 25 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
Laravel 5框架学习之向视图传送数据
Apr 08 PHP
php生成图片验证码
Jun 09 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 #PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
PHP实现的二分查找算法实例分析
Dec 19 #PHP
PHP实现git部署的方法教程
Dec 19 #PHP
PHP递归实现快速排序的方法示例
Dec 18 #PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
You might like
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
Javascript验证方法大全
2015/09/21 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
解析Python中while true的使用
2015/10/13 Python
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
客房主管岗位职责
2013/12/09 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python