2008-12-09 4 views
2

Dans son enthousiasme à stemm tokens into lexemes, le moteur de recherche de texte intégral de PostgreSQL réduit également les noms propres. Par exemple:Empêcher la génération de noms propres dans PostgreSQL?

essais=> select to_tsquery('english', 'bortzmeyer'); 
to_tsquery 
------------ 
'bortzmey' 

essais=> select to_tsquery('english', 'balling'); 
to_tsquery 
------------ 
'ball' 
(1 row) 

Au moins pour le premier, je suis sûr que ce n'est pas dans le dictionnaire anglais! Quelle est la meilleure façon d'éviter ce faux enracinement?

+0

Je suppose que c'est l'étape précédente, "parer des documents en jetons" qui fait cela, car il sent l'utilisation d'un algorithme plutôt que d'un dictionnaire. –

+0

Vous pouvez utiliser le dictionnaire 'simple' pour éviter le bourrage. 'select to_tsquery ('simple', 'bortzmeyer');' et 'select to_tsquery ('simple', 'balling'); – davmor

Répondre

4

Le point des algorithmes de bourrage est et non pour réduire chaque mot à sa racine appropriée; le but est de réduire les mots qui ressemblent à une forme commune. Le but n'est généralement pas d'obtenir un mot qui puisse être présenté à l'utilisateur: même si 'balling' et 'ball' produiraient tous les deux 'kjebnkkekaa' l'algorithme est correct car il voit toujours 'balling' et 'ball' la même chose.

Aussi méfiez-vous qu'aucun algorithme de lemmatisation est absolument parfait, pour plus d'infos look up the Porter Stemming algorithm

2

Cela est dû à l'égrappoir de boule de neige comme expliqué here. Fondamentalement, vous voudrez désactiver le stemmer Snowball et utiliser juste iSpell ou l'un des autres dictionnaires, mais cela réduirait également l'efficacité du stemming pour les mots qui ne sont pas dans les dictionnaires.

Questions connexes