Php 替换字符串中拼写错误的单词
我有一个基本的搜索脚本,我正在工作。我希望用户能够输入几个关键字。如果其中一个关键词拼写错误,我想在搜索结果中更改该词和/或显示一条“您的意思是……”消息 我试过levenshtein,但它似乎只适用于一个单词,而且似乎不太可靠。在使用此功能时,在测试中,我提出了以下建议:Php 替换字符串中拼写错误的单词,php,search,google-search,levenshtein-distance,Php,Search,Google Search,Levenshtein Distance,我有一个基本的搜索脚本,我正在工作。我希望用户能够输入几个关键字。如果其中一个关键词拼写错误,我想在搜索结果中更改该词和/或显示一条“您的意思是……”消息 我试过levenshtein,但它似乎只适用于一个单词,而且似乎不太可靠。在使用此功能时,在测试中,我提出了以下建议: <?php $input = 'ornage ptoato'; $possible_words = explode(' ', trim(strtolower($input))); foreach($possible
<?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,因为我试图为搜索字符串中的每个单词执行它
我基本上希望它能像谷歌的“你是说…”和易趣的“0个搜索结果只找到1个2个,所以我们搜索了1个2个3”。你的代码需要稍微调整一下
<?php
$input = 'ornage ptoato toshiba butts';
$possible_words = explode(' ', trim(strtolower($input)));
$words = array('sony','red', 'indigo','orange','bell','toshiba','potato');
$threshold = 4;
foreach($possible_words as $value){
$shortest = -1;
if( in_array($value, $words) ) {
printf("Exact match for word: %s\n", $value);
} else {
foreach ($words as $word) {
$lev = levenshtein($value, $word);
if ($lev <= $shortest || $shortest < 0) {
// set the closest match, and shortest distance
$closest = $word;
$shortest = $lev;
}
}
if($shortest < $threshold) {
printf("You typed: %s.\nAssuming you meant: %s\n", $value, $closest);
} else {
printf("Could not find acceptable match for: %s\n", $value);
}
}
}
你的问题是什么?你的预期结果/获得的结果是什么?
You typed: ornage.
Assuming you meant: orange
You typed: ptoato.
Assuming you meant: potato
Exact match for word: toshiba
Could not find acceptable match for: butts