Skip to main content
 首页 » 编程设计

Python 多词索引

2025年05月04日10yxwkf

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