从文本中提取主题关键字

时间:2016-01-07 16:10:13

标签: python python-2.7 nltk

我正在尝试从烹饪食谱中提取成分列表。为此,我在文件中列出了许多成分,然后根据配方检查所有这些成分。 代码如下所示:

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)

我正在寻找一种更有效的方法,因为可能的成分列表可能非常大。有什么想法吗?

2 个答案:

答案 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)标记,保留名词,然后排除引用teaspoonhandful等数量的名词。使用自定义停止列表。这将为您提供一个更小的列表来手动构建/维护,还有一个更短的列表来检查,如下所示:

ingredients = set(nouns) - set(stopwords)  # take the difference

在更有效地对食谱中的成分进行实际检查方面,你最好不要在你的食谱中加入单词(可能不值得在这里进行POS标记)和@jbrown建议的成分列表。 / p>