29

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

4

5 回答 5

30

我实际上是为我的网站执行此操作,该网站现在是供其他人使用的开源项目的一部分。

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

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

于 2011-08-12T01:43:11.467 回答
15

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

他们开源了他们的代码,但很快就放弃了。我维护了它的最新版本,并写了一些关于我如何对其进行现代化改造的文章。

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

于 2018-09-12T21:54:33.447 回答
5

我想这是几年前的事了,但我正在考虑自己做一些类似的事情并遇到了这个问题,所以我想我可能会尝试一下,以防它对 f 中的其他人有用

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

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

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

Aaanyway,我不保证这一切都会奏效(而且几乎可以肯定不是 100% 可靠),但这就是我开始解决问题的方式

于 2011-03-03T15:15:42.023 回答
3

这是一个不完整的答案,但是您正在考虑编写一个自由文本解析器,正如您所知,这并不简单:)

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

  1. 为“形容词”和“动词”构建单词列表,并过滤它们
    1. 测量单位形成一个封闭的集合,使用单词和缩写,如 {L., c, cup, t, dash}
    2. 说明——切、切、煮、剥。在这之后发生的事情几乎肯定是成分
  2. 请记住,您主要是在寻找名词,您可以获取一个带标签的非名词列表(例如来自 WordNet)并过滤它们。

如果您更有野心,可以查看NLTK Book的解析器章节。

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

于 2008-10-20T14:40:57.950 回答
-1

您能更具体地说明您的输入是什么吗?如果您只有这样的输入:

1 cup flour
2 lemon peels
1 cup packed brown sugar

完全不使用任何 NLP 来解析它不会太难。

于 2008-10-15T08:22:58.480 回答