当前位置: 首页 > 编程笔记 >

PHP实现的最大正向匹配算法示例

微生慈
2023-03-14
本文向大家介绍PHP实现的最大正向匹配算法示例,包括了PHP实现的最大正向匹配算法示例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

 类似资料:
  • 本文向大家介绍Java实现的计算最大下标距离算法示例,包括了Java实现的计算最大下标距离算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的计算最大下标距离算法。分享给大家供大家参考,具体如下: 题目描述 给定一个整形数组,找出最大下标距离j−i, 当且A[i] < A[j] 和 i < j 解法 复杂度:三次扫描,每次的复杂度O(N) 算法:{5,3,4,0,1,4,

  • 本文向大家介绍PHP实现的回溯算法示例,包括了PHP实现的回溯算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现的回溯算法。分享给大家供大家参考,具体如下: 问题:  一头大牛驼2袋大米,一头中牛驼一袋大米,两头小牛驼一袋大米,请问100袋大米需要多少头大牛,多少头中牛,多少头小牛? 实现代码: 运行结果如下图: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数

  • 二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交集 U 和 V ,使得每一条边都分别连接 U、V 中的顶点。如果存在这样的划分,则此图为一个二分图。二分图的一个等价定义是:不含有「含奇数条边的环」的图。图1 是一个二分图。为了清晰,我们以后都把它画成图2的形式。   匹配:在图论中,一个「匹配」(matching

  • 本文向大家介绍正则表达式实现最小匹配功能的方法,包括了正则表达式实现最小匹配功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了正则表达式实现最小匹配功能的方法。分享给大家供大家参考,具体如下: 正则表达式默认情况下实现的是最大化匹配,这在有些情况下是非常不愿意出现的,比如下面这段代码: # starting IndiaInventoryAPP.exe" ~~DisplayVaria

  • 本文向大家介绍Java实现求子数组和的最大值算法示例,包括了Java实现求子数组和的最大值算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现求子数组和的最大值算法。分享给大家供大家参考,具体如下: 一般C和C++在算法实现中使用较多,下面我们通过java语言实现算法,更有亲切感。 题目: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,

  • 问题内容: 整整一整天,我一直在编程领域投入时间来进行指纹匹配/识别算法/实现。尽管有点模糊,因为我似乎找不到任何真正相关的东西。 我基本上是在寻找两件事: 指纹识别:验证图像实际上是一个指纹,因此可以与另一个指纹匹配 指纹匹配:从项目中匹配两个指纹以查看实际是否相等 所有操作都将在图像上完成,因此我与硬件无关。我发现了一些东西,例如Java Fingerprint SDK等,并且在Stackov