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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
写一个用户在线显示的程序
Oct 09 PHP
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
php 函数使用可变数量的参数方法
May 02 PHP
Yii框架实现多数据库配置和操作的方法
May 25 PHP
PHP的PDO预处理语句与存储过程
Jan 27 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
php英文单词统计器
2016/06/23 PHP
srcElement表格样式
2006/09/03 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
Python Trie树实现字典排序
2014/03/28 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
详解Django 时间与时区设置问题
2019/07/23 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
公司财务自我评价分享
2013/12/17 职场文书
微博营销计划书
2014/01/10 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
金秋助学感谢信
2015/01/21 职场文书
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫
java实现web实时消息推送的七种方案
2022/07/23 Java/Android