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 trim 去除空字符的定义与语法介绍
May 31 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
Parse正式发布开源PHP SDK
Aug 11 PHP
PHP实现懒加载的方法
Mar 07 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
php中Redis的应用--消息传递
Mar 28 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
php+ajax实现文件切割上传功能示例
Mar 03 PHP
PHP正则表达式之RCEService回溯
Apr 11 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程序内部post数据的方法
2015/03/31 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
Python实现矩阵转置的方法分析
2017/11/24 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
先进德育工作者事迹材料
2014/01/24 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
2015年公司新年寄语
2014/12/08 职场文书
工程部部长岗位职责
2015/02/12 职场文书
2015年科协工作总结
2015/05/19 职场文书
导游词之临安白水涧
2019/11/05 职场文书
使用Python获取字典键对应值的方法
2022/04/26 Python