select similarity('GTudH', 'tud'),
similarity('GTudH', 'gtu'),
similarity('GTudH', 'gdh')
上面是Postgres的查询结果。有人能解释一下为什么第一个相似度得分只有0.1,而第三个是0.25吗?
用snowflake数据库进行了相同的测试,看起来不错:
| JAROWINKLER_SIMILARITY('GTUDH','TUD')|JAROWINKLER_SIMILARITY('GTUDH','GTU')|JAROWINKLER_SIMILARITY('GTUDH','GDH')|
| - -----|- -----|- -----|
| 八十六|九十|五十一|
1条答案
按热度按时间jmo0nnb31#
这是因为功能不同。PostgreSQL的
similarity()
函数是pg_trgm
扩展的一部分,它基于“三元组”(trigram)--单词中出现的三个字母的序列--计算相似度。虽然实际的算法略有不同(见源代码),但如果两个单词共享许多三元组,则认为它们相似。让我们看看
GTudH
的三元组:pg_trgm
前加两个空格,后加一个空格,因为单词开头的相似性被认为更重要。因此,
GTudH
与tud
共享一个三元组,与gtu
共享三个三元组,与gdh
共享两个三元组,这解释了不同的结果。“相似性”不是一个明确的概念,有许多不同的方法来定义它。