【发布时间】:2011-03-20 17:57:03
【问题描述】:
我有一组相当大的字符串(比如 100 个),其中包含许多以相似性为特征的子组。我正在尝试找到/设计一种算法,可以合理有效地找到这些组。
例如,假设输入列表在左下方,输出组在右侧。
Input Output
----------------- -----------------
Jane Doe Mr Philip Roberts
Mr Philip Roberts Phil Roberts
Foo McBar Philip Roberts
David Jones
Phil Roberts Foo McBar
Davey Jones =>
John Smith David Jones
Philip Roberts Dave Jones
Dave Jones Davey Jones
Jonny Smith
Jane Doe
John Smith
Jonny Smith
有没有人知道任何合理有效地解决这个问题的方法?
查找相似字符串的标准方法似乎是 Levenshtein 距离,但我看不出如何在这里充分利用它,而不必将每个字符串与列表中的每个其他字符串进行比较,然后以某种方式决定关于判断两个字符串是否在同一组中的差异阈值。
另一种方法是将字符串散列为整数的算法,其中相似的字符串散列为在数轴上靠得很近的整数。我不知道那会是什么算法,如果存在的话
有人有什么想法/指点吗?
更新: @Will A:也许名字不像我最初想象的那么好。作为一个起点,我想我可以假设在我将使用的数据中,字符串中的一个小变化不会使它从一个组跳到另一个组。
【问题讨论】:
-
您希望您的算法如何处理一系列字符串,其中每个字符串都与前一个非常细微的不同,但第一个与最后一个有很大不同?
-
好问题。作为一个起点,我不太担心这一点,因为我希望字符串组在我期望的数据中是相当不同的。我还应该补充一点,对于列表中的每个实体,我将至少有一个其他维度(已经是数字)以帮助进行分组,因此字符串比较部分不必是 100% 完美的。
标签: algorithm string design-patterns