В своем энтузиазме по поводу STEMM-токены в лексемы движок полнотекстового поиска PostgreSQL также сокращает имена собственные. Например:
essais=> select to_tsquery('english', 'bortzmeyer');
to_tsquery
------------
'bortzmey'
essais=> select to_tsquery('english', 'balling');
to_tsquery
------------
'ball'
(1 row)
По крайней мере, для первого, я уверен, что его нет в английском словаре! Как лучше избежать этого ложного стемминга?
Вы можете использовать «простой» словарь, чтобы избежать стемминга. select to_tsquery('simple', 'bortzmeyer'); и select to_tsquery('simple', 'balling');.





Смысл алгоритмов выделения корней - это нет, чтобы сократить каждое слово до его правильной основы; цель состоит в том, чтобы свести одинаковые слова к общей основной форме. Как правило, цель состоит не в том, чтобы получить слово, которое можно было бы представить пользователю: даже если и «мяч», и «мяч» будут давать «kjebnkkekaa», алгоритм верен, потому что он по-прежнему рассматривает «мяч» и «мяч» как обычно относящиеся к делу. тоже самое.
Также имейте в виду, что ни один алгоритм стемминга не является абсолютно идеальным, для получения дополнительной информации искать алгоритм Портера Stemming
Это из-за стеммера Snowball, как объяснил здесь. В основном вы захотите отключить стеммер Snowball и использовать только iSpell или один из других словарей, но это также снизит эффективность стемминга слов, которых нет в словарях.
Я предполагаю, что это делается на предыдущем шаге, «объединении документов в токены», поскольку это пахнет использованием алгоритма, а не словаря.