PHP - düzgün bir kelime yazdınız?

5 Cevap php

Ben öbekleri / kelimelerin bir listesini kontrol edin ve birbirlerine bunları karşılaştırmak ve bir düzgün yazdığınız sözcük / kelime olduğunu görmek için bir komut dosyası yazma ile ilgili yardım arıyorum.

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

Yani, her dizide, her endeksi karşılaştırarak, her dizi geçmesi ve hem de değerleri karşılaştırmak gerekir. Sonunda, üretmek gerekir:

facebook
yahoo messenger
text me later
how are you

Herhangi bir yardım, bunu takdir!

5 Cevap

Doğru yolu olan "tahmin" için hiçbir yolu yoktur, bir bilgi tabanı (: bir sözlük yani) olması gerekir.

Bu sözlük Dominic belirtildiği @ olarak Pspell (aspell) kullanılarak uygulanabilir, ya da bir sözlük olarak kendi dizi olabilir.

Eğer sözlük gibi bir dizi varsa, that is available as a function in php iki kelime (: kelime ve referans bir yani) arasındaki mesafeyi hesaplamak için, Levenshtein algoritmayı kullanabilir. Yani aradığınız birinden küçük farkı kelime (ler) bulmak için referans dizi üzerinde yineleme olabilir ve bu bir düzeltme olarak önermek için en iyi seçenek olabilir. Mesafe 0, bu yüzden kontrol ediliyor kelime zaten doğruysa.

Lütfen giriş oldukça basit ve pspell yüklü ve diziler aynı boyutta ise:

İki dizide her dizin için sen, pspell_check each word, and the phrase with the highest percentage of words for which pspell_check gerçek mekânlarda explode dize döndürülür olabilir tutmak için ifade olacaktır.

Örnek kod Başlamak için:

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];
}

Sen bu sözleri işlenirken bazı kuralları tanımlamak gerekir. Sizin örnek, bir regex ihtiyacınız ve daha uzun bir uzunluğa sahip anahtar istiyorum, ama olabilir durumlar artık uzunluğu işe yaramayabilir.

Eğer bildiğiniz bir dizi doğru olsaydı böyle bir şey yapmak çok kolay olurdu:

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

}

yapmanız gereken her şeyi düzgün yazıldığından emin olmak ise, bu gibi in_array kullanabilirsiniz:

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

}

aslında onları Otomatik Düzeltme istiyorsanız, muhtemelen oldukça karmaşık algorithim almak, ve bir yerde bir veritabanında her olası yazım hatası saklamak istiyorum.