我需要将配方成分解析为适用于生产线的数量,量度,项目和描述,例如1杯面粉,2个柠檬皮和1杯红糖等.最好的方法是什么?我有兴趣在项目中使用python,所以我假设使用nltk是最好的选择,但我对其他语言开放.
我实际上是为我的网站做这个,现在它是其他人使用的开源项目的一部分.
我写了一篇关于我的技术的博客文章,享受!
http://blog.kitchenpc.com/2011/07/06/chef-watson/
纽约时报在解析食谱档案时遇到了这个问题。他们使用了称为线性链条件随机场(CRF)的NLP技术。这篇博客文章提供了很好的概述:
“使用条件随机字段从配方中提取结构化数据”
他们开源了代码,但很快就放弃了。我维护它的最新版本,并写了一些有关如何使其现代化的文章。
如果您正在寻找现成的解决方案,则有多家公司提供成分解析服务:
热情(全部披露:我是作者)
口性的
毛豆
我想这已经过去了几年了,但是我当时在想做类似的事情,并且遇到了这个问题,所以我想我可能会对它有所怀疑,以防对其他人有用。
即使您说要解析免费测试,大多数食谱的食谱列表也有相当标准的格式:每种成分都在单独的一行上,准确的句子结构很少那么重要。vocab的范围也相对较小。
一种方法是检查每一行中是否有单词,这些单词可能是表示数量的名词和单词/符号。我认为WordNet可能有助于查看一个单词是否可能是名词,但是我自己之前没有使用过它。另外,您也可以将http://en.wikibooks.org/wiki/Cookbook:Ingredients用作单词列表,尽管同样,我不知道它的全面性。
另一部分是识别数量。它们以几种不同的形式出现,但是数量很少,以至于您可能无法创建关键字列表。特别是,请确保您具有良好的错误报告。如果程序无法完全解析一行,请让它向您报告该行以及它已经/尚未被识别的行,以便您可以相应地调整关键字列表。
不管怎么说,我不保证其中任何一个都可以工作(并且几乎可以肯定不是100%可靠的),但这就是我开始解决这个问题的方式