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版)
Aug 21 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
Aug 15 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
利用php的ob缓存机制实现页面静态化方法
Jul 09 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
Yii 实现数据加密和解密
Mar 09 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常用技术文之文件操作和目录操作总结
2014/09/27 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
python抓取网页中的图片示例
2014/02/28 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
python中lambda()的用法
2017/11/16 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
办公室保洁员岗位职责
2013/12/02 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
退货证明模板
2015/06/23 职场文书
500字作文之周记
2019/12/13 职场文书