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