0

フレーズ/単語のリストをチェックし、それらを互いに比較して、どれが適切に入力されたフレーズ/単語であるかを確認するためのスクリプトを作成するためのヘルプを探しています。

$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

どんな助けでも、私はそれを感謝します!

4

5 に答える 5

1

正しい方法である「推測」する方法はありません。知識ベース(つまり、辞書)が必要です。

この辞書は、@ Dominicが述べたようにpspell(aspell)を使用して実装できます。または、辞書として独自の配列を使用することもできます。

辞書として配列がある場合は、phpの関数として使用できるLevenshteinアルゴリズムを使用して、2つの単語(つまり、単語と参照単語)間の距離を計算できます。したがって、参照配列を反復処理して、探している単語との差が最も小さい単語を見つけることができます。これらの単語は、修正として提案するのに最適なオプションである可能性があります。距離が0の場合、チェックされている単語はすでに正しいです。

于 2009-11-05T00:49:34.617 に答える
1

入力がかなり単純で、pspellがインストールされていて、配列が同じサイズの場合:

2 つの配列内の各インデックスについて、explodeスペース、pspell_check各単語、およびpspell_checktrue が返された単語の割合が最も高いフレーズの文字列を保持することができます。

開始するためのサンプル コード:

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];
}
于 2009-11-04T22:50:06.113 に答える
0

これらの単語を処理する際に、いくつかのルールを定義する必要があります。あなたの例では、正規表現が必要で、より長い長さのキーワードが必要ですが、より長い長さが機能しない場合があります。

于 2009-11-04T22:49:51.790 に答える
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 />";
    }

}
于 2009-11-04T22:50:45.753 に答える
0

スペルが正しいことを確認するだけでよい場合は、次のようにin_arrayを使用できます。

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

}

実際にそれらを自動修正したい場合は、かなり複雑なアルゴリズムが必要になり、可能性のあるすべてのスペルミスをデータベースのどこかに保存する必要があります。

于 2009-11-04T22:52:24.580 に答える