【问题标题】:How is the similarity calculated in Postgres pg_trgm modulePostgres pg_trgm 模块中的相似度是如何计算的
【发布时间】:2018-02-19 19:03:44
【问题描述】:

谁能给我解释一下 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 相似度分数对我来说似乎异常低

【问题讨论】:

    标签: postgresql pg-trgm


    【解决方案1】:

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

    nt / (n1 + n2 - nt)
    

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

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 2021-05-16
      • 2017-10-07
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 2013-03-18
      • 2021-07-10
      相关资源
      最近更新 更多