查看这些功能的postgres 文档,您无法对 Double Metaphone 的编码字符串的长度进行参数控制。在单个 Metaphone 的情况下,您只能截断输出字符串:
max_output_length
设置输出变音位码的最大长度;如果更长,则输出被截断到这个长度。
Trigram Similarity
但是,通过使用或使用任一变音位方法的编码输出,您可能会获得更好的结果Levenshtein Distance
——这可能是使用变音位处理语音排列的更强大的方法。
例子
考虑艺术家可能的所有拼写排列Cyndi Lauper
,使用具有三元相似性的双变音位,我们可以在不正确的字符串cindy lorper
和正确的拼写之间实现 100% 的相似性:
SELECT similarity(dmetaphone('cindy lorper'), dmetaphone('cyndi lauper'));
产量:(similarity real: 1
即:100% 相似度)
这意味着使用 Double Metaphone 的两个输入字符串的编码是相同的。使用 Metaphone 时,它们略有不同。以下所有产量SNTLRPR
SELECT metaphone('cyndy lorper',10);
SELECT metaphone('sinday lorper', 10);
SELECT metaphone('cinday laurper', 10);
SELECT metaphone('cyndi lauper',10);
产生:SNTLPR
只有一个字符不同SNTLRPR
您还可以使用 Levenshtein Distance 来计算它,它为您提供了一个可过滤的参数来使用:
SELECT levenshtein(metaphone('sinday lorper', 10), metaphone('cyndi lauper', 10));
产量:levenshtein integer: 1
它适用于较长的名称,但对于像 Lee 和 John 这样的名称则有点不精确。
如果没有更完整的reprex,要确切地看到您遇到的问题有点困难。
SELECT similarity(dmetaphone('lee'), dmetaphone('leigh'));
SELECT similarity(dmetaphone('jon'), dmetaphone('john'));
两者都产生:(similarity real: 1
即:100% 相似性)
编辑:这是一个易于遵循的指南,用于与 postgres 进行模糊匹配