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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
十天学会php之第三天
Oct 09 PHP
php中看实例学正则表达式
Dec 25 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
获取PHP警告错误信息的解决方法
Jun 03 PHP
php url路由入门实例
Apr 23 PHP
php+mysql结合Ajax实现点赞功能完整实例
Jan 30 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
PHP中Trait及其应用详解
Feb 14 PHP
php使用scandir()函数扫描指定目录下所有文件示例
Jun 08 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中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
django的settings中设置中文支持的实现
2019/04/28 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
如何使用python代码操作git代码
2020/02/29 Python
python爬虫容易学吗
2020/06/02 Python
python try...finally...的实现方法
2020/11/25 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
汽车技术服务英文求职信范文
2014/01/02 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
销售岗位职责范本
2014/06/12 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
幼师中班个人总结
2015/02/12 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
导游词之张家口
2019/12/13 职场文书