【问题标题】:searching list of tens or few hundreds short text strings, sorting by relevance搜索几十或几百个短文本字符串列表,按相关性排序
【发布时间】:2010-08-26 04:01:42
【问题描述】:

我有一个要搜索的人员列表。我需要知道每个项目与它正在测试的字符串匹配的“多少”。

列表很小,目前有 100 多个名字,而且可能不会很快达到 1000 个。
因此,我认为将整个列表保存在内存中并使用 Java 提供的开箱即用的东西或使用一些仅实现一两个测试算法的小型库进行搜索是可以的。 (换句话说,没有引入任何存储索引或依赖数据库的复杂/矫枉过正的解决方案。)

请问在这种情况下你会怎么选?

编辑:似乎 Levenshtein 最接近我所需要的建议。只有当搜索查询是“John”并且列表中的名字明显更长时,才会很容易被愚弄。

【问题讨论】:

  • 这个过程的结果应该是什么?
  • 每个单一比较/匹配的结果将是一个代表相关性的浮点数,整个过程的结果将是相关性高于某个阈值的五个左右最佳匹配的列表。

标签: java string search


【解决方案1】:

您应该查看各种字符串比较算法,看看哪一种最适合您的数据。选项有 Jaro-Winkler、Smith-Waterman 等。查找 SimMetrics - 一个提供非常全面的字符串比较算法集的 F/OSS 库。

【讨论】:

  • 好吧,我已经对自己的距离计算功能进行了清理,该功能可以追溯到我的 PHP 时代。但我肯定会调查此事。感谢 mikOS。
【解决方案2】:

如果您正在寻找“多少”匹配项,您应该使用SoundexHere 是该算法的 Java 实现。

【讨论】:

  • 谢谢 Vijay,我会调查的。希望它能很好地处理非英语名称。
  • 即使是英文名称,我也不会使用 soundex。如果你检查它使用的算法(维基百科有很好的描述)你会发现它离完美还很远。
  • Soundex 有多个问题。可能不适合您的数据。请参阅下面的回复。
【解决方案3】:

【讨论】:

  • 这似乎没有返回相关性。也许我应该要求比较两个字符串...?
【解决方案4】:

根据我的说法,Jaro-Winkler 算法最适合您的要求。 这是Short summary of Jaro-Winkler Distance Algo 比较不同算法的 PDF 之一 --> Link to PDF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2012-11-09
    • 2011-01-26
    • 1970-01-01
    • 2012-12-27
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多