我有一个正在处理的基本搜索脚本。我希望用户能够输入多个关键字。如果其中一个关键字拼写错误,我想为搜索结果更改该词和/或显示“您的意思是……”消息。
我已经尝试过 levenshtein 但它似乎只适用于一个单词,而且似乎不是很可靠。在使用此功能时,在测试中,我想出了这个:
<?php
$input = 'ornage ptoato';
$possible_words = explode(' ', trim(strtolower($input)));
foreach($possible_words as $value){
$words = array('sony','red', 'indigo','orange','bell','toshiba','potato');
$shortest = -1;
foreach ($words as $word) {
$lev = levenshtein($value, $word);
if ($lev == 0) {
$closest = $word;
$shortest = 0;
break;
}
if ($lev <= $shortest || $shortest < 0) {
// set the closest match, and shortest distance
$closest = $word;
$shortest = $lev;
}
}
}
echo "Input word: $input<br>";
if ($shortest == 0) {
echo "Exact match found: $closest";
} else {
echo "Did you mean: $closest?\n";
}
?>
foreach 中有 foreach 是因为我试图为搜索字符串中的每个单词执行此操作。
我基本上希望它像谷歌的“你的意思是..”和 eBay 的“找到一二的 0 个结果,所以我们搜索一二三”。