python中的位置索引?

python中的位置索引?,python,Python,我能够创建一个倒排索引,但我不能完全实现位置索引。位置索引的格式为[doc\u ID,pos\u 1,pos\u 2,…] 这里doc_ID表示单词出现在哪个文档中,以及它出现在文档中的哪个位置 例如,index=位置索引(['a','b','a','a',['a','c']) 当用户输入索引['a']时,它将返回[[0,0,2],[1,0]] 下面的代码用于所提到的反向索引。我不知道还要添加什么才能使其成为位置索引: def positional index(tokens): d =

我能够创建一个倒排索引,但我不能完全实现位置索引。位置索引的格式为
[doc\u ID,pos\u 1,pos\u 2,…]

这里doc_ID表示单词出现在哪个文档中,以及它出现在文档中的哪个位置

例如,
index=位置索引(['a','b','a','a',['a','c'])
当用户输入
索引['a']
时,它将返回
[[0,0,2],[1,0]]

下面的代码用于所提到的反向索引。我不知道还要添加什么才能使其成为位置索引:

def positional index(tokens):
    d = defaultdict(lambda:[])

    for docID, t_list in enumerate(tokens):
        for t in t_list:
            d[t].append(docID)

return d

非常感谢您的帮助。

您可以使用以下功能:

>>> def find_index(l,elem) :
...   return [[i]+[t for t,k in enumerate(j) if k==elem] for i,j in enumerate(l)]
... 
>>> find_index(l,'a')
[[0, 0, 2], [1, 0]]

这里需要的所有内容都是在两个列表理解中使用
枚举

使用您自己的代码,您只需要使用一个集合为每个元素和docID添加索引,以避免重复键:

def positional_index(tokens):
    d = defaultdict(lambda:[])
    for docID, sub_l in enumerate(tokens):
        for t in set(sub_l):
            d[t].append([docID] + [ind for ind, ele in enumerate(sub_l) if ele == t])
    return d

In [9]: index=  positional_index([['a','b','a'], ['a','c']])

In [10]: index["a"]
Out[10]: [[0, 0, 2], [1, 0]]
In [11]: index["b"]
Out[11]: [[0, 1]]

In [12]: index["c"]
Out[12]: [[1, 1]]

对于
a
的索引,
[[0,0,2],[1,0]]
背后的逻辑是什么?你的解释不清楚“a”位于文档0、位置0和2以及文档1位置0中。基本上,第一个数字是哪个[]以0开头,wards后面的其余数字是[]中“单词”(本例为“a”)的位置……这也以zerois
\uuuuu getitem\uuuu
样式访问开始(即
索引['a']
)强制?如果不是,那么卡斯拉·阿德的答案是nice@Anentropic,它只存储一个索引,您必须调用并为每个要检查的项目创建一个列表,其中只需要创建一个dictonce@PadraicCunningham好的方面是
defaultdict(lambda:[])
不同于
defaultdict(list)
?@IceArdor,这里的差别很小,通常您在执行类似于
defaultdict(lambda:defaultdict(list))
的操作时会使用它,但使用使用python 2的lambda实际上似乎效率略高一些