【问题标题】:How to improve PHP string match with similar_text()?如何使用 similar_text() 改进 PHP 字符串匹配?
【发布时间】:2012-05-28 06:49:23
【问题描述】:

我正在使用 PHP 的 similar_text() 调用来比较两个字符串,但是,我没有得到足够好的结果,例如,我得到的最好结果是 80.95%,我希望看到 100%开。

我可以使用哪些其他函数来将字符串深入到核心?

<!-- Overcast, Rain or Showers compared Overcast, Rain or Showers is 80.9523809524 -->
<!-- Overcast, Risk of Rain or Showers compared Overcast, Rain or Showers is 86.2068965517 -->
<!-- Overcast, Chance of Rain or Showers compared Overcast, Rain or Showers is 83.3333333333 -->

【问题讨论】:

    标签: php text string-matching


    【解决方案1】:

    Levenshtein distance 是比较字符串的好方法。它比similar_text() 更快,并且它允许您通过加权算法的不同部分来控制其输出。

    要将 Levenshtein 距离转换为可用的“匹配”百分比,您可以将其表示为源字符串平均长度的一小部分:

    // Assume $src1 and $src2 are your source strings and at least one is non-empty
    
    $avgLength = ( strlen( $src1 ) + strlen( $src2 ) ) / 2;
    $matchFraction = 1 - ( levenshtein( $src1, $src2 ) / $avgLength );
    
    //$matchFraction is now between 0 and 1, with 1 being equal strings and 0 being totally different
    

    【讨论】:

      【解决方案2】:

      Levenshtein 距离:http://php.net/manual/en/function.levenshtein.php

      similar_text()相反,所以0%表示没有区别。

      // <!-- Overcast, Rain or Showers compared Overcast, Rain or Showers is 0 -->
      // <!-- Overcast, Risk of Rain or Showers compared Overcast, Rain or Showers is 11 -->
      // <!-- Overcast, Chance of Rain or Showers compared Overcast, Rain or Showers is 13 -->
      

      【讨论】:

      • 谢谢。这效果更好,甚至在它们完美匹配时提供“0”。
      猜你喜欢
      • 2015-06-27
      • 2013-08-12
      • 1970-01-01
      • 2022-01-19
      • 2011-09-04
      • 2015-10-27
      • 1970-01-01
      • 2015-11-14
      • 2015-03-08
      相关资源
      最近更新 更多