【发布时间】:2015-07-13 09:28:00
【问题描述】:
考虑以下字符串:
- 嘿嘿
- 再见
- 你好
- =(再见)
- (他)(llo)
- 再见
- 氦
我正在尝试以相似的词组合在一起的方式对这些进行排序,我知道
-
alphanumerical sorting不是一个选项 - 删除特殊字符
",-_ and etc然后比较肯定会有所帮助,但结果不会像我希望的那样好。
注意:
可能有几个不同的期望输出,其中之一是:
期望的输出:
- 你好
- 嘿嘿
- (他)(llo)
- 氦
- 再见
- 再见
- =(再见)
所以我的问题是,如果有一个 java 包可以比较字符串并最终根据它对它们进行排序。
我听说过诸如n-gram 和skip-gram 之类的术语,但不太了解它们。我什至不确定它们是否对我有用。
更新: 寻找相似之处当然是我的问题的一部分,但主要问题是排序部分。
【问题讨论】:
-
也许您正在搜索的领域是 NLP,自然语言处理,正如您提到的
hello(helium) 和goodbye一起。 soundex 算法已建立,但对空格没有帮助。 -
@dognose thx 链接,我可以看到它对比较非常有用。但这种方法限制了排序。它如何用于排序?
-
@nafas 您可以为此使用自定义比较器。您只需要针对“特定”表达式计算相似度指数,并根据该值进行排序。例如,如果你引用“foo bar”,“foo baz”和“baz bar”应该得分高,而“hello world”应该得分低。也许识别“看起来相似”的元素,将它们分组排列,然后按字母顺序对组进行排序也是有意义的。
-
@dognose 它大部分时间都不起作用。例如,假设“foo bar”与“blah”比较为 0.1,与“double”比较也是 0.1,但并不一定意味着“blah”和“double”相似。它会变得非常非常复杂
标签: java sorting string-comparison