caractères accentuées avec Tsearch 2 sur Postgres - SQL/NoSQL - Programmation
MarshPosté le 25-05-2005 à 12:08:40
Bonjour,
J'ai tenté d'installer le module T-search 2 de PostgreSQL avec le dictionnaire français mais je rencontre un problème avec les mots accentués. Je voudrais que "lycée" et "lycee" ("société"-"societe", "accentué"-"accentue"...) soit considéré comme étant le même mot, qu'il n'y ait pas de distinction. Ceci permettrait d'avoir des résultats pertinents, y compris pour les personnes qui ne tapent pas les caratères accentués.
french.dict contient des lignes du genre (S précise que c'est un mot singulier, F précise que c'est un mot féminin) : lycopode/S lycose/S lycra lycène/S lycée/S lycéenne/F lyddite/S
french.aff permet de décoder les mots
french.stop contient des petits mots non inclus dans la recherche (le, la, les...)
J'ai ensuite une table t_avis, qui contient un champ avis et un vecteur de cet avis, renseigné avec : update t_avis set vectors=to_tsvector('fr',avis). C'est donc sur cette table que survient mon problème.
Ma question est donc : est-il possible que, lorsqu'une personne tape "lycee", on recherche dans le champ vectors comme si la personne avait tapé "lycée" ? Ou inversement, on recherche "lycee" dans le vecteur qui au préalable contient des mots non accentués. En sachant que "lycee" n'est pas reconnu comme étant un mot du dictionnaire.
Marsh Posté le 25-05-2005 à 12:08:40
Bonjour,
J'ai tenté d'installer le module T-search 2 de PostgreSQL avec le dictionnaire français mais je rencontre un problème avec les mots accentués. Je voudrais que "lycée" et "lycee" ("société"-"societe", "accentué"-"accentue"...) soit considéré comme étant le même mot, qu'il n'y ait pas de distinction. Ceci permettrait d'avoir des résultats pertinents, y compris pour les personnes qui ne tapent pas les caratères accentués.
Ma configuration est la suivante :
- dans la table pg_ts_dict :
dict_name
fr_ispell
dict_initoption
Dict_File=/usr/share/dict/french.dict,AffFile=/usr/lib/ispell/french.aff,StopFile=/usr/share/postgresql/contrib/french.stop
french.dict contient des lignes du genre (S précise que c'est un mot singulier, F précise que c'est un mot féminin) :
lycopode/S
lycose/S
lycra
lycène/S
lycée/S
lycéenne/F
lyddite/S
french.aff permet de décoder les mots
french.stop contient des petits mots non inclus dans la recherche (le, la, les...)
- dans la table pg_ts_cfg :
ts_name prs_name locale
fr default fr_FR
- dans la table pg_ts_cfgmap
ts_name tok_alias dict_name
fr email {simple}
fr file {simple}
fr float {simple}
fr host {simple}
fr hword {fr_ispell,simple}
fr int {simple}
fr lhword {fr_ispell,simple}
fr lpart_hword {fr_ispell,simple}
fr lword {fr_ispell,simple}
fr nlhword {fr_ispell,simple}
fr nlpart_hword {fr_ispell,simple}
fr nlword {fr_ispell,simple}
fr part_hword {simple}
fr sfloat {simple}
fr uint {simple}
fr uri {simple}
fr url {simple}
fr version {simple}
fr word {fr_ispell,simple}
J'ai ensuite une table t_avis, qui contient un champ avis et un vecteur de cet avis, renseigné avec :
update t_avis set vectors=to_tsvector('fr',avis).
C'est donc sur cette table que survient mon problème.
Ma question est donc : est-il possible que, lorsqu'une personne tape "lycee", on recherche dans le champ vectors comme si la personne avait tapé "lycée" ? Ou inversement, on recherche "lycee" dans le vecteur qui au préalable contient des mots non accentués.
En sachant que "lycee" n'est pas reconnu comme étant un mot du dictionnaire.
Merci beaucoup pour votre aide.