PHP - 哪个单词输入正确?

时间:2009-11-04 22:45:40

标签: php arrays comparison words phrases

我正在寻找帮助来编写脚本来检查短语/单词列表并将它们相互比较,看看哪一个是正确输入的短语/单词。

$arr1 = array('fbook', 'yahoo msngr', 'text me later', 'how r u');  
$arr2 = array('facebook', 'yahoo messenger', 'txt me l8r', 'how are you');

因此,在比较每个数组中的每个索引时,它应该遍历每个数组并比较两个值。最后,它应该产生:

facebook
yahoo messenger
text me later
how are you

任何帮助,我很感激!

5 个答案:

答案 0 :(得分:1)

如果您的输入相当简单并且安装了pspell,并且数组大小相同:

对于两个数组中的每个索引,您可以explode空格上的字符串,pspell_check每个单词,以及pspell_check返回true的单词百分比最高的短语将是要保留的短语。

让您入门的示例代码:

function percentage_of_good_words($phrase) {
  $words = explode(" ", $phrase);
  $num_good = 0;
  $num_total = count($words);

  if ($num_total == 0) return 0;

  for ($words as $word) {
    if (pspell_check($word)) {
      $num_good++;
    }
  }

  return ($num_good / $num_total) * 100;
}

$length = count($arr1);
$kept = array();
for ($i = 0; i < $length; $i++) {
   $percent_from_arr1 = percentage_of_good_words($arr1[$i]);
   $percent_from_arr2 = percentage_of_good_words($arr2[$i]);
   $kept[$i] = $percent_from_arr1 > $percent_from_arr2 ? $arr1[$i] : $arr2[$i];
}

答案 1 :(得分:1)

没有办法“猜测”哪种方法是正确的,你必须有一个知识库(即:字典)。

这个字典可以使用@Dominic提到的pspell(aspell)来实现,或者你可以将自己的数组作为字典。

如果您有一个数组作为字典,您可以使用Levenshtein算法that is available as a function in php来计算两个单词之间的距离(即:您的单词和参考单词)。因此,您可以遍历参考数组以查找与您正在查找的单词之间差异最小的单词,这些可能是建议作为更正的最佳选项。如果距离为0,则正在检查的单词已经正确。

答案 2 :(得分:0)

您需要在处理这些单词时定义一些规则。根据您的示例,您需要一个正则表达式,并且您希望关键字具有更长的长度,但可能会出现长度较长的情况。

答案 3 :(得分:0)

如果你有一个你知道的数组是正确的,那么很容易做到这样的事情:

foreach ($correct_array as $word => $num){
    if ($word == $tested_array[$num])
        {echo "this is correct: " . $word . "<br />";}
    else{
        echo "this is incorrectly spelled: " . $tested_array[$num] . "<br />";
    }

}

答案 4 :(得分:0)

如果你需要做的就是确保拼写正确,你可以使用in_array,如下所示:

foreach ($arr2 as $val){
   if(in_array($val,$arr1){
     //spelled properly
   }
   else{
     //spelled incorrectly
   }

}

如果你想实际上自动更正它们,它可能需要一个非常复杂的算法,并将每个可能的拼写错误存储在某个地方的数据库中。