Jongler avec les dictionnaires dans Tsearch2 - SQL/NoSQL - Programmation
MarshPosté le 25-03-2009 à 17:03:43
Bonjour,
J'indexe une grosse base de données d'informations historiques, seulement voilà, le seul dictionnaire existant, fr_ispell, contient peu de (voire aucune) personnalités historiques.
Je pourrais augmenter le dictionnaire, mais ça me paraît inutile, pour peu qu'on puisse tout de même trouver certains mots.
J'ai essayé avec la config standard (anglaise) et la config française. Voici les résultats sur la même phrase :
Code :
select * from ts_debug('je suis un président appelé mitterrand');
Dans le premier cas, il trouve tous les mots, ne sachant pas comment récupérer leur racine. Dans le second, il gère les racines (à priori) sauf pour la personnalité, pour qui il rend le mot "vide". Ce qui empêche toute recherche sur ce mot. En gros, si un mot n'est pas dans le dictionnaire, impossible de le trouver, ce qui est plutôt impossible à utiliser.
J'ai parcouru diverses docs sur le sujet, sans bien trop comprendre comment tout ça fonctionne. Notamment, j'ai vu qu'il était possible de trouver la racine des mots avec plusieurs stemmeurs :
Citation :
General rule: For each lexeme type it's possible to specify which dictionaries and in what order, will be used to process lexeme. This information is stored in table pg_ts_cfgmap. For example:
Note, that once lexeme gets recognized by one dictionary it will not pass to the next dictionary ! So, it's meaningless to specify {simple, en_stem}, or {en_stem, astrosyn}, because 'simple' and 'en_stem' recognize any lexeme by definition.
En gros, je ne sais pas comment faire. Il n'y a pas que les dictionnaires qui entrent en jeu, car dans deux conditions presque identiques (la différence étant l'intégration du dictionnaire français dans le second cas), on a deux résultats différents...
Marsh Posté le 25-03-2009 à 17:03:43
Bonjour,
J'indexe une grosse base de données d'informations historiques, seulement voilà, le seul dictionnaire existant, fr_ispell, contient peu de (voire aucune) personnalités historiques.
Je pourrais augmenter le dictionnaire, mais ça me paraît inutile, pour peu qu'on puisse tout de même trouver certains mots.
J'ai essayé avec la config standard (anglaise) et la config française. Voici les résultats sur la même phrase :
Dans le premier cas, il trouve tous les mots, ne sachant pas comment récupérer leur racine. Dans le second, il gère les racines (à priori) sauf pour la personnalité, pour qui il rend le mot "vide". Ce qui empêche toute recherche sur ce mot. En gros, si un mot n'est pas dans le dictionnaire, impossible de le trouver, ce qui est plutôt impossible à utiliser.
J'ai parcouru diverses docs sur le sujet, sans bien trop comprendre comment tout ça fonctionne. Notamment, j'ai vu qu'il était possible de trouver la racine des mots avec plusieurs stemmeurs :
General rule: For each lexeme type it's possible to specify which dictionaries and in what order, will be used to process lexeme. This information is stored in table pg_ts_cfgmap. For example:
Note, that once lexeme gets recognized by one dictionary it will not pass to the next dictionary ! So, it's meaningless to specify {simple, en_stem}, or {en_stem, astrosyn}, because 'simple' and 'en_stem' recognize any lexeme by definition.
Source
J'ai essayé en configurant français puis simple, en prenant soin d'ajouter aussi pour "word" :
On le retrouve bien à l'exécution de la première requête, mais toujours rien :
Pire, en ne mettant que "simple", pour me rapprocher de la configuration par défaut, rien ne change :
En gros, je ne sais pas comment faire. Il n'y a pas que les dictionnaires qui entrent en jeu, car dans deux conditions presque identiques (la différence étant l'intégration du dictionnaire français dans le second cas), on a deux résultats différents...
Help quoi...