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 相关文章推荐
11个PHP 分页脚本推荐
Aug 15 PHP
php替换超长文本中的特殊字符的函数代码
May 22 PHP
php支付宝手机网页支付类实例
Mar 04 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
PHP贪婪算法解决0-1背包问题实例分析
Mar 23 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
Yii2框架中日志的使用方法分析
May 22 PHP
使用ucenter实现多站点同步登录的讲解
Mar 21 PHP
laravel Model 执行事务的实现
Oct 10 PHP
Laravel validate error处理,ajax,json示例
Oct 25 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
初识laravel5
2015/03/02 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
在Python中使用HTML模版的教程
2015/04/29 Python
python中偏函数partial用法实例分析
2015/07/08 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
对python中Json与object转化的方法详解
2018/12/31 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
"引用"与多态的关系
2013/02/01 面试题
一些Solaris面试题
2015/12/22 面试题
婚礼司仪主持词
2014/03/14 职场文书
法律专业自荐信
2014/06/03 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android