PHP: levenshtein()

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

Je suis en train de faire un site avec un antibot et un moteur de recherche.
Pour le moment les deux fonctionne bien, mais je me suis dit que je pouvais les améliorer en intégrant la fonction levenshtein.

Cette fonction permet de compter le nombre de modifications a faire pour partir d'un mot a un autre.

Je me suis dit que dans l'antibot, si il est entré correctement sa va, mais si il n'est pas entre correctement la je vérifié avec la fonction levenshtein, et si il y a moin de 1 différence par exemple sa le compte bon.
Pour le moteur de recherche, si le tag existe c'est bon, sa affiche un ou des liens, sinon je cherche dans la BDD qui contient les tags et le mot le plus proche je le propose (Vouliez dire tag_1 ?)

Pour l'antibot sa marche, mais pour le moteur de recherche il ne marche pas avec la bdd car il affiche toujours le premier mot de la bdd.

Le porbleme vient de la ligne: mysql_fetch_array($Reponse); car quand je la transforme en array('blibli','bloblo','blabla') sa marche

CODE:

<?php
if (isset($_GET['Tag'])){
$Tag = $_GET['Tag'];
$Existence_Tag = mysql_fetch_array(mysql_query('SELECT Tag FROM Glossaire WHERE Tag = "'.$Tag.'"'));
if ($Existence_Tag['Tag'] != ""){
echo "Mot cherché: $Tag";
$Reponse = mysql_query('SELECT * FROM Glossaire WHERE Tag = "'.$Tag.'"');
while ($Donnees = mysql_fetch_array($Reponse)){
echo "<br />
<br />
<a href='";
echo $Donnees['emplacement'];
echo ".php'>";
echo $Donnees['emplacement'];
echo "</a> <br />";
echo $Donnees['description'];
}
}
else{
$Reponse = mysql_query('SELECT Tag FROM Glossaire');
$input = $Tag;

//Ligne qui pose probème
$words = mysql_fetch_array($Reponse);
//Ligne qui pose probème

$shortest = -1;
foreach ($words as $word) {
$lev = levenshtein($input, $word);
if ($lev == 0) {
$closest = $word;
$shortest = 0;
break;
}
if ($lev <= $shortest || $shortest < 0) {
$closest = $word;
$shortest = $lev;
}
}
echo "Mot entré : $input\n";
if ($shortest == 0) {
echo "Correspondance exacte trouvée : $closest\n";
}
else {
echo "Vous voulez dire : $closest ?\n";
}
}
}
?>
Merci

Bonne fête

A voir également:

1 réponse

Utilisateur anonyme
 
Je n'ai pas trouvé la solution au problème mais j'ai tout de même fait un autre script qui marche

CODE:

if ((isset($_GET['Tag'])) AND ($_GET['Tag'] != "")){
$Tag = $_GET['Tag'];
echo "<p> Tag cherché: $Tag <br />";
$Existence_Tag = mysql_fetch_array(mysql_query('SELECT Tag FROM Glossaire WHERE Tag = "'.$Tag.'"'));
if ($Existence_Tag['Tag'] != ""){
$Reponse = mysql_query('SELECT * FROM Glossaire WHERE Tag = "'.$Tag.'"');
while ($Donnees = mysql_fetch_array($Reponse)){
$Emplacement = $Donnees['emplacement'];
$Description = $Donnees['description'];
echo "<br />
<br />
<a href='$Emplacement.php'>$Emplacement</a><br />
$Description";
}
}
else{
$Reponse = mysql_query('SELECT tag FROM Glossaire');
while ($Donnees = mysql_fetch_array($Reponse)){
$Difference = levenshtein($Tag, $Donnees['tag']);
if ($Difference <= 3){
echo "<br />
Vous vouliez dire : ";
echo $Donnees['tag'];
echo " ?";
}
}
echo "<br />
<br />Aucune correspondance trouvé";
}
}
0