将自然语言描述解析为结构化数据的策略

Jiz*_*zoe 12 java dsl nlp text-parsing

我有一套要求,我正在寻找最好的基于Java的策略/ algorthm /软件.基本上,我想采用自然英语中真实人员输入的一组配方成分,并将元数据解析为结构化格式(请参阅下面的要求以了解我正在尝试做什么).

我在这里和其他地方环顾四周,但没有发现任何可以提供关于方向的高级建议.所以,我会把它交给聪明的人:-):

解决这个问题的最佳/最简单的方法是什么?我应该使用自然语言解析器,dsl,lucene/solr或其他一些工具/技术吗?NLP似乎可能有效,但它看起来非常复杂.我宁愿不花费大量时间进行深度潜水,只是为了发现它不能做我正在寻找的东西,或者有一个更简单的解决方案.

要求

鉴于这些配方成分说明....

  1. "8杯混合蔬菜(约5盎司)"
  2. "八只去皮的鸡大腿(大约1¼磅)"
  3. "6.5汤匙特级初榨橄榄油"
  4. "大约6盎司.切成薄片的熏鲑鱼,切成条状"
  5. "2只整鸡(每只3.5磅)"
  6. "每个冷冻切碎的菠菜20盎司,解冻"
  7. ".5杯帕玛森芝士,磨碎"
  8. "大约.5杯山核桃,烤好的地面"
  9. ".5杯Dixie晚餐面包屑混合物,平原"
  10. "8个蒜瓣,切碎(4茶匙)"
  11. "8个葱,切成2块"

我想把它变成这个....

|-----|---------|-------------|-------------------------|--------|-----------|--------------------------------|-------------|
|     | Measure |             |                         | weight | weight    |                                |             |
| #   | value   | Measure     | ingredient              | value  | measure   | preparation                    | Brand Name  |
|-----|---------|-------------|-------------------------|--------|-----------|--------------------------------|-------------|
| 1.  | 8       | cups        | mixed greens            | 5      | ounces    | -                              | -           |
| 2.  | 8       | -           | skinless chicken thigh  | 1.5    | pounds    | -                              | -           |
| 3.  | 6.5     | tablespoons | extra-virgin olive oil  | -      | -         | -                              | -           |
| 4.  | 6       | ounces      | smoked salmon           | -      | -         | thinly sliced, cut into strips | -           |
| 5.  | 2       | -           | whole chicken           | 3.5    | pounds    | -                              | -           |
| 6.  | 20      | ounces      | forzen chopped spinach  | -      |           | thawed                         | -           |
| 7.  | .5      | cup         | parmesean cheese        | -      | -         | grated                         | -           |
| 8.  | .5      | cup         | pecans                  | -      | -         | toasted, finely ground         | -           |
| 9.  | .5      | cup         | Bread Crumb Mix, plain  | -      | -         | -                              | Dixie Diner |
| 10. | 8       | -           | garlic clove            | 4      | teaspoons | minced                         | -           |
| 11. | 8       | -           | green onions            | -      | -         | cut into 2 pieces              | -           |
|-----|---------|-------------|-------------------------|--------|-----------|--------------------------------|-------------|

请注意描述的多样性.有些东西是缩写的,有些则不是.有些数字是数字,有些数字是拼写出来的.

我会喜欢能完美解析/翻译的东西.但是,我会满足于开始时做得相当好的事情.

奖金问题:在提出策略/工具之后,你会怎么做呢?

谢谢!

ffr*_*end 7

简短的回答.使用GATE.

答案很长.你需要一些文本模式识别工具.东西,可以捕捉如下模式:

{Number}{Space}{Ingredient}
{Number}{Space}{Measure}{Space}{"of"}{Space}{Ingredient}
{Number}{Space}{Measure}{Space}{"of"}{Space}{Ingredient}{"("}{Value}{")"}
...
Run Code Online (Sandbox Code Playgroud)

数字在哪里{Number},{Ingredient}取自成分词典,{Measure}- 从字典测量等等.

我描述的模式与GATE的JAPE规则非常相似.使用它们,您可以捕获与模式匹配的文本,并为模式的每个部分(数字,成分,度量等)分配一些标签.然后提取带标签的文本并将其放入单个表中.

我提到的词典可以在盖茨的Gazetteers中代表.

因此,GATE涵盖了您的所有需求.这不是最简单的开始方式,因为你必须至少学习GATE的基础知识,JAPE规则和Gazetteers,但是通过这种方法你将能够获得非常好的结果.


Joo*_*gen 1

它基本上是自然语言解析。(你已经做了鸡的梗。)所以基本上这是一个翻译过程。幸运的是,上下文非常有限。

您需要一个支持性翻译,您可以在其中添加词典条目、调整语法规则并重试。

在这种情况下,简单的流程/工作流程比算法重要得多。我对这两方面都很感兴趣。

如果您需要编程人员来制作初始原型,请随时与我联系。我确实看到,你的工作已经相当结构化了。

不幸的是我不知道合适的框架。你正在做一些 Mathematica 想要用它的 Alpha(自然语言命令产生结果)做的事情。数据挖掘?但是,通过手动适应过程进行简单的自然语言解析应该可以提供快速且简单的结果。