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下实现农历日历的代码
Mar 07 PHP
Snoopy类使用小例子
Apr 15 PHP
php与paypal整合方法
Nov 28 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
常用PHP框架功能对照表
Oct 23 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
PHP单态模式简单用法示例
Nov 16 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 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应用程序来获取Web服务器的状态信息
2006/10/09 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
Django的数据模型访问多对多键值的方法
2015/07/21 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
python基础教程之匿名函数lambda
2017/01/17 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
进修护士自我鉴定
2013/10/14 职场文书
高三毕业寄语
2014/04/10 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
党风廉正建设责任书
2015/01/29 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书