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后台程序与Javascript的两种交互方式
Oct 25 PHP
PHP 单引号与双引号的区别
Nov 24 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
js实现一个简易计算器
2020/03/30 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
js实现日历
2020/11/07 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
python多线程下信号处理程序示例
2019/05/31 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
美国著名的团购网站:Woot
2016/08/02 全球购物
通信工程毕业生自荐信
2013/11/01 职场文书
员工考核管理制度
2014/02/02 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
小学校长开学致辞
2015/07/29 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
Python Django项目和应用的创建详解
2021/11/27 Python