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 判断变量类型实现代码
Oct 23 PHP
ThinkPHP采用模块和操作分析
Apr 18 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
Oct 17 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
PHP文件系统管理(实例讲解)
Sep 19 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 中的str_replace 函数总结
2007/04/27 PHP
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
Python 日期与时间转换的方法
2020/08/01 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
五一劳动节活动总结
2015/02/09 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
python urllib库的使用详解
2021/04/13 Python
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python