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 导出数据到淘宝助手CSV的方法分享
Feb 27 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
Jul 15 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
php中使用base HTTP验证的方法
Apr 20 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
详解PHP设计模式之依赖注入模式
May 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
php中调用其他系统http接口的方法说明
2014/02/28 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
JavaScript类的写法
2016/09/17 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
JavaScript实现密码强度实时验证
2020/03/18 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
Python中os.path用法分析
2015/01/15 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
python super用法及原理详解
2020/01/20 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
和谐家庭演讲稿
2014/05/24 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
行政处罚决定书
2015/06/24 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书