我试图为文档实现搜索引擎,所以我有我的索引:
{'term1': [[document_id1, term_frequency], [document_id2, term_frequency]......]},
{'term2': [[document_id3, term_frequency], [document_id2, term_frequency]......]}
依旧......
我应该要求一些条款并找到所有文件(已完成此部分), 但是如何才能找到我的词典列表中出现的所有doc_ids?
换句话说,我需要所有包含查询所有单词的文档。 我试过这个,但它没有用
def match(query):
match_docs=[]
for doc in find_doc(query):
for k,v in doc.items():
for j in v:
if j[0] in i:
match_docs.append(j)
return match_docs
例如
terms=[{'rose':[['3',2],['4',4]]},{'trains':[['3',4],['6',5]]}]
我需要它返回我' 3'
答案 0 :(得分:0)
鉴于一份文件,找到一个单词是否很简单:
>>> "plump" in open("ulysses.txt", 'r').read()
True
可以使用更复杂的查询来采用相同的方法:
>>> query = ["Stately", "plump", "Buck", "Mulligan"]
>>> [_ in open("ulysses.txt", 'r').read() for _ in query]
[True, True, True, True]
我将给出的最后一个提示是,如果iterable为空,或者all(iterable)
评估为True
,则bool(x)
函数返回True
所有的价值观。
>>> all([_ in open("ulysses.txt", 'r').read() for _ in query])
True
>>> all([_ in open("dubliners.txt", 'r').read() for _ in query])
False
你应该毫无疑问地扩展这种方法来检查更多文档。
答案 1 :(得分:0)
为每个查询创建一组文档,然后找到联合。如果查询是搜索词[[term1“,”term2“等]的列表,并且find_doc返回与任何搜索词匹配的所有文档的列表,那么您将希望一次匹配一个:
def match(query):
match_docs=[]
for q in query:
# generates a list of document IDs for one term at a time
match_docs.append([doc[0] for doc in find_doc([q])])
# get the intersection
# fixed this line in an edit
s = set(match_docs[0]).intersection(*match_docs)
return list(s)