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 相关文章推荐
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
PHP用mysql数据库存储session的代码
Mar 05 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
php判断变量类型常用方法
Apr 24 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
php中判断数组相等的方法以及数组运算符介绍
Mar 30 PHP
php数组合并与拆分实例分析
Jun 12 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
laravel实现上传图片的两种方式小结
Oct 12 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
如何用PHP实现多线程编程
May 26 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
python读取Android permission文件
2013/11/01 Python
Python os模块学习笔记
2015/06/21 Python
Python pymongo模块用法示例
2018/03/31 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
俞敏洪励志演讲稿
2014/04/29 职场文书
奉献演讲稿范文
2014/05/21 职场文书
设备售后服务承诺书
2014/05/30 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
争做文明公民倡议书
2019/06/24 职场文书
导游词之安徽九华山
2019/09/18 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android