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 高性能书写
Dec 11 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
CentOS7编译安装php7.1的教程详解
Apr 18 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
php判断变量类型常用方法
2012/04/24 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
Seajs的学习笔记
2014/03/04 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
Python解决八皇后问题示例
2018/04/22 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
python简单实现9宫格图片实例
2020/09/03 Python
Python list和str互转的实现示例
2020/11/16 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
中文系师范生自荐信
2013/10/01 职场文书
干部现实表现材料
2014/02/13 职场文书
家长对老师的评语
2014/04/18 职场文书
新文化运动的口号
2014/06/21 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
放飞理想主题班会
2015/08/14 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android