index = {'Michael': [['mj.com',1], ['Nine.com',9],['i.com', 34]], /
'Jackson': [['One.com',4],['mj.com', 2],['Nine.com', 10], ['i.com', 45]], /
'Thriller' : [['Seven.com', 7], ['Ten.com',10], ['One.com', 5], ['mj.com',3]}
# In this dictionary (index), for eg: 'KEYWORD':
# [['THE LINK in which KEYWORD is present,'POSITION
# of KEYWORD in the page specified by link']]
eg: Michael is present in MJ.com, NINE.com, and i.com at positions 1, 9, 34 of respective pages.
请帮助我编写一个将 index
和 KEYWORDS
作为输入的 python 程序。
当我输入 'MICHAEL'
时。结果应该是:
>>['mj.com', 'nine.com', 'i.com']
当我输入 'MICHAEL JACKSON' 时。
结果应该是:
>>['mj.com', '九网']
因为“Michael”
和“Jackson”
出现在 “mj.com”
和 “nine.com”
连续,即分别在位置 (1,2) & (9,10)。结果不应显示 'i.com'
,即使它包含两个 KEYWORDS 但它们不是连续放置的。
当我输入 'MICHAEL JACKSON THRILLER',
结果应该是
['mj.com']
因为 'MICHAEL', 'JACKSON', 'THRILLER'
这 3 个词在 'mj.com'
中连续放置,即位置 (1, 2, 3)分别。
如果我输入 'THRILLER JACKSON'
或 'THRILLER FEDERER',
结果应该是 NONE
。
最佳答案
作为旁注,Udacity Intro to CS 恰好涵盖了这个问题。这对正确的输入做出了一些假设(基本上它永远不会遇到任何不正确的输入)。
def lookup(index,KEYWORDS):
kw = KEYWORDS.split()
if len(kw) == 1:
return [site[0] for site in index[kw[0]]]
else:
positions = {}
result = []
kw = KEYWORDS.split()
for kword in kw:
for site in index[kword]:
positions[(kword,site[0])]=site[1]
for i in range(0,len(kw)-1):
cur_urls = [site[0] for site in index[kw[i]]]
next_urls = [site[0] for site in index[kw[i+1]]]
if i == 0:
result = cur_urls
for url in cur_urls:
if url in next_urls:
if not (positions[kw[i+1],url]-positions[kw[i],url]) == 1:
result.remove(url)
else:
if url in result:
result.remove(url)
return result
关于Python 多词索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572225/