Postgres pg_trgm 模块中的相似度是如何计算的
How is the similarity calculated in Postgres pg_trgm module
谁能给我解释一下在 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)
即2*nt / (n1 + n2) = 6/13 = 0.46
pg_trgm 相似度分数对我来说似乎异常低
公式见contrib/pg_trgm/trgm.h
(见宏CALCSML
),如下:
nt / (n1 + n2 - nt)
你的情况是 3 / (5+8-3) = 0.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)
即2*nt / (n1 + n2) = 6/13 = 0.46
pg_trgm 相似度分数对我来说似乎异常低
公式见contrib/pg_trgm/trgm.h
(见宏CALCSML
),如下:
nt / (n1 + n2 - nt)
你的情况是 3 / (5+8-3) = 0.3
。