📜  倒排索引

📅  最后修改于: 2021-09-09 11:17:02             🧑  作者: Mango

倒排索引是一种索引数据结构,存储从内容(例如单词或数字)到其在文档或一组文档中的位置的映射。简而言之,它是一个类似哈希图的数据结构,可以将您从一个词引导到一个文档或一个网页。

有两种类型的倒排索引:记录级倒排索引包含每个单词对文档的引用列表。单词级倒排索引还包含文档中每个单词的位置。后一种形式提供了更多的功能,但需要更多的处理能力和空间来创建。

假设我们要搜索文本“大家好”、“这篇文章是基于倒排索引的”、“这是一种类似hashmap的数据结构”。如果我们按(文本,文本中的单词)进行索引,则文本中具有位置的索引为:

hello                (1, 1)
 everyone             (1, 2)
 this                 (2, 1)
 article              (2, 2)
 is                   (2, 3); (3, 2)
 based                (2, 4)
 on                   (2, 5)
 inverted             (2, 6)
 index                (2, 7)
 which                (3, 1)
 hashmap              (3, 3)
 like                 (3, 4)
 data                 (3, 5)
 structure            (3, 6)

单词“hello”在文档 1(“helloeveryone”)中从单词 1 开始,因此有一个条目 (1, 1) 和单词“is”分别在文档 2 和 3 的“3rd”和“2nd”位置(这里的位置是基于单词)。
该指数可能具有权重、频率或其他指标。

建立倒排索引的步骤:

  • 获取文档
    去除停用词:停用词是文档中出现次数最多且无用的词,例如“I”、“the”、“we”、“is”、“an”。
  • 词根词干
    每当我想搜索“猫”时,我都想查看包含有关它的信息的文档。但是文档中出现的单词被称为“cats”或“catty”而不是“cat”。为了将这两个词联系起来,我将我阅读的每个词的一部分切掉,这样我就可以得到“词根”。有执行此操作的标准工具,例如“Porter’s Stemmer”。
  • 记录文档 ID
    如果单词已经存在,则将文档的引用添加到索引中,否则创建新条目。添加其他信息,如词频、词位置等。

例子:

Words                 Document
ant                   doc1
demo                  doc2
world                 doc1, doc2

倒排索引的优点是:

  • 倒排索引允许快速全文搜索,但代价是在将文档添加到数据库时增加处理。
  • 很容易开发。
  • 它是文档检索系统中最流行的数据结构,例如在搜索引擎中被大规模使用。

倒排索引也有缺点:

  • 更新、删除和插入的大存储开销和高维护成本。

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。