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 相关文章推荐
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
XHProf报告字段含义的解析
May 17 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 PHP
CI框架常用函数封装实例
Nov 21 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
PDO::errorCode讲解
Jan 28 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
PHP超全局变量实现原理及代码解析
Sep 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
php function用法如何递归及return和echo区别
2014/03/07 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
接收键盘指令的脚本
2006/06/26 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
js获取视频时长代码
2014/04/10 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
TensorFlow的权值更新方法
2018/06/14 Python
python try except 捕获所有异常的实例
2018/10/18 Python
python 字符串只保留汉字的方法
2018/11/16 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
以下的初始化有什么区别
2013/12/16 面试题
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
保险公司演讲稿
2014/09/02 职场文书
天鹅湖观后感
2015/06/09 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书