J'y ai pensé, et j'ai essayé de trouver des solutions sur la façon de rechercher floue une base de données, si par exemple un utilisateur tape une faute d'orthographe. Des problèmes flagrants avec la logique derrière cela? Cela fonctionnera-t-il et at-il déjà été fait?
Notre table que nous souhaitons rechercher:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
Nous stockons donc le corps du texte brut pour un affichage physique. Les 2 autres colonnes sont utilisées pour les recherches qui sont précalculées de la manière suivante:
Soundex
Le corps est divisé en mots et traduit dans sa version soundex. IE, le corps résultant pourrait être quelque chose comme:
H252 B54 C23 E33... etc
Donc, quelqu'un pourrait entrer «dinosaure», et le corps de l'article se lit «dinosaure», ces deux valeurs sont évaluées en B26. Nous exécutons ensuite un LIKE sur la valeur soundex du terme de recherche.
Codé par caractère
Étant donné un mappage de caractères qui mappe les caractères aux nombres premiers, IE:
h = 2
e = 3
l = 5
o = 7
p = 11
c = 13
help = 2*3*5*11 = 330
hello = 2*3*5*5*7 = 1050
hell = 2*3*5*5 = 150
hlep = 2*5*3*11 = 330
cello = 13*3*5*5*7 = 6825
Si un utilisateur avait l'intention de taper «bonjour» mais qu'il a changé deux ou plusieurs caractères par exemple «hlelo», il évaluerait le même nombre. Divisez le corps brut en mots, encodez chaque mot et stockez-le dans la base de données en vous donnant un champ qui ressemble à:
330 6825 330 1050... etc
Nous pouvons alors aimer la recherche sur cette valeur pour faire correspondre les erreurs de frappe.
Avantages
- Typos protégés contre
- Orthographe incorrecte phonétique protégée contre
- Plus de langue maternelle anglaise non amicale
- Fonctionnera dans n'importe quelle langue (où soundex fonctionne)
Commentaires et réflexions? Une sorte de recherche multicouche. Vous pouvez bien sûr pondérer les valeurs de retour pour le rendre encore meilleur (IE une correspondance de corps de texte littéral vaut plus), mais est-ce une bonne solution pour les fautes d'orthographe et les anglophones non natifs effectuant des recherches?