Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 替换字符串中拼写错误的单词_Php_Search_Google Search_Levenshtein Distance - Fatal编程技术网

Php 替换字符串中拼写错误的单词

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

我有一个基本的搜索脚本,我正在工作。我希望用户能够输入几个关键字。如果其中一个关键词拼写错误,我想在搜索结果中更改该词和/或显示一条“您的意思是……”消息

我试过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,因为我试图为搜索字符串中的每个单词执行它


我基本上希望它能像谷歌的“你是说…”和易趣的“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