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 相关文章推荐
PHP4实际应用经验篇(8)
Oct 09 PHP
php cookie 登录验证示例代码
Mar 16 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
利用PHP实现短域名互转
Jul 05 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
PHP 使用memcached简单示例分享
Mar 05 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
php实现网站顶踩功能的完整前端代码
Jul 19 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
详细解读php的命名空间(一)
Feb 21 PHP
详解如何实现Laravel的服务容器的方法示例
Apr 15 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 #PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
PHP实现的二分查找算法实例分析
Dec 19 #PHP
PHP实现git部署的方法教程
Dec 19 #PHP
PHP递归实现快速排序的方法示例
Dec 18 #PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
You might like
两种php调用Java对象的方法
2006/10/09 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
python实现从字典中删除元素的方法
2015/05/04 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
公司成本主管岗位责任制
2014/02/21 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
研修心得体会
2014/09/04 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
建设工程授权委托书
2014/09/22 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
同学会感言
2015/07/30 职场文书
初中语文教学研修日志
2015/11/13 职场文书
我的收音机情缘
2022/04/05 无线电