NLP解析器有没有办法识别列表?
例如,"老虎,狮子和大猩猩" 应该被识别为列表
(我不需要将它确定为动物列表;只需一个列表即可。)
我的最终目标是将常用动词/单词链接到列表中的所有项目。 例如,考虑句子"他找到了一支笔,一本书和一个手电筒" 。在这里,"找到" 动词应该链接到所有3个项目。
另一个例子,"他被检测为癌症,贫血和糖尿病阴性" 。在这里," negative" 这个词应与三种疾病联系起来。
OpenNLP或Stanford CoreNLP等任何开源NLP软件包都可以实现吗?还有其他方法吗?
修改
就像其中一个答案中提到的那样,我最初的想法是手动解析列表并通过查看逗号的位置来查找项目等。
然后我发现了斯坦福NLP的OpenIE模型。这似乎做得很好。
例如,"他有一支笔和一本书" 给出两个关系(他;有;一支笔)和(他;有;一本书)。
该模型的问题在于它不适用于不完整的句子,例如"有一支笔和一本书" 。
(据我所知,这是因为OpenIE只能提取三元组)
当涉及否定时它也会失败。例如,"他没有钢笔" 。
这些问题有解决方案吗?目前可用于信息提取的最佳解决方案是什么?
答案 0 :(得分:3)
您要做的事情称为Information Extraction。
在您的情况下,任务是提取关于实体的集的基本命题(作为枚举给出)而不是仅仅一个实体(这是通常的场景)。例如,您想从句子He found a pen, a book and a flashlight.
中提取以下三个命题:
X代表被称为He
的实体。正如Savkov先生已经指出的那样,信息提取是一个非常难的问题,其解决方案不仅仅是Stack Overflow的答案。
有许多信息提取方法。正如Savkov先生所建议的那样,基于POS标签的解决方案可能是一个很好的起点。我建议您查看this nice tutorial based on NLTK(特别是第2.2节。"标记模式")和this paper。
答案 1 :(得分:2)
我担心完整的答案可以填补博士论文的好处:)
没有通用工具可以满足您的需求。你需要自己写。如果查看this示例,您可以看到您可以从令牌and
或逗号开始提取列表,然后遍历它周围的图形以构建列表。在这种特殊情况下,您可以查看链接较小名词短语的conj
和appos
关系。
您还可以查看POS标记模式,例如(N*
,,
,N*
,CC
,N*
) - 这是一个黑客但是如果你想要快速的结果并且你愿意错过召回,它可能是你最好的方法。
至于您要求包含修饰符(例如否定) - 这是一项单独的任务,应该在您确定列表后进行。