2009-10-07 5 views
0

J'ai besoin d'aide pour effectuer une recherche binaire avec un terme de recherche ($ searchTerm) et le comparer à un dictionnaire ($ dictionary).PHP Simple Spell Checker (Aide à la Recherche Binaire)

Fondamentalement, il lit un fichier dictionnaire dans un tableau. L'utilisateur entre des mots, cette chaîne devient $ checkMe. Je fais une fonction explosive et ça se transforme en $ explodedCheckMe. Je passe chaque terme dans $ checkMe à binarySearch comme $ searchTerm (Ok, mon code est confus). Je pense que ma logique est saine, mais ma syntaxe est pas ...

Je me sers de ce lot: http://us3.php.net/manual/en/function.strcasecmp.php

voici mon code: paste2.org/p/457232

Répondre

0

Donc, vous cherchez des chaînes exactes dans le dictionnaire. Pourquoi ne pas vous un simple tableau pour cela? La table de hachage de PHP natif va certainement être plus rapide qu'une recherche binaire implémentée en PHP.

while (!feof($file)) { 
    $dictionary[strtolower(fgets($file))] = 1; 
} 

... 

function search($searchTerm, $dictionary) { 
    if ($dictionary[strtolower($searchTerm)]) { 
     // do something 
    } 
} 

Mais si vous voulez vraiment utiliser une recherche binaire, essayez ceci:

function binarySearch($searchTerm, $dictionary) { 
    $minVal = 0; 
    $maxVal = count($dictionary); 
    while ($minVal < $maxVal) { 
     $guess = intval($minVal + ($maxVal - $minVal)/2); 
     $result = strcasecmp($dictionary[$guess], $searchTerm); 
     if ($result == 0) { 
      echo "FOUND"; 
      return; 
     } 
     elseif ($result < 0) { 
      $minVal = $guess + 1; 
     } 
     else { 
      $maxVal = $guess; 
     } 
    } 
} 

Le principal problème est que vous ne pouvez pas définir $maxval à $guess - 1. Voir le wikipedia article on binary search, c'est vraiment bon.

+0

Merci pour votre contribution! Oui, mon professeur voulait que je fasse une recherche binaire que j'ai faite moi-même. Aussi, j'avais besoin de montrer que je pouvais lire dans un fichier et le mettre dans un tableau, c'est pourquoi je lis dans un fichier de dictionnaire. Quoi qu'il en soit, j'ai ajouté la recherche binaire que vous m'avez donnée, et cela a fonctionné parfaitement! Beaucoup plus agréable que celui que j'ai fait moi-même. J'ai eu un problème cependant, ce qui m'a pris pour toujours comprendre, qui est le tableau de dictionnaire ($ dictionnaire) avait toujours un espace supplémentaire après chaque valeur, donc j'ai fini par couper chaque fois que je cherchais un mot dans ma recherche binaire . Merci encore pour l'entrée! –

1

Je sais que cela ne répond pas directement à votre question, mais avez-vous envisagé d'utiliser pspell et un dictionnaire personnalisé?

+0

+1 pour ne pas avoir réinventé la roue. –