反向索引

原文:https://www.geeksforgeeks.org/inverted-index/

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

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

假设我们要搜索文本"hello everyone", "this article is based on inverted index", "which is hashmap like data structure"。 如果我们按(文本,文本中的单词)索引,则文本中具有位置的索引为:

 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)

文档 1 中的单词"hello""hello everyone")以单词 1 开头,因此条目(1, 1, 1)以及文档 2 和 3 中的单词"is"分别位于第三和第二位置 (此处的位置基于单词)。

索引可以具有权重,频率或其他指标。

建立反向索引的步骤

  • 提取文档

    停用词的删除:停用词是文档中最常出现且无用的词,例如"I", "the", "we", "is", "an"

  • 单词的词根

    每当我要搜索"cat"时,我都想查看包含有关其信息的文档。 但是文档中出现的单词称为"cats""catty",而不是"cat"。 为了将这两个词联系起来,我将砍下每个阅读的词的一部分,以便获得“词根”。 有一些执行此操作的标准工具,例如 Porter 的词干提取器。

  • 记录文档 ID

    如果单词已经存在,则将文档引用添加到索引,否则创建新条目。 添加其他信息,例如单词的频率,单词的位置等。

对所有文档重复上述操作,并对单词排序。

示例

Words                 Document
ant                   doc1
demo                  doc2
world                 doc1, doc2

反向索引的优点是

  • 反向索引允许快速的全文本搜索,但当将文档添加到数据库时,其代价是处理量增加。

  • 很容易开发。

  • 它是文档检索系统中最流行的数据结构,例如在搜索引擎中得到了大规模使用。

反向索引也有缺点

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

反向索引与正向索引之间的差异