我如何使用NLP来解析配方成分?

时间:2008-10-15 03:57:20

标签: parsing nlp

我需要将配方成分分解为适用于生产线的数量,量度,项目和描述,例如1杯面粉,2个柠檬皮和1杯红糖等。什么是最好的方法这样做?我有兴趣在项目中使用python,所以我假设使用nltk是最好的选择,但我对其他语言开放。

5 个答案:

答案 0 :(得分:24)

我实际上是为我的网站执行此操作,该网站现在是其他人使用的open source project的一部分。

我写了一篇关于我的技术的博客文章,享受!

http://blog.kitchenpc.com/2011/07/06/chef-watson/

答案 1 :(得分:6)

《纽约时报》 在解析食谱档案时遇到了这个问题。他们使用了称为线性链条件随机场(CRF)的NLP技术。这篇博客文章提供了很好的概述:

他们开源了代码,但很快就放弃了。我维护the most up-to-date version,并wrote a bit进行现代化改造。

如果您正在寻找现成的解决方案,则有几家公司提供成分解析服务:

答案 2 :(得分:5)

我想这已经过去了好几年了,但是我想自己做了类似的事情并遇到了这个问题,所以我想如果它对f中的其他人有用,我可能会对它进行一次尝试

即使你说要解析免费测试,大多数食谱都有一个非常标准的食谱清单格式:每个成分都在一个单独的行上,确切的句子结构很少是那么重要。词汇范围也相对较小。

一种方法可能是检查每一行可能是名词的单词和表示数量的单词/符号。我认为WordNet可能有助于查看一个单词是否可能是一个名词,但我之前没有使用它。或者,您可以使用http://en.wikibooks.org/wiki/Cookbook:Ingredients作为单词列表,但同样,我不确切地知道它有多全面。

另一部分是识别数量。它们有几种不同的形式,但很少,你可以创建一个关键字列表。特别是,请确保您有良好的错误报告。如果程序无法完全解析某一行,请让它向您报告该行的内容,以及它已识别/未识别的内容,以便您可以相应地调整关键字列表。

Aaanyway,我不保证任何一个都可行(并且几乎可以肯定不是100%可靠)但是我就是这样开始解决问题的方法

答案 3 :(得分:3)

这是一个不完整的答案,但你正在考虑编写一个自由文本解析器,如你所知,这是非常重要的:)

使用烹饪特有的知识作弊的​​一些方法:

  1. 构造“形容词”和“动词”的单词列表,并对其进行过滤
    1. 测量单位形成一个封闭的集合,使用单词和缩写,如{L.,c,cup,t,dash}
    2. 说明 - 切,骰子,煮,剥皮。在此之后发生的事情几乎肯定是成分
  2. 请记住,您主要是在寻找名词,并且您可以使用标记的非名词列表(例如,来自WordNet)并对其进行过滤。
  3. 如果你更有野心,你可以在解析器章节中查看NLTK Book

    祝你好运!这听起来像是一个可行的项目!

答案 4 :(得分:0)

您能更具体地了解您的意见吗?如果你有这样的输入:

1 cup flour
2 lemon peels
1 cup packed brown sugar

在不使用任何NLP的情况下解析它并不会太难。