【问题标题】:How to fuzzy search for a specific person into a list of people (concatenated surname+lastname)如何将特定人模糊搜索到人员列表中(串联姓氏+姓氏)
【发布时间】:2017-05-05 11:09:49
【问题描述】:

我正在尝试匹配这样的输入(来自第三方软件):

PIPPO CANASTA PER FT 501 del 1/11/2016

针对可以建模为字符串数组的人员列表(来自其他软件)

[
  ...
  "CANASTA              PIPPO"
  ...
]

如何使用 C# (.NET) 完成此任务?

【问题讨论】:

标签: c# .net fuzzy-search


【解决方案1】:

您可以将每个字符串拆分为一个单词数组,然后在列表中搜索最多匹配的元素:

string[] arrayToSearch = new string[] {
    "OTHER STUFF",
    "CANASTA              PIPPO",
    "MORE STUFF"
};

string stringToFind = "PIPPO CANASTA PER  FT 501 del 1/11/2016";

string[] wordsToFind = stringToFind.Split(default(Char[]), StringSplitOptions.RemoveEmptyEntries);

string bestMatch = arrayToSearch.OrderByDescending(
    s => s.Split(default(Char[]), StringSplitOptions.RemoveEmptyEntries)
          .Intersect(wordsToFind, StringComparer.OrdinalIgnoreCase)
          .Count()
).FirstOrDefault();

Console.WriteLine("Best match: " + bestMatch);
Console.ReadKey();            

【讨论】:

  • 这个建议很好很简单,我必须承认。我将添加某种逻辑(例如单词“权重”),因为当介词和/或缩写可能返回误导性结果时,我会遇到一些奇怪的情况
  • 改善上述搜索结果的一种简单方法是考虑匹配词的长度,但根据被搜索列表的大小和更新频率,您不妨考虑一些现成的 -提出解决方案。
  • 感谢您添加 sn-p。这比我最终得到的要少。
  • 我可以评估一些库,但我不知道从哪里开始。谷歌搜索并没有让我得到想要的结果
  • 我在我的工作中使用 SQL Server Full-text Index,它产生了相当不错的结果,我还看到了上面的一些纯 .net 实现,带有几层清理和过滤,效果也很好.
猜你喜欢
  • 2012-10-11
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
相关资源
最近更新 更多