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 相关文章推荐
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
PHP会员找回密码功能的简单实现
Sep 05 PHP
php接口技术实例详解
Dec 07 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
Sep 29 PHP
php关联数组与索引数组及其显示方法
Mar 12 PHP
PHP命名空间定义与用法实例分析
Aug 14 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 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
第十四节--命名空间
2006/11/16 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
关于this和self的使用说明
2010/08/01 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
token 机制和实现方式
2020/12/15 Javascript
Python学习笔记(二)基础语法
2014/06/06 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
小学生环保标语
2014/06/13 职场文书
责任书格式范文
2014/07/28 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
升学宴学生答谢词
2015/01/05 职场文书
开票证明
2015/06/23 职场文书
人力资源部工作计划
2019/05/14 职场文书
Redis如何实现分布式锁
2021/08/23 Redis
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python