3

有人可以向我解释一下 Postgres pg_trgm 模块中的相似度函数是如何计算的吗?

例如similarity('sage', 'message') = 0.3

1) "  s"," sa",age,"ge ",sag
2) "  m"," me",age,ess,"ge ",mes,sag,ssa

n1: cardinality(1) = 5
n2: cardinality(2) = 8
nt: cardinality(1 intersect 2) = 3

我看不出我们如何从这 3 个量中得到一个等于 0.3 的公式。我本来希望它基于一个常见的字符串相似性度量(例如 Dice-Sorensen)

IE2*nt / (n1 + n2) = 6/13 = 0.46

pg_trgm 相似度分数对我来说似乎异常低

4

1 回答 1

3

该公式可以在contrib/pg_trgm/trgm.h(参见宏CALCSML)中找到,如下所示:

nt / (n1 + n2 - nt)

在你的情况下是3 / (5+8-3) = 0.3.

于 2018-02-20T09:24:42.760 回答