倒排索引(Inverted Index)是信息检索系统中最常用的数据结构之一,它用来存储在全文搜索下某个单词存在于哪些文档或数据记录中。与传统的正排索引(文档到关键词的映射)不同,倒排索引建立了从关键词到文档的映射,这大大提高了搜索查询的效率。
倒排索引主要由两部分组成:单词词典(Lexicon)和倒排列表(Inverted List)。单词词典是所有文档的单词集合,每个单词都指向其对应的倒排列表。倒排列表记录了单词在哪些文档中出现,以及在该文档中的位置信息等。
构建倒排索引的过程通常包括以下步骤:
假设我们有三个文档:
Doc1: "The quick brown fox jumped over the lazy dog."
Doc2: "Quick foxes jump over lazy dogs in summer."
Doc3: "Lazy dogs don't jump high."
构建倒排索引的步骤如下:
分词:
建立单词词典:
生成倒排列表:
这里的数字表示单词在文档中的位置(通常是单词在文档中的序号,实际中可能更复杂,如偏移量等)。
# 假设文档集已经分词
documents = {
'Doc1': ['the', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog'],
'Doc2': ['quick', 'foxes', 'jump', 'over', 'lazy', 'dogs', 'in', 'summer'],
'Doc3': ['lazy', 'dogs', "don't", 'jump', 'high']
}
# 构建倒排索引
inverted_index = {}
for doc_name, words in documents.items():
for word in words:
if word not in inverted_index:
inverted_index[word] = []
# 记录单词在文档中的位置(这里简化为只记录文档名)
inverted_index[word].append(doc_name)
# 打印倒排索引
for word, doc_list in inverted_index.items():
print(f"{word}: {doc_list}")
这段代码会输出每个单词及其在哪些文档中出现。请注意,这只是一个基本示例,并没有处理单词的位置信息或文档权重等高级特性。在实际应用中,倒排索引的构建和查询会更加复杂和高效。
倒排索引是一种高效、可扩展的查询数据结构,在搜索引擎和信息检索等领域具有广泛的应用前景。