fts: позиции лексемм - зачем они?

tadmin
Дата: 19.02.2015 14:46:58
В tsvector размечены позиции лексемм.
select to_tsvector('fox sleeping in a box');

'box':5 'fox':1 'sleep':2

В то же время, поиск по коннотациям или строгому порядку слов недоступен.
Зачем нужна разметка позиций в документе, если ей нельзя воспользоваться?
Или же можно, но или я невнимателен?
smagen
Дата: 19.02.2015 15:14:04
tadmin,
позиции слов используются при расчёте релевантности.
grufos
Дата: 19.02.2015 17:10:21
tadmin,
вот две хорошие статьи по реализации FTS в PostgreSQL
[url=]http://www.sai.msu.su/~megera/postgres/talks/fts_pgsql_intro.html[/url]
[url=]http://rus-linux.net/lib.php?name=/MyLDP/subd/pgfts.html[/url]
в PostgreSQL есть возможность маркировать слова принадлежащими к разным секциям, которых правда всего может быть 4
Каждой секции можно назначать свой вес и уже потом получать лучшую релевантность поиска.
tadmin
Дата: 19.02.2015 17:53:15
smagen
позиции слов используются при расчёте релевантности.

Понимаю. Но в tsquery запросить расстояние между словами я не могу. Верно?
Для поиска коннотаций близость имеет абсолютное значение, а релевантность меняется гладко, поэтому результат ненадежен.
Да и вычислять ее дорого.

Теоретически, для выявления близко расположенных слов можно поместить нормализованные лексеммы и их позиции из tsvector в jsonb. Но тогда теряется функционал FTS. Придется "в лоб" сравнивать лексеммы.

2 all: кто-нибудь делал подобные попытки?

grufos,
Про set_weight я знаю, но для выявления коннотаций в произвольных текстах четырех маркеров будет явно недостаточно.
Misha Tyurin
Дата: 19.02.2015 22:36:38
tadmin,

более формально можно определить "коннотаций" в вашем случае
tadmin
Дата: 19.02.2015 23:06:01
Misha Tyurin,

Употребление слова в связке с другим позволяет (иногда) определить смысл.
Например "мамин халат" и "Мамин-Сибиряк" содержат одну одну и ту же форму одной лексемы, но с разным контекстом и семантикой. Или знание о том, что в длинном тексте упомянуты red & box & big & fox, не позволяет судить о цвете лисы и размере коробки. Абсолютные же позиции лексем в тексте дают возможность установить связку между ними, когда слова идут подряд или разделены стоп-словами. Для русского и английского, как минимум, это неплохое приближение.
Misha Tyurin
Дата: 19.02.2015 23:19:37
tadmin,

http://www.postgresql.org/docs/9.4/static/textsearch-controls.html
ну, если быть точными, то позиции нам нужны тут

12.3.3. Ranking Search Results

ts_rank_cd

бла бла

This function requires lexeme positional information to perform its calculation.

--
но. тут же читаем:
"
However, the concept of relevancy is vague and very application-specific. Different applications might require additional information for ranking, e.g., document modification time. The built-in ranking functions are only examples. You can write your own ranking functions and/or combine their results with additional factors to fit your specific needs.
"

You can write your own ranking functions

в приделах движка, да.

--
но интересно, где вам надо такую "точную" релевантность. чем плохо показать и

автор
"мамин халат" и "Мамин-Сибиряк"


сразу. Юзер и сам не знает, что ему надо, а уж мы и тем более. пусть решает может сам юзер?
Ы
Дата: 19.02.2015 23:22:17
Misha Tyurin,
скорее всего, имелись в виду коллокации

tadmin,
для поиска коллокаций есть разные инструменты, можно, напр., попробовать прикрутить к PostgreSQL модуль Text::NSP с CPAN.
Misha Tyurin
Дата: 19.02.2015 23:28:17
Ы,

ну да, возможно и так
tadmin
Дата: 20.02.2015 09:30:18
Ы - прав. Имел в виду коллокации.
За Text:NSP - отдельное спасибо.