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的FTP学习(二)[转自奥索]
Oct 09 PHP
PHP 判断常量,变量和函数是否存在
Apr 26 PHP
php一个找二层目录的小东东
Aug 02 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
PHP字符串的连接的简单实例
Dec 30 PHP
destoon实现VIP排名一直在前面排序的方法
Aug 21 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 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学习之PHP运算符
2006/10/09 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
python的dict,set,list,tuple应用详解
2014/07/24 Python
Python实现获取某天是某个月中的第几周
2015/02/11 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
python中如何使用insert函数
2020/01/09 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
酒吧员工的岗位职责
2013/11/26 职场文书
自主实习接收函
2014/01/13 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android