我有两个地点名称列表,拼写,大写等略有不同。
我正在尝试将第一个列表中的每个网站与第二个列表中最相似的网站进行匹配。
SELECT name1, name2 FROM table1, table2
WHERE levenshtein(name1, name2) < 3
沿着正确的路线行进,却引发了一些误报。如果我可以选择Levenshtein距离最小的记录,那么大多数都会被避免。
在Python中,我希望这样做:
for row1 in table1:
min_dist = 100
for row2 in table2:
dist = levenshtein(row1.name, row2.name)
if dist < min_dist:
min_dist = dist
closest_name = row2.name
row1.newcolumn = closest_name
这可能在postgresql
吗?
答案 0 :(得分:1)
如果我正确理解您的问题,对于每个name1
,您正在寻找最接近的name2
。这可以通过子查询完成,类似:
SELECT
name1,
(SELECT name2
FROM table2
WHERE levenshtein(name1, name2) < 3
ORDER BY levenshtein(name1, name2)
LIMIT 1
)
FROM table1
我假设你自己定义了levenshtein
。