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 相关文章推荐
FleaPHP的安全设置方法
Sep 15 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
PHP中empty,isset,is_null用法和区别
Feb 19 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
Jun 09 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
php语法检查的方法总结
Jan 21 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中的内存管理问题
2011/08/31 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
html5新特性与用法大全
2018/09/13 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
小学敬老月活动方案
2014/02/11 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
公司内部升职自荐信
2015/03/27 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
matlab xlabel位置的设置方式
2021/05/21 Python
Python多个MP4合成视频的实现方法
2021/07/16 Python
Python中递归以及递归遍历目录详解
2021/10/24 Python
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
分享几个实用的CSS代码块
2022/06/10 HTML / CSS