根据相似性对字符串进行排序

时间:2015-07-13 09:28:00

标签: java sorting string-comparison

考虑以下字符串:

  • 他llo
  • 再见
  • 你好
  • =(再见)
  • (他)(LLO)
  • 再见

我试图以这样的方式对这些进行排序,以至于类似的单词汇集在一起​​,我知道

  1. alphanumerical sorting不是一个选项
  2. 删除特殊字符",-_ and etc然后进行比较肯定有帮助,但结果不会像我希望的那样好。
  3. 注意:

    可能没有多少不同的期望输出,其中一个是:

    期望的输出:

    1. 你好
    2. 他llo
    3. (他)(LLO)
    4. 再见
    5. 再见
    6. =(再见)
    7. 所以我的问题是,如果有一个java包比较字符串并最终根据它进行排序。

      我听说过n-gramskip-gram这样的术语,但对它们并不十分了解。我甚至不确定它们是否对我有用。

      更新: 找到相似之处肯定是我的问题的一部分,但主要问题是排序部分。

1 个答案:

答案 0 :(得分:4)

这是一种可能的方法。

计算每对字符串之间的edit distance/Levenshtein distance,然后使用查看字符串作为边缘权重来自编辑距离的完整图形。选择这些权重的阈值并删除所有权重。然后在此图表中找到cliques。如果您的阈值相当低,甚至可能会选择连接组件。

注意: 也许最好用@dognose发布的链接中的一个相似性度量替换一些编辑距离。 另外,请注意,如果您有大量字符串

,那么查找派系的速度会非常慢