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 相关文章推荐
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
php 友好URL的实现(吐血推荐)
Oct 04 PHP
PHP中输出转义JavaScript代码的实现代码
Apr 22 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 PHP
显示程序执行时间php函数代码
Aug 29 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
Jul 12 PHP
如何使用PHP给图片加水印
Oct 12 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 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
摩卡咖啡
2021/03/03 咖啡文化
模仿OSO的论坛(五)
2006/10/09 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
Vue不能观察到数组length的变化
2018/06/08 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
Python实现高效求解素数代码实例
2015/06/30 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
《骑牛比赛》教后反思
2014/04/22 职场文书
白岩松演讲
2014/05/21 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
运动会表扬稿范文
2015/05/05 职场文书
小平您好观后感
2015/06/09 职场文书
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
实现GO语言对数组切片去重
2022/04/20 Golang