我想知道在PHP中是否有某种方法可以进行模糊字符串匹配。寻找一个长字符串中的单词,找到一个潜在的匹配,即使它拼写错误;如果由于OCR错误而被一个字符关闭的话会发现它。
我在想一个正则表达式生成器可能能够做到这一点。因此,如果输入“疯狂”,它将生成此正则表达式:
.*((crazy)|(.+razy)|(c.+azy)|cr.+zy)|(cra.+y)|(craz.+)).*
然后会返回该词的所有匹配或该词的变体。
如何构建生成器: 我可能会将搜索字符串/单词拆分为一个字符数组,并构建正则表达式,将新创建的数组替换为键值(字符串中字母的位置)替换为“。+”。
这是进行模糊文本搜索的好方法还是有更好的方法?怎么样的字符串比较,根据它的接近程度给我一个分数?我试图看看一些转换不良的OCR文本是否包含一个单词。
答案 0 :(得分:6)
当您不知道正确的单词是什么时,字符串距离函数是无用的。我建议使用pspell函数:
$p = pspell_new("en");
print_r(pspell_suggest($p, "crazzy"));
答案 1 :(得分:1)
Levenshtein是String Edit-distance的一个例子。针对不同目的有不同的指标。熟悉它们并找到适合你的那个。
答案 2 :(得分:1)
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;
}