代码之家  ›  专栏  ›  技术社区  ›  mikeytown2

模糊文本搜索:regex通配符搜索生成器?

  •  3
  • mikeytown2  · 技术社区  · 15 年前

    我想知道是否有某种方法可以在PHP中进行模糊字符串匹配。在一个长字符串中查找一个单词,即使拼写错误,也可以找到一个潜在的匹配;如果由于OCR错误而被一个字符关闭,则可以找到它。

    我在想一个regex生成器也许能做到。因此,如果输入“crazy”,它将生成这个regex:

    .*((crazy)|(.+razy)|(c.+azy)|cr.+zy)|(cra.+y)|(craz.+)).*
    

    然后它将返回该单词或该单词变体的所有匹配项。

    如何建造发电机: 我可能会将搜索字符串/单词拆分成一个字符数组,然后构建一个regex表达式,在新创建的数组中执行foreach操作,用“.+”替换键值(字符串中字母的位置)。

    这是进行模糊文本搜索的好方法还是有更好的方法?有什么样的字符串比较能根据它的接近程度给我一个分数呢?我想看看一些转换不好的OCR文本是否包含一个简短的单词。

    3 回复  |  直到 15 年前
        1
  •  6
  •   user187291    15 年前

    当你不知道正确的词是什么时,字符串距离函数是无用的。我建议使用pspell函数:

    $p = pspell_new("en");
    print_r(pspell_suggest($p, "crazzy"));
    

    http://www.php.net/manual/en/function.pspell-suggest.php

        2
  •  1
  •   Visionary Software Solutions    15 年前

    Levenshtein是字符串的一个示例 Edit-distance . 对于不同的目的,有不同的度量标准。熟悉他们,找到适合你的。

        3
  •  1
  •   Amarghosh    15 年前
    echo generateRegex("crazy");
    function generateRegex($word)
    {
      $len = strlen($word);
      $regex = "\b((".$word.")";
      for($i = 0; $i < $len; $i++)
      {
        $temp = $word;
        $temp[i] = '.';
        $regex .= "|(".$temp.")";
      }
      $regex = $regex.")\b";
      return $regex;
    }