从句子中提取食物

big*_*ong 18 algorithm nlp

给出一句话:

我早餐吃了花生酱和果冻三明治和一杯咖啡

我希望能够从中提取以下食物:

花生酱和果冻三明治

咖啡

到目前为止,使用POS标签,我已经能够提取单个食品,即

花生,黄油,果冻,三明治,咖啡

但就像我说的,我需要的是花生酱和果冻三明治,而不是个别物品.

有没有办法在没有后端食品的语料库或数据库的情况下这样做?

Dhr*_*hak 9

您可以在不使用包含食物语料库的训练集的情况下尝试它,但该方法也可以在没有它的情况下工作.

而不是做简单的POS标记,进行依赖性解析与POS标记相结合.这种方式将能够找到短语的多个标记之间的关系,并使用限制条件(如名词 - 名词依赖关系)解析依赖关系树,您应该能够找到相关的块.

您可以使用spacy进行dep解析.这是来自位移的输出:

https://demos.explosion.ai/displacy/?text=peanut%20butter%20and%20jelly%20sandwich%20is%20delicious&model=en&cpu=1&cph=1

在此输入图像描述

在此输入图像描述

  • 您可以在这里使用免费提供的数据,或者更好的方法:https: //en.wikipedia.org/wiki/Lists_of_foods作为训练集来创建一组基本的食物项目(爬行树中的超链接)
  • 基于对新数据的依赖性解析,您可以继续丰富基础数据.例如:如果你的语料库中存在"黄油",并且"花生酱"是经常遇到的一对代币,那么"花生"和"花生酱"也会添加到语料库中.
  • 语料库可以保存在一个文件中,该文件可以在处理时加载到内存中,或者像redis,aerospike等数据库.
  • 确保你在语料库和处理数据中使用标准化的,即小的,特殊的字符清理,单词词形化/词干化.这将增加您的覆盖范围和准确性.


Lor*_*tel 1

评论太多,但不是真正的答案:

我认为,如果您在没有适当分离器的情况下将两种食物组合成一种食物,那么您至少会更接近。这样可以得到花生酱、果冻三明治、咖啡。

如果您的英语正确,您可以通过计数/非计数来检测这种情况。将原文更正为“我早餐吃了花生酱和果冻三明治和一杯咖啡”。 黄油是不可数的,你不能吃“黄油”,但你可以吃“三明治”。因此,a必须适用于三明治,尽管“花生酱”和“果冻三明治”必须是同一个项目——“花生酱和果冻三明治”。不过,你的错误句子会以另一种方式解析!

不过,如果您能提出涵盖所有情况的一般规则,我会感到非常惊讶。我会想到这种事情,其中​​一些会泄漏并且需要数据库来捕获。