Bon, je vous explique mon soucis qui m’empèche de dormir la nuit.
J’ai créé dans le cadre d’un projet de fin d’études une base de données sous PostgreSQL (me demandez pas pourquoi ce SGBD… c’est le choix des profs ) et je dois faire des recherches en mode « full text » dans cette base de données.
En gros, une recherche en mode texte plein c’est une recherche du genre « Le chien du voisin »… enfin les recherches que l’on fait tous les jours sous Google ou autre MSN search quoi.
Bon, normalement en SQL pur on fait ça avec des LIKE ‹ %youpie tralala% ›… sauf que
- c’est pas efficace surtout si on doit chercher dans 30 champs différents
- si l’utilisateur tapes comme recherches ‹ la banlieue qui brûle ›… ben il aura tous les documents qui ont banlieue et brûle (c’est bien), mais aussi tous les documents qui contiennent qui et la (c’est mal… vu que ça doit être presque la quasi-totalité des documents). Du coup, l’utilisation des LIKE est relativement nulle… à moins de se faire ch… à faire une liste des mots qu’il ne doit pas rechercher. De plus, impossible de retrouver un texte qui contiendrait « la banlieue va brûler » vu que ‹ brûle › et ‹ brûler › c’est pas pareil.
- les LIKE c’est pas ce qu’il y a de plus efficace… mais bon là à la limite je m’en fous.
Heureusement, sous PostgreSQL il y a un truc qui s’appelle Tsearch2 et qui permet « normalement » de faire des recherches de ce genre en créant un super index des champs que l’on souhaite rechercher et qui permet de faire des recherches dans ces indexs. Pour ce faire, il utilise un super dictionnaire… et c’est là qu’est le drame… le dictionnaire anglais marche vraiment super… mais le dictionnaire français ne marche pas mais alors pas du tout.
Je m’explique, j’ai suivi les instructions fournies sur le site officiel de Tsearch2 pour installer le dictionnaire français disponible ici et qui est le dico de iSpell.
Bon, j’ai bien suivi toutes les instructions, mais manque de bol ça n’a pas l’air de fonctionner pour plusieurs raisons:
Déjà le dictionnaire en lui-même est totalement inefficace. Le but de ce dictionnaire est de lexémiser les mots, par exemple, pour le mot chercheurs il devrait me renvoyer chercheur, tout comme pour le mot chercheuse. Ce qui permet de, lorsque je recherche chercheuse avoir aussi les documents qui contiendrait chercheur ou chercheurs ou chercheuses. Bref, ça devrait marcher. Manque de bol avec le dictionnaire iSpell ce crétin me renvoie « chercheuse » pour « chercheurs » et « chercheur » pour « chercheur »… en gros ça marche pas.
En plus, il ne reconnaît pas les caractères accentués, par exemple si je lexémise « couronné » ben je reçois rien en retour… ce qui est encore plus ennuyeux que l’autre soucis parce que je ne pourrais jamais chercher de mots avec des caractères accentués.
J’ai bien trouvé un autre dictionnaire (celui de Snowball qui est aussi compatible avec Tsearch2) et qui semble beaucoup plus efficace, mais impossible de l’installer. J’ai PostgreSQL sous Windows et toutes les explications pour l’installation de dictionnaires Snowball sont sous Linux, avec des commandes make etc… J’ai bien essayé de faire la manip sous Cygwin, mais ça ne me rend pas des fichiers que je pourrais utiliser après sous Windows…
Bref, désolé pour le pavé mais je suis dans la mouise avec cette histoire, alors si quelqu’un a une solution à mon problème, ou une alternative à Tsearch2… je suis preneur.
Si jamais ma base de données est en UTF-8… pour le soucis de caractères accentués… mais ça ne devrait pas poser de soucis et en SQL-SCSI ça fait la même chose il me semble.