【问题标题】:comparing "the likes" smartly巧妙地比较“喜欢”
【发布时间】:2010-11-10 01:03:38
【问题描述】:

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

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

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

任务是选择最接近的名称以供以后比较。很遗憾,没有找到相同的名称。

看人物构成,不难弄清楚是什么关系。我的算法说:

_myFile.txt 到 _m_y_f_i_l_e.txt 0.312 _myFile.txt 到 somethingReallyClever.txt 0.16

所以 _m_y_f_i_l_e.txt 更接近 _myFile.txt 然后是 somethingReallyClever.txt。极好的。但也说 ist 仅接近 2 倍,实际上我们可以查看这 2 个文件,并且永远不会考虑将 somethingReallyClever.txt 与 _myFile.txt 进行比较。

为什么?

你建议我应用什么逻辑,不仅可以通过在同一个地方放置字符来计算可能性,还可以测试确定的重量是否有意义?

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

我希望我是清楚的。

请分享您对此的经验和想法。 (您建议的任何方法都不应取决于文件名包含的字符数)

【问题讨论】:

标签: java string comparison


【解决方案1】:

可能有帮助的上一个问题突出了几种可能的算法:

Word comparison algorithm

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

当然,这里任何合理的指标都应该有低分表示接近(想想两个字符串之间的距离),而较大分表示不那么接近。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-17
      • 2015-03-11
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多