Bonjour;
Suis-je le seul à trouver la plupart des moteurs de recherche présent sur les sites vraiment pourris ? (a commencer par les miens). N'y a t'il pas des scripts qui permettent par exemple de trouver le mot "fraise" lorsqu'on tape "fraiiise" ? J'ai passé la journée à chercher des scripts de ce genre mais rien. Et vous ? comment faites vous ?
Même sur les sites de commerces électronique je trouve que c'est pourris. Suffit d'introduire une lettre de trop dans un mot, ou de mettre la conjugaison qui va pas bien et on trouve plus rien.
Personne s'es penché sur le problème dans le monde du libre ?
# J'ai encore oublié de cocher la case
Posté par Anonyme . Évalué à -4.
# Une idée
Posté par Robert VISEUR (site web personnel) . Évalué à 2.
Pour ta question, je pense qu'il y a moyen de s'en sortir avec des expressions régulières, en faisant un preg_match avec un patern qui introduise des caractères parasites type fautes de frappe.
[^] # Re: Une idée
Posté par Yusei (Mastodon) . Évalué à 6.
Il y a des bouquins assez abordables sur la question dont un qui doit s'appeler "algorithmique du texte".
[^] # Re: Une idée
Posté par ckyl . Évalué à 3.
Nooooooooon pas celui la (vuibert ?).
J'etais jeune et fou a l'epoque moi aussi je voulais coder ca. Effectivement il y a ce bouquin. Je l'ai trouvé, je l'ai ouvert, je l'ai lu, j'ai essaye de le comprendre et je l'ai vite refermé il fait vraiment trop mal au crane :-)
Mais il me semble que ce genre de choses soient abordées dedans si ma mémoire est bonne.
[^] # Re: Une idée
Posté par Anonyme . Évalué à 2.
[^] # Re: Une idée
Posté par Yusei (Mastodon) . Évalué à 3.
Note que ça ne demande aucune notion compliquée. C'est plein de notions simples, mises ensembles pour faire un truc assez subtil. Mais c'est abordable par n'importe qui d'assez motivé. Par contre pour le livre dont je parlais, je ne sais pas s'il est suffisant si on n'a pas un cours avec des exemples derrière :-/
Une idée: c'est pas possible d'utiliser un logiciel comme BLAST pour faire ça sans trop s'embêter ?
# mysql
Posté par bohwaz . Évalué à 2.
Bon ça va te trouver aussi des trucs genre "françoise"...
[^] # Re: mysql
Posté par Anonyme . Évalué à 2.
# soundex peut-etre...
Posté par ridben . Évalué à 3.
[^] # Re: soundex peut-etre...
Posté par wismerhill . Évalué à 3.
D'ailleurs c'est déjà intégré à PHP.
Cf la doc de PHP dans la partie sur les chaines de caractères, il y a les fonctions soundex, levenshtein, similar_text et metaphone (cette dernière semble spécifique à l'anglais).
Par contre la recherche en utilisant ces fonctions va être beaucoup plus compliquée à coder.
[^] # Re: soundex peut-etre...
Posté par Yoan B (site web personnel) . Évalué à 3.
Et c'est implémenté dans MySQL.
* http://dev.mysql.com/doc/mysql/en/String_functions.html#IDX1298(...)
* http://sqlpro.developpez.com/Soundex/SQL_AZ_soundex.html(...)
Il existe un version française de soundhex en php
* http://expreg.com/voirsource.php?id=40&type=Chaines%20de%20cara(...)
Et le tutorial : "Tolerant Search Algorithms with PHP and PostgreSQL " :
* http://www.samspublishing.com/articles/article.asp?p=24691(...)
# distance de levenshtein
Posté par Bruno Muller . Évalué à 6.
En php il existe : http://www.nexen.net/docs/php/annotee/function.levenshtein.php(...)
[^] # Re: distance de levenshtein
Posté par amadeus029 . Évalué à 2.
C'est efficace, j'ai utilisé ca il y a quelques temps.
Et c'est assez facile à utiliser.
En gros ça calcule la "distance" entre 2 chaines de caractéres selon la définition de Levenshtein, soit le nombre de caractéres qu'il faut ajouter/modifier/supprimer pour passer d'une chaine à l'autre.
Pour les fautes de frappe c'est idéal, mais ca marche assez bien aussi pour les fautes d'ortographe.
[^] # Re: distance de levenshtein
Posté par Erwan . Évalué à 3.
Ca force quand meme a comparer avec tous les mots du dico, y'a pas un truc qui permettrait de tirer parti d'un index a tout hasard ?
[^] # Re: distance de levenshtein
Posté par amadeus029 . Évalué à 2.
L'utilisation d'un index ne me parait pas être une bonne solution. Un index est basé sur un tri, et c'est justement quand ce tri n'est plus suffisant que des fonctions de recherche avancés sont utile. Genre quand je cherche conqueror je veux aussi Konqueror: distance de Levenshtein faible (1), mais distance alphabétique trés grande.
Une des solution courament utilisée pour diminuer la charge, c'est de faire une premiére recherche en ortographe exacte, puis de demander à l'utilisateur s'il veut corriger l'ortographe ou faire une recherche en ortographe approchée.
Pspell est surement à étudier mais pas forcément une bonne idée. Ce n'est pas non plus ultra léger en ressource, ca demande un bon controle sur le serveur de production, c'est beaucoup moins universel, etc...
En fait, il faudrait faire une étude assez précise pour dire quelle est la meilleure solution :
- Fréquence des changements du site
- Fréquence des recherches
- fréquence des fautes dans les recherches
- ressource la plus limitée : espace disque, puissance proc, BP...
- etc...
Tout ca pour expliquer pourquoi il n'y a pas de solution "toute faite".
# Pspell
Posté par LiquidMoon . Évalué à 2.
Levenshtein est trop couteux en ressource.
tu as des fonctions pspell dans php. Seul hic, il faut que php soit compilé pour l'utiliser avec, et il te faut donc probablement un serveur dedié.
[^] # Re: Pspell
Posté par Anonyme . Évalué à 2.
[^] # Re: Pspell
Posté par LiquidMoon . Évalué à 2.
En tous cas t'as l'idée. (le dico se fait en ligne de commande avec les fichiers de phonetiques francaises qui se trouve dans /usr/share/pspell si je me rappelle bien)
# Commentaire supprimé
Posté par Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
# Indexation de texte intégral
Posté par Colargol . Évalué à 2.
Si, mais la solution n'est pas à chercher du côté script mais côté base de données en mettant en oeuvre des indexations de texte intégral (full text indexing).
Pour Postgresql : extension tsearch :
http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/(...)
Pour MySQL l'indexation est possible en standard depuis la v3.23.23 http://dev.mysql.com/doc/mysql/en/Fulltext_Search.html(...)
# Côté moteur de recherche
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Fuzzy searching
Searches can be performed using various configurable algorithms. Currently the following algorithms are supported (in any combination):
* exact
* soundex
* metaphone
* common word endings (stemming)
* synonyms
* accent stripping
* substring and prefix
[^] # Re: Côté moteur de recherche
Posté par Anonyme . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.