我正在尝试从烹饪食谱中提取成分列表。为此,我在文件中列出了许多成分,然后根据配方检查所有这些成分。 代码如下所示:
ingredients = ['sugar', 'flour', 'apple']
found = []
recipe = '''
1 teaspoon of sugar
2 tablespoons of flour.
3 apples
'''
for ingredient in ingredients:
if ingredient in recipe:
found.append(ingredient)
我正在寻找一种更有效的方法,因为可能的成分列表可能非常大。有什么想法吗?
答案 0 :(得分:2)
您可以拆分输入和使用集:
ingredients = set(['sugar', 'flour', 'apple'])
recipe_elements = set([i.strip() for i in recipe.split(' ')])
used_ingredients = ingredients & recipe_elements # the intersection
您可能需要对输入进行各种清理,具体取决于您从哪里获取。你需要进行基准测试,看看这实际上是否更好,并且它与用户输入'apple'的'apple'不匹配,如你的例子中没有额外的工作(例如,使所有东西都是单数)。
答案 1 :(得分:1)
您可以使用nltk
尝试词性(POS)标记,保留名词,然后排除引用teaspoon
,handful
等数量的名词。使用自定义停止列表。这将为您提供一个更小的列表来手动构建/维护,还有一个更短的列表来检查,如下所示:
ingredients = set(nouns) - set(stopwords) # take the difference
在更有效地对食谱中的成分进行实际检查方面,你最好不要在你的食谱中加入单词(可能不值得在这里进行POS标记)和@jbrown建议的成分列表。 / p>