倒排索引搜索算法

时间:2014-02-05 16:43:27

标签: algorithm sorting set information-retrieval inverted-index

考虑到人们在谷歌中搜索了100亿个单词。相应 对于每个单词,您都有所有文档ID的排序列表。该列表如下所示:

[Word 1]->[doc_i1,doc_j1,.....]
[Word 2]->[doc_i2,doc_j2,.....]
...
...
...
[Word N]->[doc_in,doc_jn,.....]

我正在寻找一种算法来查找100个罕见的单词对。 一个罕见的单词对是一对单词出现在一起(不一定是连续的) 正好是1个文件。

如果可能的话,我正在寻找比O(n ^ 2)更好的东西。

2 个答案:

答案 0 :(得分:2)

  1. 你根据它们出现的文件数量来排序。这里的想法是,很少发生的单词也很少成对出现。如果您发现只出现在一个文档中的单词,只需从该文档中选择任何其他单词即可完成。
  2. 然后开始反转索引,从最稀有的单词开始。这意味着您可以创建一个地图,其中每个文档都指向其中的一组单词。首先,您只使用最稀有的单词创建倒排索引。将与该最稀有字相关联的所有文档插入到倒排索引后,您将得到一个地图,其中每个文档只指向一个单词。
  3. 然后按照(1.)中创建的顺序添加下一个单词及其所有文档。在某些时候,您会发现与倒置地图中已存在与单词关联的文档。在这里,如果它们形成如此罕见的单词对,则检查与该文档相关的所有单词。
  4. 事物的表现在很大程度上取决于你要找到100对这样的对,你的想法是你只需要处理总数据集的一小部分。为了利用您只处理一小部分数据这一事实,您应该使用(1.)一种排序算法,该算法允许您在整个集合排序之前很久就找到最小的元素,例如快速排序。然后可以像O(N * log(N1))那样进行排序,其中N1是在找到100对之前实际需要添加到倒排索引的单词数。其他操作的复杂性,即向倒排索引添加单词检查单词对是否出现在多个文档中也与每个文档的数量呈线性关系单词,所以这些操作应该在开始时快速,然后慢下来,因为以后你每个单词都有更多的文档。

答案 1 :(得分:0)

这与“频繁项集挖掘”相反

即检查最近的出版物:Rare pattern mining: challenges and future perspectives