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 APC的安装与使用详解
Jun 13 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
10个简化PHP开发的工具
Dec 25 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
Laravel框架集合用法实例浅析
May 14 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 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
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
Python import用法以及与from...import的区别
2015/05/28 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
会计自我鉴定范文
2013/10/06 职场文书
市场营销专科应届生求职信
2013/11/24 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
副总经理岗位职责
2014/03/16 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
主持人开幕词
2015/01/29 职场文书
应届生简历自我评价
2015/03/11 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
辞职申请书范本
2019/05/20 职场文书