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后台如何避免用户直接进入方法实例
Oct 15 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
Nov 25 PHP
php防止用户重复提交表单
Nov 02 PHP
php自动载入类用法实例分析
Jun 24 PHP
php json中文编码为null的解决办法
Dec 14 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
php实现数据库的增删改查
Feb 26 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
PHP自动生成缩略图函数的源码示例
Mar 18 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
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
php简单实现快速排序的方法
2015/04/04 PHP
9个比较实用的php代码片段
2016/03/15 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
应聘美工求职信
2013/11/07 职场文书
管理心得体会
2013/12/28 职场文书
运动会致辞稿50字
2014/02/04 职场文书
英语分层教学实施方案
2014/06/15 职场文书
如何在C++中调用Python
2021/05/21 Python
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫