能够创建倒排索引,但我无法完全实现位置索引。位置索引的格式为[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
非常感谢所有帮助。
答案 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]]