Juste une question : est-ce difficile à mettre en place un système d'orthographe aléatoire pour la recherche d'un jeu.
Parce que ce serait bien qu'il y ait ça sur TT.
Parce que Loïc_425, il a pas trouvé Aquadukt dans la base de données de TT ; normal il fallait chercher Aquädukt... Avouez que c'est ballot... En plus quand on connaît seulement le nom allemand du jeu, ce serait bien pratique...
Mais la question, c'est d'abord de savoir si c'est compliqué à mettre en place ! Je ne voudrais pas avoir l'air de demander l'impossible...
Cher Monsieur Budnic,
Non, ce n'est pas compliqué, par contre, se taper les fiches pour saisir les nom approximatif, là, c'est un sacré taf
Bien à vous de cordialement
Monsieur Phal
Monsieur Phal dit:Cher Monsieur Budnic,
Non, ce n'est pas compliqué, par contre, se taper les fiches pour saisir les nom approximatif, là, c'est un sacré taf
Bien à vous de cordialement
Monsieur Phal
$mots = str_replace('ä', 'a', $mots);
mais bon si ça pas été prévu au départ ouille.
j'ai remarqué aussi un autre soucis au niveau du moteur de recherche, l'ordre des mots semble important !
exemple :
princes florence -> aucun résultat
princes de florence -> là c'est ok
il faut si je me souviens bien faire ceci :
// on place les differents mots dans un tableau
$tab = explode(' ' , $mots);
puis après on teste chacun des mots avec d'abord un "AND" (AND game.mot_cle like...) puis s'il n'y a aucun resultat, un "OR" (OR game.mot_cle like).
enfin bon vous le savez surement déjà mais ça ne me coute rien de le noter
++ Loic
Comme Loïc. Faudrait une expression régulière qui mette le nom "nu" en base : virer les accents, éventuellement les traits d'union, etc.
Idem quand on fait une recherche, et le nom tapé est traité et comparé au champs du nom "nu" en base.
Reste le problèmes des fiches existantes
Cher Monsieur loic_425,
Oui, je sais bien, mais plus on complique la recherche, plus on se retrouve avec un truc bourrin comme le forum qui consomme un max Et les recherches dans la base au niveau jeu, pfiou, c'est 100 fois plus par jour que dans le forum
Mais bon, je vais être obligé de me pencher dessus là, c'est sûr...
Bien à vous de cordialement
Monsieur Phal
elv dit:
Reste le problèmes des fiches existantes
voilà c'est le problème, mr phal va nous dire, vous êtes bien gentil mais y'a 5553 jeux en base
Monsieur Phal dit:Et les recherches dans la base au niveau jeu, pfiou, c'est 100 fois plus par jour que dans le forum l
Oui mais si on tombe juste du 1er coup au lieu de faire 4 ou 5 requêtes foireuses c'est mieux non ?
loic_425 dit:voilà c'est le problème, mr phal va nous dire, vous êtes bien gentil mais y'a 5553 jeux en base
Bah remarque il suffit d'une moulinette qui va faire ça toute seule comme une grande. Bon faut quand même la pondre la moulinette, c'est sûr
elv dit:
Bah remarque il suffit d'une moulinette qui va faire ça toute seule comme une grande. Bon faut quand même la pondre la moulinette, c'est sûr
oui exact.
n'empeche que c'est énervant ces fameux trémas partout dans les jeux allemands. Enfin bon c'est pas comme si y'avait une majorité de jeux allemands
je plaisante je comprends bien que Mr phal ne peut pas etre partout.
++ Loic
Dans la mesure ou le moteur te donne les jeux pour une chane de caracteres, ça pose pas trop de pb:
Ex : "aqu" et Aquädukt sort sur la 1ere page.
Richard dit:Dans la mesure ou le moteur te donne les jeux pour une chane de caracteres, ça pose pas trop de pb:
Ex : "aqu" et Aquädukt sort sur la 1ere page.
oui oui sauf que moi je tapais aqua (je pensais que l'erreur venait vers la fin du mot) pour etre sur et qu'après j'ai abandonné
mais c'est facile de dire ce que tu dis, sans vouloir te vexer (j'en n'ai pas du tout contre toi). Si ta voiture ne démarre plus, prends ton vélo et ça posera moins de problème !
loic_425 dit:Richard dit:Dans la mesure ou le moteur te donne les jeux pour une chane de caracteres, ça pose pas trop de pb:
Ex : "aqu" et Aquädukt sort sur la 1ere page.
oui oui sauf que moi je tapais aqua (je pensais que l'erreur venait vers la fin du mot) pour etre sur et qu'après j'ai abandonné
mais c'est facile de dire ce que tu dis, sans vouloir te vexer (j'en n'ai pas du tout contre toi). Si ta voiture ne démarre plus, prends ton vélo et ça posera moins de problème !
J'essaie de te trouver une solution pour que les gosses arrêtent de te jeter des pierres et maintenant tu veux draguer !
En fait pour rassembler tout le monde, il existe une fonction Soundex, soundex2, levenshtein ... qui transforme un mot en un mot basic dépouillé de toute les fioritures de la langue. Par exemple, aquäduck sera transformer en akaduc (je ne sais pas c'est un exemple inventé).
L'idée est de créé un champ supplémentaire pour chaque jeu qu'on remplit une fois pour toute avec le soundex du titre.
Ensuite quand on lance une recherche, on créé le soundex du mot recherché et c'est ensuite la même recherche entre mot 'soundexé' et titre 'soundexé'.
Cela ne consome rien à part un champ de plus ds la base.
Voila une telle requete adaptée pour le francais:
function soundex2( $sIn )
{
// Si il n'y a pas de mot, on sort immédiatement
if ( empty( $sIn ) )
return null;
// On met tout en minuscule
$sIn = strtoupper( $sIn );
// On supprime les accents
$sIn = strtr( $sIn, 'ÂÄÀÇÈÉÊËŒÎÏÔÖÙÛÜ', 'AAASEEEEEIIOOUUU' );
// On supprime tout ce qui n'est pas une lettre
$sIn = preg_replace( '[^A-Z]
', '', $sIn );
// Si la chaîne ne fait qu'un seul caractère, on sort avec.
if ( strlen( $sIn ) === 1 )
return $sIn;
// on remplace les consonnances primaires
$convIn = array( 'GUI', 'GUE', 'GA', 'GO', 'GU', 'CA', 'CO', 'CU',
'Q', 'CC', 'CK' );
$convOut = array( 'KI', 'KE', 'KA', 'KO', 'K', 'KA', 'KO', 'KU', 'K',
'K', 'K' );
$sIn = str_replace( $convIn, $convOut, $sIn );
// on remplace les voyelles sauf le Y et sauf la première par A
$sIn = preg_replace( '(?<!^)[EIOU]
', 'A', $sIn );
// on remplace les préfixes puis on conserve la première lettre
// et on fait les remplacements complémentaires
$convIn = array( '^KN
', '^(PH|PF)
', '^MAC
', '^SCH
', '^ASA
',
'(?<!^)KN
', '(?<!^)(PH|PF)
', '(?<!^)MAC
', '(?<!^)SCH
',
'(?<!^)ASA
' );
$convOut = array( 'NN', 'FF', 'MCC', 'SSS', 'AZA', 'NN', 'FF', 'MCC',
'SSS', 'AZA' );
$sIn = preg_replace( $convIn, $convOut, $sIn );
// suppression des H sauf CH ou SH
$sIn = preg_replace( '(?<![CS])H
', '', $sIn );
// suppression des Y sauf précédés d'un A
$sIn = preg_replace( '(?<!A)Y
', '', $sIn );
// on supprime les terminaisons A, T, D, S
$sIn = preg_replace( '[ATDS]$
', '', $sIn );
// suppression de tous les A sauf en tête
$sIn = preg_replace( '(?!^)A
', '', $sIn );
// on supprime les lettres répétitives
$sIn = preg_replace( '(.)\1
', '$1', $sIn );
// on ne retient que 4 caractères ou on complète avec des blancs
return substr( $sIn . ' ', 0, 4);
}
Voui mais c'est bouffeur de ressources tout ça.
On peut se contenter de :
- supprimer les caractères non alphanumériques (tirets, apostrophes, espaces...)
- tout passer en minuscules
- puis supprimer les accents (avec str_replace, probablement moins bouffeuse de ressources que strtr)
(- en option une distance de levenshtein simple, mais est-ce vraiment nécessaire ?)
Ça donnerait :
Age of Steam -> ageofsteam
Aquädukt -> aquadukt
Time's Up -> timesup
Euphrat & Tigris -> euphrattigris
3, 2, 1... Couleurs ! -> 321couleurs
M. Phal pourrait mettre ces correspondances dans une table à part : la requête ne va interroger qu'une table simple avec l'ID des jeux et leur "nom simplifié", et si il y a au moins un résultat on va afficher la liste des jeux avec les ID correspondants. Ça devrait être très rapide.
elv dit:Voui mais c'est bouffeur de ressources tout ça.
Pas si on ajoute un champ dans la base de donnée qui contient ce code calculé, et que pour chaque recherche, on recherche sur le soundex des mots entrées dans le champ.
Blue dit:Pas si on ajoute un champ dans la base de donnée qui contient ce code calculé, et que pour chaque recherche, on recherche sur le soundex des mots entrées dans le champ.
Ça va de soi, je pense que c'était aussi l'idée de Vicnet. Mais les soundex et distances de Levenshtein sont gros consommateurs de toute façon. Si on peut les éviter c'est bien.
elv dit:Blue dit:Pas si on ajoute un champ dans la base de donnée qui contient ce code calculé, et que pour chaque recherche, on recherche sur le soundex des mots entrées dans le champ.
Ça va de soi, je pense que c'était aussi l'idée de Vicnet. Mais les soundex et distances de Levenshtein sont gros consommateurs de toute façon. Si on peut les éviter c'est bien.
C'etait effectivement l'idée.
Meme si ca consome des ressources, c'est tres ponctuelle lors de la conversion de la base pour créer le chmp (1 seule fois), lors de la siasie d'une fiche (1 fois ds la vie de la fiche), et lors d'une demande sur le nom rechercher uniquement (1 fois par requete) donc pas tres lourd tous comptes fait.
Mais ce que tu proposes va bien aussi.
Et quand on tape “ys” on a 284 réponses.
Pour ce jeu, à part taper “ystari” je vois pas.
Cher Monsieur Limp,
Cocher la case “titre exact” ?
Bien à vous de cordialement
Monsieur Phal
rha zut : j’avais oublié ça, c’est vrai…
Le truc qui m’a
c’est qu’en cherchant un jeu comme “Im Märchenwald”, il a fallu déduire au bout de pas mal de temps de recherche qu’il avait été rentré en base sans trema
et qu’en mettant juste Im, ça sort pas les jeux commençant par Im.