检查文本中列表中的字符串是否返回第一个最长匹配项

时间:2016-09-07 16:14:10

标签: python

我正在尝试设计一个将短语或单词绑定到某个项目的应用程序,例如图像,并将短语 - 项目对保存在数据库中。然后它接收一个文本,如果它包含绑定短语,则应返回相应的项目。 它应该只返回整个文本的一个项目,并且最长的子串应该优先。

我写了一个返回预期值的函数:

from operator import itemgetter

def get_item(text, bindings): 
    text = text.lower()
    matches = []
    for phrase, item in bindings:
        phrase = phrase.lower()
        index = text.find(phrase)
        if index != -1:
            matches.append((phrase, item, index))
    if matches:
        matches.sort(key=lambda x: len(x[0]), reverse=True)
        matches.sort(key=itemgetter(2))
        item_id = matches[0][1]
    else:
        item_id = None
    return item_id

示例:

bindings = [
('i', 'item1'), ('like', 'item2'), ('i like', 'item3'), ('turtles', 'item4'),
]
text = 'I like turtles!'
print(get_item(text, bindings)) # should return item3

但是,是否有更简洁的方法可以完成这项任务,或者更快?

0 个答案:

没有答案