package edu.stanford.nlp.quoteattribution.Sieves.MSSieves;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.quoteattribution.Person;
import edu.stanford.nlp.pipeline.QuoteAttributionAnnotator;
import edu.stanford.nlp.util.CoreMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Created by mjfang on 7/8/16.
*/
public class DeterministicSpeakerSieve extends MSSieve {
private Map<String, Person.Gender> genderList;
public DeterministicSpeakerSieve(Annotation doc, Map<String, List<Person>> characterMap,
Map<Integer, String> pronounCorefMap, Set<String> animacySet) {
super(doc, characterMap, pronounCorefMap, animacySet);
}
public void doMentionToSpeaker(Annotation doc) {
List<CoreMap> quotes = doc.get(CoreAnnotations.QuotationsAnnotation.class);
for(CoreMap quote : quotes) {
String mention = quote.get(QuoteAttributionAnnotator.MentionAnnotation.class);
if (mention == null) {
continue;
}
int mentionBegin = quote.get(QuoteAttributionAnnotator.MentionBeginAnnotation.class);
int mentionEnd = quote.get(QuoteAttributionAnnotator.MentionEndAnnotation.class);
ArrayList<CoreLabel> mentionTokens = new ArrayList<>();
for(int i = mentionBegin; i <= mentionEnd; i++) {
mentionTokens.add(doc.get(CoreAnnotations.TokensAnnotation.class).get(i));
}
String mentionType = quote.get(QuoteAttributionAnnotator.MentionTypeAnnotation.class);
if(mentionType.equals("name")) {
quote.set(QuoteAttributionAnnotator.SpeakerAnnotation.class, characterMap.get(mention).get(0).name);
quote.set(QuoteAttributionAnnotator.SpeakerSieveAnnotation.class, "automatic name");
} else if (mentionType.equals("pronoun")){
Person speaker = doCoreference(mentionTokens.get(0).get(CoreAnnotations.CharacterOffsetBeginAnnotation.class), quote);
if (speaker != null) {
quote.set(QuoteAttributionAnnotator.SpeakerAnnotation.class, speaker.name);
quote.set(QuoteAttributionAnnotator.SpeakerSieveAnnotation.class, "coref");
}
}
}
}
}