【问题标题】:Index of sentences句子索引
【发布时间】:2011-09-07 01:50:09
【问题描述】:

我有数以万计的短文档,每个文档包含 10 到 20 个英文句子(以及其他一些非句子内容,例如可能是 HTML 格式或其他“垃圾”)。这些文档是从其他较长的文档中删除的——换句话说,较短的文档“A1”可能是原始文档“A”的第 10 到 20 句,而另一个较短的文档“A2”可能是同一文档原始文档的第 11 到 25 句“A”,并且一些原始源文件可能是其他原始源文件的摘要或副本,因此原始源文件“B”也可能有原始源文件“A”的第 10 到 20 句,尽管不一定在相同的位置。同一组句子可能已经从“B”中提取到另一个短文档“B3”中。

对于每个句子,或者至少每个句子超过一定长度(例如,> 3 个单词长),我想生成一个包含该句子的每个短文档的列表。我想扫描现有的更短的文档并生成该索引,并在我将更长的原始源文档分解为更短的文档时更新该索引。

我在想我需要一些代码来为一个句子生成一个有效的哈希码,它为两个不同的句子生成相同哈希码的可能性非常低。 Java String.hashCode() 中使用的哈希算法是一个不错的选择吗? MD5 或其他加密散列似乎对于此目的来说太昂贵且过度杀伤力。

【问题讨论】:

    标签: algorithm hash indexing


    【解决方案1】:

    我最近评估了哈希算法,要求在几百万个输入中几乎没有哈希冲突的可能性,并且哈希必须非常快。 CityHash 是赢家,毫无疑问。

    如果您对计算哈希冲突的概率感兴趣,该主题有时被称为生日问题。它背后的数学原理在这里:

    https://sites.google.com/site/craigandera/craigs-stuff/odds-ends/the-birthday-problem-calculator

    【讨论】:

    • 根据链接页面上的描述,“彻底混合输入位”满足低概率冲突要求,“不适合密码学”意味着它可能很快。感谢您提供此链接 +1。
    • @Ray:没错,这是一个(非常)好的分布,但在密码学上并不健全。我自己对大量数据集的测试表明分布几乎完全均匀。
    【解决方案2】:

    更广泛地说,您可能会从阅读this book 中受益。您所描述的结构是一个经典的倒排索引:这本书描述了用于创建、更新和执行有趣查询的高效算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-08
      • 2011-02-19
      • 2014-07-15
      • 2016-10-12
      • 2016-11-01
      • 1970-01-01
      • 2010-10-18
      • 2019-08-29
      相关资源
      最近更新 更多