在多个问题中引用Corefs

时间:2014-09-29 17:41:12

标签: c# stanford-nlp

我在C#中使用Stanford-NLP包。我已经能够编译和执行这样的程序包,但是在多个输入中利用coref包时遇到了困难,特别是试图预先填充"预先填充"来自先前输入的第二个输入的corefs。

在我的示例程序中,我通过stdin读取了一组文本,并使用以下方法解析CoreNLP库:

props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref, sentiment");

我用:

创建了一个coref实例
CorefCoreAnnotations.CorefChainAnnotation coref = new CorefCoreAnnotations.CorefChainAnnotation();

我用它来解析我的输入:

var annotation = new Annotation(text);
pipeline.annotate(annotation);

我可以通过以下代码获取corefs:

Map graph = (Map)annotation.get(coref.getClass());
Console.WriteLine(graph);

我无法正常工作的是利用先前输入的结果作为下一个输入的核心。

例如:

Input 1: Jane went to the store. She was purchasing bread.
Coref Result: She -> Jane

Input 2: She also bought apples.
Coref Result: null

我想要的是输入"召回"以前的corefs和"知道" "她"是简。

虽然我可以将字符串连接起来,但我正在寻找一个互动的过程。

1 个答案:

答案 0 :(得分:0)

在我看来,连接字符串是唯一的方法。这个工具(StanfordCoreNLP)的工作方式通常是你给它输入文本,然后你会得到一个图形作为输出。所以,让我们说文本A产生图A.你要做的是给文本B和图A,作为输入产生图B,但只能输入文本。这与给出文本A + B作为输入有什么不同,虽然产生图B?

具体来说,我发现让管道工作的唯一方法是在管道的注释功能中提供注释输入(就像你一样)。以下是工具的java文档中的Annotation的描述:

  

表示文档中文本范围的注释。基本上   只是知道文本的CoreMap实现。你的意思是   在常见情况下使用CoreAnnotations中的注释键,但是   可以为不寻常的注释定义定制的注释。

使用示例中的变量,如果可以执行以下操作:

pipeline.annotate(annotation,graph);

然后您可以考虑以前的图表。但为什么要添加该图而不是其各自的文本?

我可能在这里遗漏了一些东西。我知道这不是你要找的答案。坦率地说,我想留下这个评论(但不能,因为赏金)。虽然我目前在java中使用StanfordCoreNLP,但对于共同引用之外的东西,可能会有更好的(或实际的)答案,以及更有资格提供它的人。