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 相关文章推荐
mayfish 数据入库验证代码
Apr 30 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
php编写一个简单的路由类
Apr 13 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
浅析PHP开发规范
Feb 05 PHP
PHPExcel 修改已存在Excel的方法
May 03 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 PHP
使用PHP开发留言板功能
Nov 19 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中的Class的几点个人看法
2006/10/09 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
python根据文件大小打log日志
2014/10/09 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
python学习入门细节知识点
2018/03/29 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
详解python之heapq模块及排序操作
2019/04/04 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
美术教师自我鉴定
2014/02/12 职场文书
库房保管员岗位职责
2014/04/07 职场文书
师德师风承诺书
2014/05/23 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
支教个人总结
2015/03/04 职场文书
地道战观后感300字
2015/06/04 职场文书
让世界充满爱观后感
2015/06/10 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs