我正在编写一些 Python 代码来实现我最近学习的一些与倒排索引/发布列表相关的概念。我对 Python 很陌生,在某些情况下很难理解它的效率。
从理论上讲,创建一组文档 D 的倒排索引,每个文档都有一个唯一的 ID,doc_id
应该包括:
- 解析/执行 D 中每个文档的词法分析
- 删除停用词,执行词干等。
- 创建所有
(word,doc_id)
对的列表 - 对列表进行排序
- 将重复项压缩为
{word:[set_of_all_doc_ids]}
(倒排索引)
第 5 步通常是通过一个包含带有元数据(词频、字节偏移)的词和指向发布列表(它出现在其中的文档列表)的指针的字典来执行的。发布列表通常被实现为允许有效随机插入的数据结构,即链表。
我的问题是 Python 是一种高级语言,直接使用内存指针(以及链表)之类的东西似乎超出了范围。我在分析之前进行了优化,因为对于非常大的数据集,众所周知,必须最大化效率才能在合理的时间内保留任何计算索引的能力。
SO上有其他几篇关于Python倒排索引的帖子,就像我当前的实现一样,它们使用字典将键映射到列表(或集合)。是否期望这种方法与允许直接编码指向链表的指针的语言具有相似的性能?