pg_trgm如果只有重音变化,如何给出更高的相似度得分

时间:2016-09-05 13:38:04

标签: postgresql

pg_trgm给我这两个比较的得分为0.4:

SELECT similarity('Noemie','Noémie');
0.4 

SELECT similarity('Noemie','NoXmie');
0.4 

显然第一个更多"相似"与第二种情况相比,口音通常在数据输入中被忽略,因此,对于字母具有高度相似性的分数非常有用,这些字母仅因缺少重音而变化。

他们是否可以通过调整pg_trgm来为不同重音的单词提供更高的相似度得分?

1 个答案:

答案 0 :(得分:2)

我首先建议您从字符集中删除重音符号。 Postgres提供了执行此操作的功能unaccent(),但您需要单独安装它。 Here是有关该主题的信息。

使用此功能(或类似功能),您可以执行以下操作:

SELECT similarity(unaccent('Noemie'), unaccent('Noémie'));

同样处理这两个值可能会走得太远。两者的加权平均值可能更合适:

SELECT (alpha * similarity(unaccent('Noemie'), unaccent('Noémie'0)) + 
        (1 - alpha) * similarity('Noemie', 'Noémie')
       )

alpha将是介于0和1之间的值,用于对重音字符的相似性进行加权。

Here对此问题进行了很好的讨论。