El primer número es un identificador de grupo (en representación de fichas, que representan la misma entidad), ver el código fuente de SieveCoreferenceSystem#coref(Document)
. Los números pares son outout de CorefChain # toString():
public String toString(){
return position.toString();
}
donde la posición es un conjunto de pares de Postion entidad mencionan (para conseguir que utilizan CorefChain.getCorefMentions()
). Aquí está un ejemplo de un código completo (en groovy), que muestra cómo llegar desde posiciones de fichas:
class Example {
public static void main(String[] args) {
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
props.put("dcoref.score", true);
pipeline = new StanfordCoreNLP(props);
Annotation document = new Annotation("The atom is a basic unit of matter, it consists of a dense central nucleus surrounded by a cloud of negatively charged electrons.");
pipeline.annotate(document);
Map<Integer, CorefChain> graph = document.get(CorefChainAnnotation.class);
println aText
for(Map.Entry<Integer, CorefChain> entry : graph) {
CorefChain c = entry.getValue();
println "ClusterId: " + entry.getKey();
CorefMention cm = c.getRepresentativeMention();
println "Representative Mention: " + aText.subSequence(cm.startIndex, cm.endIndex);
List<CorefMention> cms = c.getCorefMentions();
println "Mentions: ";
cms.each { it ->
print aText.subSequence(it.startIndex, it.endIndex) + "|";
}
}
}
}
de salida (no entiendo donde 's' proviene de):
The atom is a basic unit of matter, it consists of a dense central nucleus surrounded by a cloud of negatively charged electrons.
ClusterId: 1
Representative Mention: he
Mentions: he|atom |s|
ClusterId: 6
Representative Mention: basic unit
Mentions: basic unit |
ClusterId: 8
Representative Mention: unit
Mentions: unit |
ClusterId: 10
Representative Mention: it
Mentions: it |
ps. No creo que las configuraciones predeterminadas (modelos) funcionen para su dominio. El stanford core nlp parece ser más adecuado para extraer semántica de noticias, artículos, etc. Por ejemplo, Stanford NER, parte de la PNL básica, recibió capacitación y testículos en cornamentas CoNLL 2002 y 2003. – Skarab
Este algoritmo es parcialmente útil y me llevó al algoritmo correcto, pero el resultado aquí no es el correcto para la oración, no hay "él" en la oración o "s" y "eso" solo se asigna a sí mismo, lo que derrota el punto de la resolución de correferencia. – user1084563
Creo que considera el 'startIndex' y' endIndex' como si fueran índices de caracteres (basados en 0), pero son índices de token (basados en 1). Además, no definiste 'aText'. Suponiendo que se refiera al texto de la anotación, en lugar de "él" (caracteres 1 y 2) debería tener "El átomo" (palabras 1 y 2), etc. –