Python倒排索引构建:网页文件关键词搜索实战
Python倒排索引构建:网页文件关键词搜索实战
您是否曾为在大量网页文件中查找特定关键词而烦恼?倒排索引技术为此类问题提供了高效解决方案。本文将带您使用Python构建倒排索引,实现对本地网页文件的快速关键词搜索。
代码示例
以下代码示例展示了如何利用Python构建倒排索引,并利用哈希表进行优化:pythonimport os
class InvertedIndex: def init(self): # 使用字典存储倒排索引 self.index = {}
def add_document(self, doc_id, document): # 将文档拆分成单词列表 words = document.split() # 对每个单词进行处理 for word in words: # 如果单词已经在索引中,将文档ID添加到对应的倒排列表中 if word in self.index: self.index[word].add(doc_id) # 否则,创建新的倒排列表并添加文档ID else: self.index[word] = {doc_id}
def build_index(self, directory): # 遍历目录下的所有文件 for filename in os.listdir(directory): if filename.endswith('.html'): file_path = os.path.join(directory, filename) with open(file_path, 'r', encoding='utf-8') as file: content = file.read() # 提取标题和网址 title = content.split('<title>')[1].split('</title>')[0] url = content.split('URL: ')[1].split('
')[0] # 构建文档 document = title + ' ' + url # 获取文档ID(文件名去除扩展名) doc_id = os.path.splitext(filename)[0] # 添加文档到倒排索引 self.add_document(doc_id, document)
def search(self, query): # 将查询字符串拆分成单词列表 words = query.split() # 初始化结果集 result = set() # 对每个单词进行处理 for word in words: # 如果单词在索引中,将对应的倒排列表与结果集取交集 if word in self.index: result.intersection_update(self.index[word]) return result
示例用法index = InvertedIndex()index.build_index('path/to/directory')query = 'search query'result = index.search(query)print('Search results:', result)
代码解析
-
InvertedIndex类: -__init__方法:初始化倒排索引字典self.index。 -add_document方法:将文档添加到索引中,将每个单词作为键,对应的文档ID列表作为值。 -build_index方法:遍历指定目录下的所有HTML文件,提取标题、网址,构建文档并添加到索引。 -search方法:根据输入的查询关键词,返回包含所有关键词的文档ID集合。 -
示例用法: - 创建
InvertedIndex对象。 - 调用build_index方法,传入存放HTML文件的目录路径,构建倒排索引。 - 调用search方法,传入查询关键词,获取搜索结果。
注意事项
- 示例代码假设网页文件命名格式为
关键词.html,需根据实际情况修改。- 实际应用中,需考虑异常处理、HTML标签去除等细节问题。
总结
本文介绍了如何使用Python构建倒排索引,并提供详细代码示例和注释。倒排索引是实现快速关键词搜索的重要技术,希望本文能帮助您更好地理解和应用该技术。
原文地址: https://www.cveoy.top/t/topic/Yyy 著作权归作者所有。请勿转载和采集!