package edu.stanford.nlp.ie.machinereading.domains.ace.reader; import java.util.Collection; import java.util.Map; import java.util.Set; import edu.stanford.nlp.util.Generics; /** * Stores one ACE event mention */ public class AceEventMention extends AceMention { /** Maps argument roles to argument mentions */ private Map<String, AceEventMentionArgument> mRolesToArguments; /** the parent event */ private AceEvent mParent; /** anchor text for this event */ private AceCharSeq mAnchor; public AceEventMention(String id, AceCharSeq extent, AceCharSeq anchor) { super(id, extent); mRolesToArguments = Generics.newHashMap(); this.mAnchor = anchor; } @Override public String toString() { return "AceEventMention [mAnchor=" + mAnchor + ", mParent=" + mParent + ", mRolesToArguments=" + mRolesToArguments + ", mExtent=" + mExtent + ", mId=" + mId + "]"; } public Collection<AceEventMentionArgument> getArgs() { return mRolesToArguments.values(); } public Set<String> getRoles() { return mRolesToArguments.keySet(); } public AceEntityMention getArg(String role) { return mRolesToArguments.get(role).getContent(); } public void addArg(AceEntityMention em, String role) { mRolesToArguments.put(role, new AceEventMentionArgument(role, em)); } public void setParent(AceEvent e) { mParent = e; } public AceEvent getParent() { return mParent; } public void setAnchor(AceCharSeq anchor) { mAnchor = anchor; } public AceCharSeq getAnchor() { return mAnchor; } /** Fetches the id of the sentence that contains this mention */ // TODO disabled until we tie in sentence boundaries // public int getSentence(AceDocument doc) { // return doc.getToken(getArg(0).getHead().getTokenStart()).getSentence(); // } /** * Returns the smallest start of all argument heads (or the beginning of the * mention's extent if there are no arguments) */ public int getMinTokenStart() { Collection<AceEventMentionArgument> args = getArgs(); int earliestTokenStart = -1; for (AceEventMentionArgument arg : args) { int tokenStart = arg.getContent().getHead().getTokenStart(); if (earliestTokenStart == -1) earliestTokenStart = tokenStart; else earliestTokenStart = Math.min(earliestTokenStart, tokenStart); } // this will happen when we have no arguments if (earliestTokenStart == -1) return mExtent.getTokenStart(); return earliestTokenStart; } /** * Returns the largest start of all argument heads (or the beginning of the * mention's extent if there are no arguments) */ public int getMaxTokenEnd() { Collection<AceEventMentionArgument> args = getArgs(); int latestTokenStart = -1; for (AceEventMentionArgument arg : args) { int tokenStart = arg.getContent().getHead().getTokenStart(); if (latestTokenStart == -1) latestTokenStart = tokenStart; else latestTokenStart = Math.max(latestTokenStart, tokenStart); } // this will happen when we have no arguments if (latestTokenStart == -1) return mExtent.getTokenStart(); return latestTokenStart; } // TODO: toXml method }