C# 跨多个问题引用Corefs

C# 跨多个问题引用Corefs,c#,stanford-nlp,C#,Stanford Nlp,我正在使用C#中的斯坦福NLP包。我已经能够编译和执行这样一个包,但是在跨多个输入利用coref包时遇到了困难,特别是在前一个输入的第二个输入上尝试“预填充”coref 在我的示例程序中,我通过stdin读入一组文本,并使用以下命令解析CoreNLP库: props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref, sentiment"); 我以coref为例: CorefCoreAnnot

我正在使用C#中的斯坦福NLP包。我已经能够编译和执行这样一个包,但是在跨多个输入利用coref包时遇到了困难,特别是在前一个输入的第二个输入上尝试“预填充”coref

在我的示例程序中,我通过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
我想要的是输入“回忆”之前的核心,并“知道”她是简


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

在我看来,连接字符串是唯一的方法。这个工具(StanfordCoreNLP)通常的工作方式是,您向它提供文本输入,然后接收一个图形作为输出。所以,假设文本A生成图形A。您要做的是,将文本B和图形A作为生成图形B的输入,但只有文本输入是可能的。这与将文本A+B作为输入来生成图形B有什么不同

具体地说,我发现让管道工作的唯一方法是在管道的annotate函数中提供注释输入(就像您所做的那样)。以下是该工具的java文档中的注释说明:

表示文档中文本范围的注释。基本上 只是CoreMap的一个实现,它了解文本。你是故意的 将CoreAnnotations中的注释键用于常见情况,但 可以为不寻常的注释定义定制的注释

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

pipeline.annotate(annotation,graph);
然后你可以考虑前面的图表。但为什么要添加该图表而不是其各自的文本


我可能遗漏了什么。我知道这不是你想要的答案。坦率地说,我想将此作为一个评论(但由于赏金原因,我不能这样做)。尽管我目前在java中使用的是StanfordCoreNLP,但对于共同引用以外的内容,很可能会有更好的(或实际的)答案,也可能有更合格的人给出答案。

我尝试这样做的原因是允许用户输入基于先前输入的上下文。如果有其他工具可以做到这一点,那就好了。我试图将此工具用作“对话”,软件代理将响应用户输入。要做到这一点,它需要回忆起谈话的内容和核心,以及衡量整个谈话的总体情绪。因此,因为这是我所知道的唯一一个可以解析和推断情绪(包括corefs)的工具,我正试图让它与“先前的图形”一起工作,并获取我的corefs。我仍然不明白为什么不能使用“先前的文本”,而不是“先前的图形”来表示它。我不明白这将如何降低交互性(性能是我能想到的唯一问题)。你能举一个更具体的例子,说明你希望你的工具具有的行为吗?演示代理和用户之间的对话场景。显示为什么连接文本会降低交互性。