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.MVC的模板标签系统(五)
Sep 05 PHP
php中的登陆login
Jan 18 PHP
PHP中动态显示签名和ip原理
Mar 28 PHP
PHP 获取MySQL数据库里所有表的实现代码
Jul 13 PHP
php中模拟POST传递数据的两种方法分享
Sep 16 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
php生成网页桌面快捷方式
May 05 PHP
基于laravel belongsTo使用详解
Oct 18 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 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禁止个别IP访问网站
2013/10/30 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
读jQuery之二(两种扩展)
2011/06/11 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
详解javascript设计模式三:代理模式
2019/03/25 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
Python实现快速多线程ping的方法
2015/07/15 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
Python timeit模块的使用实践
2020/01/13 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
办公室内勤工作职责
2013/12/11 职场文书
《识字五》教学反思
2014/03/01 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android