位置索引在python中?

时间:2015-01-26 20:37:01

标签: python

能够创建倒排索引,但我无法完全实现位置索引。位置索引的格式为[doc_ID, pos_1, pos_2, ...]

此处doc_ID表示该单词出现在哪个文档中以及该文档中出现的位置。

实施例。 index = positional_index(['a','b','a'], ['a','c']]) 当用户输入index['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

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用以下功能:

>>> 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]]

您需要的所有内容都是在两个列表理解中使用enumerate

答案 1 :(得分:1)

使用您自己的代码,您只需要为每个元素和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]]