python - 合并 SQL 数据库中的相似条目

标签 python sql postgresql

我有一个数据库,我在其中记录了一个电视节目的嘉宾以及他们出现在哪些剧集中。主要是我有三个表:

guest (姓名、身份证)

剧集(日期、主题、ID)

EpisodeGuest(剧集 ID、GuestID)

然而,经过检查,我发现许多客人的名字被多次记录,但他们的名字拼写略有不同。当我从网站上抓取客人的外貌时,这有点超出了我的控制范围。

例子:

Peter N. Larsson

彼得·N·拉尔森

Peter N. Larson

这些名字现在被记录为多次出现的多位客人。如何在不手动进行的情况下将这些合并为同一个人?客人输入的是姓氏和姓氏,因此在所有情况下,可以说,两个名字之间只有 3 个字符不同,可以安全(足够)说这是同一位客人。

最好的合并方法是遍历每个名​​字,搜索 3 个字符以内的相似内容,然后通过编辑 EpisodeGuest 表进行合并吗?

最佳答案

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;

关于python - 合并 SQL 数据库中的相似条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41408733/

相关文章:

python - 对应于所有唯一行的所有行的平均值

python - 使用 python 添加新列,具体增加四分之一

php - 将 1 个表列中的文本与另一个表列中的部分字符串匹配

ruby-on-rails - 如何在 ActiveRecord 中为每个唯一列值获取 2 条或更多记录?

SQL 与 NOSQL : Which to use for this schema?

Postgresql 关系不存在

python - 维护Python中输入和输出之间的顺序

python - 一个 Java 人问 : why should I learn Python?

sql - 选择具有3个内部联接的DISTINCT值

SQL Server : query simplification - many joins and a giant WHERE section