我有一个数据库,用于记录电视节目的客人以及他们出现的剧集。主要是我有三张桌子:
访客(姓名,身份证)
剧集(日期,主题,ID)
EpisodeGuest(Episode ID,GuestID)
然而,经过检查,我发现许多客人被记录了几次,其名称的拼写略有不同。当我从网站上看到客人的样子时,这有点不可控制。
示例:
Peter N. Larsson
Peter N Larsson
Peter N. Larson
现在,这些名称被记录为具有多个外观的多个来宾。如何在不手动操作的情况下将这些合并为同一个人?客人输入姓氏和姓氏,所以在所有情况下,比方说,两个名称之间只有3个字符不同,其安全(足够)说它是同一个客人。
最好的方法是将其合并以通过每个名称,在3个字符内搜索远程相似的内容,并通过编辑EpisodeGuest表进行合并吗?
答案 0 :(得分:2)
评论太长了。
Postgres有一个名为fuzzystrmatch的模块。该模块包含可以提供帮助的功能。我倾向于建议Levenshtein距离,但你可能会发现模块中的其他功能对你有效。
我会告诫你这个方法。首先,两个名字看起来非常相似的事实并不意味着他们是同一个人。其次,您需要手动检查结果。
然而,这个想法是让候选人使用这样的东西:
select t.name, t2.name
from t join
t2
on levenshtein(t.name, t2.name) < 4 and -- arbitrary number
t.name <> t2.name;