如果速度很重要并且您必须处理词类,而不是存储短语和词类的列表,您应该考虑将其存储为单词树,这样孩子的深度就是它在短语中的位置。这样,您可以简单地查询每个级别,并且随着您向上移动,搜索范围会缩小。一旦找不到单词,您就知道该短语未列出。
这是一个非常幼稚的实现,仅作为您的示例。您甚至可以将其实现为像这样的嵌套字典,但如果您的数据很大且是动态的,您可能应该使用数据库:
tree = {'he':
{'had':
{'the': {'nerve': {}, 'power': {}, 'gift': {}},
'a': {'car': {}, 'bike': {}},
'an': {'airplane': {}, 'awful': {'smell': {}}}
}
}
}
def find_phrase(phrase, root):
if not phrase:
return True
try:
next = root[phrase[0]]
return find_phrase(phrase[1:], next)
except KeyError:
return False
return False
assert find_phrase(['he', 'had', 'the', 'nerve'], tree) is True
assert find_phrase(['he', 'had', 'the', 'power'], tree) is True
assert find_phrase(['he', 'had', 'the', 'car'], tree) is False
assert find_phrase(['he', 'had', 'an', 'awful', 'smell'], tree) is True
assert find_phrase(['he', 'had', 'an', 'awful', 'wife'], tree) is False