pg_trgm给我这两个比较的得分为0.4:
SELECT similarity('Noemie','Noémie');
0.4
SELECT similarity('Noemie','NoXmie');
0.4
显然第一个更多"相似"与第二种情况相比,口音通常在数据输入中被忽略,因此,对于字母具有高度相似性的分数非常有用,这些字母仅因缺少重音而变化。
他们是否可以通过调整pg_trgm来为不同重音的单词提供更高的相似度得分?
答案 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对此问题进行了很好的讨论。