【问题标题】:PHP - Which word is properly typed?PHP - 正确输入了哪个单词?
【发布时间】:2009-11-04 22:45:39
【问题描述】:

我正在寻求有关编写脚本以检查短语/单词列表并将它们相互比较并查看哪个是正确键入的短语/单词的帮助。

$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

任何帮助,我不胜感激!

【问题讨论】:

    标签: php arrays comparison words phrases


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      如果您的输入相当简单并且您安装了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];
      }
      

      【讨论】:

        【解决方案3】:

        您需要在处理这些词时定义一些规则。以您的示例为例,您需要一个正则表达式,并且您希望关键字的长度更长,但在某些情况下,更长的长度可能不起作用。

        【讨论】:

          【解决方案4】:

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

          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 />";
              }
          
          }
          

          【讨论】:

          • 我不认为他有一个他知道是正确的数组,或者至少,这不是问题的阅读方式。
          【解决方案5】:

          如果您只需要确保拼写正确,您可以使用in_array,如下所示:

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

          如果你想真正地自动更正它们,可能需要一个相当复杂的算法,并将所有可能的拼写错误存储在数据库中的某个地方。

          【讨论】:

          • 我不认为$arr1$arr2 是“参考”拼写。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-25
          • 2016-06-16
          • 2015-10-24
          • 1970-01-01
          • 1970-01-01
          • 2013-02-17
          • 1970-01-01
          相关资源
          最近更新 更多