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 相关文章推荐
一个域名查询的程序
Oct 09 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
解析php中array_merge与array+array的区别
Jun 21 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
php微信支付之APP支付方法
Mar 04 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
在laravel中实现事务回滚的方法
Oct 10 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获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
详解vue-router基本使用
2017/04/18 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
Python赋值语句后逗号的作用分析
2015/06/08 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
python psutil模块使用方法解析
2019/08/01 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
大学三年的自我评价
2013/12/25 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
情人节活动总结范文
2015/02/05 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android