PostgreSQL pg_trgm, не понимаю, как работает word_similarity
От: serjjj Россия  
Дата: 04.10.25 13:37
Оценка:
Почему в первом случае значение 0.6666667, а в двух других 0.5?


=# SELECT word_similarity('abc def', 'abc 123 def') as "similarity 1", word_similarity('abc def', 'abc 123 456 def') as "similarity 2", word_similarity('abc def', 'abc 123 456 789 def') as "similarity 3";
 similarity 1 | similarity 2 | similarity 3 
--------------+--------------+--------------
    0.6666667 |          0.5 |          0.5
(1 row)
Re: PostgreSQL pg_trgm, не понимаю, как работает word_similarity
От: BlackEric http://black-eric.lj.ru
Дата: 04.10.25 17:39
Оценка: 81 (2)
Здравствуйте, serjjj, Вы писали:


S>Почему в первом случае значение 0.6666667, а в двух других 0.5?



Если в кратце, то

word_similarity ( text, text ) → real

Возвращает число, представляющее наибольшую степень схожести между набором триграмм в первой строке и любым непрерывным фрагментом упорядоченного набора триграмм во второй строке. Подробнее об этом рассказывается ниже.


F.33. pg_trgm — поддержка определения схожести текста на основе триграмм

|W1 ∩ W2| / G , (1)

где

• W1 – набор слов первого аргумента,

• W2 – набор слов некоторого непрерывного отрезка слов второго аргумента,

• G – max(|W1|, |W2|).

Из всех возможных отрезков второго текста берётся тот, для которого значение (1) максимально.

Функция не симметрична: word_similarity(a,b) обычно ≠ word_similarity(b,a).

Первый текст совпадает сразу с двумя словами в единственном трёхсловном
отрезке 'abc 123 def' → 2/3.

• В более длинных строках эти два слова разделены, поэтому
наилучший отрезок содержит только одно совпадение из двух → 1/2.
https://github.com/BlackEric001
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.