给定一个长字符串,在字典中找到匹配的字符串

Given a long string, find the matching strings in the dictionary

假设我们有一本字典,其关键字是食物名称。

用户可以输入食物名称字符串(即 "banana yogurt steak cheese cake"),为了简单起见,我们假设所有内容都是小写的,并且没有食物名称在字符串中出现超过一次。

从字典中找出食物名称字符串中出现的哪些关键字的最有效方法是什么?假设有可能根本没有键出现,也有可能食物名称字符串仅由字典键组成。

这是为了自学目的。使用 Suffix Trie 似乎是一个不错的选择,但我不确定如何优化它(因为在这种情况下可能有多个匹配)如果有众所周知的定理或参考资料,我将不胜感激。

PS。感谢您的回答,但唯一的问题是食品名称不需要一个字长。让我们想想这样的事情。

"mild coffee ice cream"

这是一个4字长的字符串,但只有2个食物名称:mild coffee, ice cream

您可以使用 set intersection 来达到这个目的:

set(food_string.split()) & food_dict.keys()

请注意 dict.keys(),虽然不是 set,但支持 set API。

如果无法识别食物名称的明确边界(例如space </code>),则可以使用以下内容:</p> <pre><code>[k for k in food_dict if k in food_string]

你是这个意思吗?

dict = {
  "banana": "answer1",
  "steak": "answer1",
  "cheese": "answer1"
}
input = "banana yogurt steak cheese cake"
for word in input.split():
    print (word)
    if word in dict:
        print ("true")

输出:

banana
true
yogurt
steak
true
cheese
true
cake

如果不是一个字:

dict = {
  "banana milk shake": "answer1",
  "steak": "answer2",
  "ice cream": "answer3",
  "salad dressing": "answer4"
}
input = "banana milk shake yogurt steak cheese ice cream cake"
for key in dict:
    print (key)
    if key in input:
        print ("true")
    else:
        print ("false")

输出:

banana milk shake
true
steak
true
ice cream
true
salad dressing
false