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 09 PHP
php在线打包程序源码
Jul 27 PHP
收藏的PHP常用函数 推荐收藏保存
Feb 21 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
ThinkPHP标签制作教程
Jul 10 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
PHP中绘制图像的一些函数总结
Nov 19 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
Yii框架实现的验证码、登录及退出功能示例
May 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字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
分享Python开发中要注意的十个小贴士
2016/08/30 Python
python使用turtle库绘制时钟
2020/03/25 Python
python能做什么 python的含义
2019/10/12 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
Python 发送邮件方法总结
2020/08/10 Python
python如何运行js语句
2020/09/09 Python
Python 操作 MySQL数据库
2020/09/18 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
小学教师自我鉴定
2013/11/07 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
大学毕业感言
2014/01/10 职场文书
教师节活动主持词
2014/04/02 职场文书
《故乡》教学反思
2014/04/10 职场文书
五四青年节演讲稿
2014/05/26 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
教师学习心得体会范文
2016/01/21 职场文书
Python装饰器详细介绍
2022/03/25 Python