gpt4 book ai didi

c# - 从数据库中查找相似的人名

转载 作者:行者123 更新时间:2023-12-04 09:06:26 26 4
gpt4 key购买 nike

我在 MySql 中有一张表,里面有名字。我试图在给定输入名称的情况下在表中找到所有相似的名称。我听说过很多关于 Levenshtien/Damerau–Levenshtein 距离的信息,但它似乎不太适用于此,稍后我将解释我的推理。

详细说明:

  • 用户输入的名称可以包含五个单词。为了这个例子,假设输入的名字是“Juan Manuel Beldad”。
  • 我尝试在数据库中查找相似的名称。说数据库包括
    1. “Juan Beldad”(缺少中间名)
    2. “Juan Belded”(Belded 不是 Beldad)
    3. “Juan Manuel Sebastian Beldad”(额外的中间名)
  • 我按照最接近输入的顺序返回它们,在这种情况下,这将是:“Juan Beldad”,“Juan Belded”,“Juan Manuel Sebastian Beldad”

我质疑在这种情况下使用 Levenshtien/Damerau–Levenshtein 距离的原因是它无法很好地检测到额外的名称或缺失的名称。我对 Levenshtien 距离的理解是,它找到将一个词更改为另一个词所需的最小单字符编辑次数(插入、删除或替换)。因此,以下将被视为与原始字符串的距离相同。

Original string: "Juan Beldad"
Want to find: "Juan Manuel Beldad"
(7 character insertion)
Would also find: "Mike Bell"
(5 character substitution (M-i-k-e-l), 2 character deletion(a-d))

由于两者的编辑距离均为 7,因此“Mike Bell”与“Juan Beldad”的距离与“Juan Manuel Beldad”的距离相等。

我正在考虑查询数据库,删除输入端和表端的中间名,然后进行 Levenshtien/Damerau–Levenshtein 距离?我是不是想多了,还有更好的方法吗?

最佳答案

匹配名称时需要考虑很多可能的问题。其中一些是:

  • 昵称(鲍勃 - 罗伯特)
  • 错别字
  • 姓名交换(姓氏与名字交换)
  • 娘家姓
  • 姓名首字母
  • 截短的名字
  • 发音相似的名字(Jennifer - Jenny)

Damerau–Levenshtein 距离是 edit distance algorithms 之一您可以使用。每种算法都负责不同的操作(字符插入、替换、删除、交换等),两者都不是完美的,但每种算法都提供了两个字符串之间的距离。

您需要决定您可以接受多少误差(即正匹配的截止值)。您给出的示例包括至少 7 个操作。在那么多操作中,许多名称将返回相同的距离。

当比较名字时,你应该尝试通过规范化使双方具有可比性:例如,如果一方只有名字的第一个字母,你也应该在另一方做同样的事情,以便编辑距离算法给出你会得到更好的结果。

同样,如果对方没有中间名,您可以去掉中间名(您可以忽略中间名作为名字输入的情况)。但更好的替代方法是使用名称中所有可用的词生成所有可能的名字-姓氏对,然后查看是否有任何对会产生更好的编辑距离。您还可以单独比较每个单词并找到得分最高的最佳单词组合(权衡是忽略单词边界处的拼写错误)。

您还应该考虑使用 phonetic similarity algorithm除了 Damerau–Levenshtein 之外,还喜欢 Double Metaphone,并生成综合分数。语音算法是为特定的语系设计的,并试图确定两个名字在该语系中是否听起来相似。结果本身并不可靠(至少我的经验是这样),但这与编辑距离算法相结合将改善您的匹配。

为了降低错误率,应考虑额外的数据元素,如 ZIP、DOB 等。

最后,一切都取决于权衡:您的预期用例、您可接受的正匹配阈值、您的数据质量、时间/成本限制等。例如:您可以只需要第一个字母除了 Damerau–Levenshtein 距离之外,名字和姓氏的第一个字母要相同。这将通过忽略首字母拼写错误的权衡来减少误报池。

就像现在的许多事情一样,我认为通过训练有素的机器学习模型可以在这个领域取得最好的结果。我已经有一段时间没有在这个领域工作了,所以我不确定那里有什么,但你可能会找到一个很好的基于云的解决方案来获得最好的质量匹配,当然是收费的,如果这对你很重要的话。

您可以看到 overview of name matching techniques此处作为进一步阅读。

关于c# - 从数据库中查找相似的人名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63431855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com