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.MVC的模板标签系统(五)
Sep 05 PHP
Wordpress php 分页代码
Oct 21 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
PHP导出带样式的Excel示例代码
Aug 28 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
May 17 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 PHP
laravel实现前后台路由分离的方法
Oct 13 PHP
laravel 创建命令行命令的图文教程
Oct 23 PHP
PHP基于array_unique实现二维数组去重
Jul 14 PHP
php实现简单四则运算器
Nov 29 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
javascript new 需不需要继续使用
2009/07/02 Javascript
JavaScript学习历程和心得小结
2010/08/16 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
常用的javascript设计模式
2017/01/11 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
使用webpack搭建vue项目及注意事项
2019/06/10 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
理解python正则表达式
2016/01/15 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
IBatis持久层技术
2016/07/18 面试题
教你打造完美的创业计划书
2014/01/06 职场文书
反腐倡廉标语
2014/06/24 职场文书
考勤制度通知
2015/04/25 职场文书
七年级话题作文之执着
2019/11/19 职场文书