2012-01-19 263 views
8

我有两个表,我需要在PostgreSQL中合并在公共变量“公司名称”上。不幸的是,许多公司名称并不完全匹配(即一张表中的MICROSOFT,另一张中的MICROSFT)。我尝试从“公司”或“inc”或“ltd”这两个栏目中删除常见单词,以试图在两个表格中标准化名称,但我在考虑其他策略时遇到了麻烦。有任何想法吗?匹配模糊字符串

谢谢。

另外,如果需要的话我可以在R.

回答

7

做到这一点你有没有考虑在fuzzystrmatch模块?您可以使用soundex,difference,levenshtein,metaphonedmetaphone或其组合。

fuzzystrmatch documentation

SELECT something 
FROM somewhere 
WHERE levenshtein(item1, item2) < Carefully_Selected_Threshold 

例如从MICROSOFT的Microsft的Levenshtein距离是一(1)。

levenshtein(dmetaphone('MICROSOFT'), dmetaphone('MICROSFT') 

以上返回零(0)。结合levenshtein和dmetaphone可以帮助你匹配大量的拼写错误。

+0

另请考虑pg_trgm,我在重复数据删除方案中取得了很大的成功。 – maniek