句子索引

时间:2011-09-07 01:50:10

标签: algorithm hash indexing

我有几万个简短的文件,每个文件由10到20个英文句子组成(以及一些其他非句子的东西,比如HTML格式或其他“垃圾”)。这些文件从其他较长的文件中删除 - 换句话说,较短的文件“A1”可能是原始文件“A”的第10至20句,另一个较短的文件“A2”可能是同一文件原件的第11至25句“A”,以及一些原始源文档可能是其他原始源文档的摘要或副本,因此原始源文档“B”也可能包含原始源文档“A”的句子10到20,尽管不一定在同一地点。同一组句子可能已经从“B”提取到另一个短文档“B3”中。

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

我在想我需要的是一些代码来为一个句子制作一个有效的哈希码,这个句子很可能为两个不同的句子产生相同的哈希码。 Java String.hashCode()中使用的哈希算法是一个不错的选择吗? MD5或其他加密哈希看起来似乎太昂贵,并且为此目的而过度杀伤。

2 个答案:

答案 0 :(得分:5)

我最近评估了哈希算法,要求在几百万个输入中几乎不存在哈希冲突的可能性,并且哈希必须非常快。 CityHash是胜利者,不负责任。

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

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

答案 1 :(得分:1)

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