【问题标题】:Make suggestions based off of person's name根据人名提出建议
【发布时间】:2011-07-19 16:38:21
【问题描述】:

所以我搜索了模糊搜索,Levenshtein 距离算法,但我不确定是否真的适合我正在做的事情。请让我知道你的想法,如果有的话......

如何获取用户的全名并生成相似名称列表?我想通过提供“嘿,您确定这些都不是您”作为帐户创建之前的最后一步,防止用户在应用程序中创建多个帐户。

我找到了这篇文章,但它完全基于 SQL (http://stackoverflow.com/questions/988050/matching-records-based-on-person-name)

我正在使用 c#/Linq、SqlServer。

感谢您的宝贵时间!

【问题讨论】:

  • 我的建议是查看SOUNDEX(),但这也是您似乎反对使用的 SQL 解决方案。
  • 是的,我更愿意将它保存在 c# 中
  • 您也可以只使用您发布的 SQL 答案。只需创建一个存储过程并从 linq 调用它
  • 添加“规则”怎么样?因此,如果输入 John Doe,我会去除空格、非 alpha 字符,以 'johndoe' 结尾。我应用了一个长度“规则”,说查询的名称需要在 'johndoe' 的长度上是 +/- x。我也可以应用一个类似字符的阈值,比如 80%。有什么想法吗?
  • 仅供参考,如果您正在实现一个可供公众使用的应用程序,出于安全原因,显示现有用户名不是一个好主意。

标签: c# name-matching


【解决方案1】:

这是 .NET 中 SOUNDEX 实现的链接:

http://www.codeproject.com/KB/recipes/soundex.aspx

我没用过,但是评价不错

【讨论】:

    【解决方案2】:

    如果是我,我会要求对姓氏进行精确匹配,然后只尝试猜测名字的差异。这会大大缩小你的工作范围。

    然后,正如您在 cmets 中建议的那样,您可以应用 +/- 几个名字长度字符的规则,以及假设 (80%) 字符必须匹配的阈值。

    此外,您只能查看也匹配前 X 个字符的名字,因为大多数英文名称偏差将在 X 个字符之后。

    例子:

    • 约翰·多伊
    • 约翰尼·多伊
    • Johnathan Doe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多