聪明地比较“喜欢”

时间:2010-11-10 01:03:39

标签: java string comparison

假设您需要在2个文件中进行某种比较。您只需要在有意义的情况下执行此操作,换句话说,您不希望将JSON文件与属性文件或.txt文件与.jar文件进行比较

另外假设您有一个机制来对所有这些事情进行排序,现在归结为实际的文件名。您可能希望将“myFile.txt”与“myFile.txt”进行比较,而不是将“somethingElse.txt”进行比较。目标是尽可能接近“苹果对苹果”规则。

所以我们在这里,你有“myFile.txt”,另一方面你有“_myFile.txt”,“_ m_y_f_i_l_e.txt”和“somethingReallyClever.txt”。

任务是选择最接近的名称以便稍后比较。遗憾的是,找不到相同的名称。

观察角色构成,不难弄清楚这种关系是什么。我的算法说:

_myFile.txt   to   _m_y_f_i_l_e.txt                  0.312
_myFile.txt   to   somethingReallyClever.txt         0.16

所以_m_y_f_i_l_e.txt更接近于_myFile.txt然后是somethingReallyClever.txt。太棒了。但也说ist只有两倍的距离,实际上我们可以查看2个文件,并且永远不会想到将thingReallyClever.txt与_myFile.txt进行比较。

为什么?

你建议我采用什么逻辑,不仅可以通过在同一个地方设置字符来计算可能性,还可以测试确定的体重是否合理?

在我的例子中,somethingReallyClever.txt的权重应为0.0

我希望我很清楚。

请分享您的经验和想法。 (无论你建议什么方法,都不应该依赖于文件名的数量来构成)

2 个答案:

答案 0 :(得分:2)

可能有用的先前问题突出了几种可能的算法:

Word comparison algorithm

这些算法基于从一个字符串到另一个字符串需要多少更改 - 其中更改是添加字符,删除字符或替换字符。

当然,任何合理的指标都应该具有较低的分数,即意味着接近(认为两个字符串之间的距离)和较大的分数,因为意思不是那么接近。

答案 1 :(得分:0)

听起来你想要Levenshtein distance,也许是通过将两个单词预先转换为相同的大小写并对空格进行规范化来修改(例如用空字符串替换所有空格和下划线)