Я работал с графом зависимостей coreference и начал с другого ответа на этот вопрос.Через некоторое время я понял, что приведенный выше алгоритм не совсем корректен.Вывод, который он произвел, даже не близок к измененной версии, которую я имею.
Для всех, кто использует эту статью, вот алгоритм, который я закончил, который также отфильтровывает собственные ссылки, потому что каждое представительное предложение также упоминает о себе имногие упоминания относятся только к самим себе.
Map<Integer, CorefChain> coref = document.get(CorefChainAnnotation.class);
for(Map.Entry<Integer, CorefChain> entry : coref.entrySet()) {
CorefChain c = entry.getValue();
//this is because it prints out a lot of self references which aren't that useful
if(c.getCorefMentions().size() <= 1)
continue;
CorefMention cm = c.getRepresentativeMention();
String clust = "";
List<CoreLabel> tks = document.get(SentencesAnnotation.class).get(cm.sentNum-1).get(TokensAnnotation.class);
for(int i = cm.startIndex-1; i < cm.endIndex-1; i++)
clust += tks.get(i).get(TextAnnotation.class) + " ";
clust = clust.trim();
System.out.println("representative mention: \"" + clust + "\" is mentioned by:");
for(CorefMention m : c.getCorefMentions()){
String clust2 = "";
tks = document.get(SentencesAnnotation.class).get(m.sentNum-1).get(TokensAnnotation.class);
for(int i = m.startIndex-1; i < m.endIndex-1; i++)
clust2 += tks.get(i).get(TextAnnotation.class) + " ";
clust2 = clust2.trim();
//don't need the self mention
if(clust.equals(clust2))
continue;
System.out.println("\t" + clust2);
}
}
И последний вывод для вашего примера предложения следующий:
representative mention: "a basic unit of matter" is mentioned by:
The atom
it
Обычно «атом» в конечном итоге является представительным упоминанием, нов случае, если это не удивительно.Другой пример с чуть более точным выводом приведен для следующего предложения:
Революционная война произошла в 1700-х годах, и это была первая война в Соединенных Штатах.
дает следующий вывод:
representative mention: "The Revolutionary War" is mentioned by:
it
the first war in the United States