我有一组要求,我正在寻找要使用的最佳基于Java的策略/算法/软件。基本上,我想用真实的人用自然英语输入的一组食谱成分,然后将元数据解析为结构化格式(请参阅下面的要求以查看我要执行的操作)。
我在这里和其他地方四处张望,但没有发现任何有关下一步发展方向的高级建议。因此,我将其交给聪明的人:-):
解决此问题的最佳/最简单方法是什么?我应该使用自然语言解析器,dsl,lucene/solr或其他工具/技术吗? NLP似乎可以工作,但是看起来确实很复杂。我宁愿不花大量时间进行深入研究,只是发现它无法满足我的需求或找到更简单的解决方案。
要求
给定这些配方成分说明...。
我想把它变成这个。
| ----- | --------- | ------------- | ------------------- ------ | -------- | ----------- || ---------------------------------- ---------- | ------------- |
| |测量| |重量重量| |
| #|值|测量成分|值|测量准备|品牌名称
| ----- | --------- | ------------- | ------------------- ------ | -------- | ----------- || ---------------------------------- ---------- | ------------- |
| 1. | 8 |杯子|混合蔬菜| 5 |盎司| -| -|
| 2. | 8 | -|去皮鸡大腿| 1.5 |磅| -| -|
| 3. | 6.5 |大汤匙|特级初榨橄榄油| -| -| -| -|
| 4. | 6 |盎司|烟熏三文鱼| -| -|切成薄片,切成条| -|
| 5. | 2 | -|整只鸡| 3.5 |磅| -| -|
| 6. | 20 |盎司|切碎的菠菜| -| |解冻-|
| 7. | .5 |杯子|帕玛森芝士| -| -|磨碎| -|
| 8. | .5 |杯子|山核桃| -| -|烤,磨碎| -|
| 9. | .5 |杯子|普通面包屑混合物| -| -| -| Dixie Diner |
| 10. | 8 | -|大蒜丁香| 4 |茶匙|切碎-|
| 11. | 8 | -|葱| -| -|切成两块| -|
| ----- | --------- | ------------- | ------------------- ------ | -------- | ----------- || ---------------------------------- ---------- | ------------- |
注意描述的多样性。有些东西是缩写,有些不是。有些数字是数字,有些是拼写的。
我希望可以进行完美的解析/翻译。但是,会满足于一些相当不错的开始。
额外的问题:在提出策略/工具后,您将如何做?
谢谢!
乔
最佳答案
简短的答案。使用 GATE 。
长答案。您需要一些工具来识别文本中的模式。可以捕获诸如以下内容的模式:
{Number}{Space}{Ingredient}
{Number}{Space}{Measure}{Space}{"of"}{Space}{Ingredient}
{Number}{Space}{Measure}{Space}{"of"}{Space}{Ingredient}{"("}{Value}{")"}
...
在
{Number}
是数字的情况下,{Ingredient}
是从成分词典中提取的,{Measure}
是从字典量度中提取的,依此类推。我描述的模式与GATE的 JAPE规则非常相似。使用它们,您可以捕获与模式匹配的文本,并为模式的每个部分(编号,成分,小节等)分配一些标签。然后,您提取带标签的文本并将其放入单个表中。
我提到的字典可以用GATE中的地名词典表示。
因此,GATE可以满足您的所有需求。这不是最简单的开始,因为您至少必须学习GATE的基础知识,JAPE规则和宪报,但是通过这种方法,您将能够获得非常好的结果。