final Term head = NAFUtils.extractHead(document, predicate.getSpan()); final FrameBase.POS pos = FrameBase.POS.forPennTag(head.getMorphofeat()); for (final Term term : predicate.getSpan().getTargets()) { builder.append(builder.length() == 0 ? "" : "_"); builder.append(term.getLemma().toLowerCase()); for (final ExternalRef ref : ImmutableList.copyOf(predicate.getExternalRefs())) { if (ref.getResource().equalsIgnoreCase("framenet")) { final String frame = ref.getReference(); for (final Role role : predicate.getRoles()) { for (final ExternalRef ref : ImmutableList.copyOf(role.getExternalRefs())) { if (ref.getResource().equalsIgnoreCase("framenet")) {
if (!predicates.isEmpty()) { final Predicate predicate = predicates.get(0); out.append("<br/><b>Predicate ").append(predicate.getId()).append("</b>: sense "); final boolean isNoun = term.getPos().toUpperCase().equals("N"); for (final ExternalRef ref : predicate.getExternalRefs()) { final String resource = ref.getResource().toLowerCase(); if ("propbank".equals(resource) && !isNoun || "nombank".equals(resource) && isNoun) {
final Term predTerm = predicate.getTerms().get(0); if (predTerm.getPos().equalsIgnoreCase("V")) { continue; for (final Role role : ImmutableList.copyOf(predicate.getRoles())) { final Term headTerm = document.getTermsHead(role.getTerms()); if (headTerm == predTerm && role.getSemRole() != null) { predicate.removeRole(role); LOGGER.debug("Removed " + NAFUtils.toString(role) + " for " + NAFUtils.toString(predicate) + " (mandatory " + mandatoryArgs final String semRole = "A" + arg; final Role role = document.newRole(predicate, semRole, span); predicate.addRole(role); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Added " + NAFUtils.toString(role) + " to "
SRLElement(final SRLElement parent, final Object element, final boolean useProposition) { this.parent = parent; this.element = element; if (useProposition) { final Predicate predicate = (Predicate) element; final Set<Term> termSet = Sets.newHashSet(); termSet.addAll(predicate.getTerms()); for (final Role role : predicate.getRoles()) { termSet.addAll(role.getTerms()); } this.terms = Ordering.from(Term.OFFSET_COMPARATOR).immutableSortedCopy(termSet); } else if (element instanceof Predicate) { this.terms = ((Predicate) element).getTerms(); } else { this.terms = ((Role) element).getTerms(); } this.begin = this.terms.get(0).getOffset(); this.end = endOf(this.terms.get(this.terms.size() - 1)); }
/** * Adds a predicate to the container */ void add(Predicate predicate) { predicates.add(predicate); /* Index by terms */ for (Term term : predicate.getTerms()) { indexAnnotation(predicate, term.getId(), predicatesIndexedByTerm); } this.indexBySent(predicate, predicate.getSpan().getTargets().get(0).getSent(), this.predicatesIndexedBySent); }
public static String getRoleset(final Predicate predicate) { final String res = predicate.getTerms().get(0).getPos().equalsIgnoreCase("V") ? RESOURCE_PROPBANK : RESOURCE_NOMBANK; String roleset = null; for (final ExternalRef ref : predicate.getExternalRefs()) { if (res.equalsIgnoreCase(ref.getResource())) { if (ref.getSource() != null) { roleset = ref.getReference(); break; } else if (roleset == null) { roleset = ref.getReference(); } } } return roleset; }
Element predicatesElem = new Element("srl"); for (Predicate predicate : predicates) { Comment predicateComment = new Comment(predicate.getStr()); predicatesElem.addContent(predicateComment); Element predicateElem = new Element("predicate"); predicateElem.setAttribute("id", predicate.getId()); if (predicate.hasSource()) { predicateElem.setAttribute("source", predicate.getSource()); if (predicate.hasUri()) { predicateElem.setAttribute("uri", predicate.getUri()); if (predicate.hasConfidence()) { predicateElem.setAttribute("confidence", Double.toString(predicate.getConfidence())); if (!predicate.getFlags().isEmpty()) { StringBuilder builder = new StringBuilder(); String separator = ""; for (String flag : predicate.getFlags()) { builder.append(separator).append(flag); separator = ","; Span<Term> span = predicate.getSpan(); if (span.getTargets().size() > 0) { Comment spanComment = new Comment(predicate.getSpanStr()); Element spanElem = new Element("span"); predicateElem.addContent(spanComment); List<ExternalRef> externalReferences = predicate.getExternalRefs();
Element predicatesElem = new Element("srl"); for (Predicate predicate : predicates) { Comment predicateComment = new Comment(StringEscapeUtils.escapeXml11(predicate.getStr())); predicatesElem.addContent(predicateComment); Element predicateElem = new Element("predicate"); predicateElem.setAttribute("id", predicate.getId()); if (predicate.hasUri()) { predicateElem.setAttribute("uri", predicate.getUri()); if (predicate.hasConfidence()) { predicateElem.setAttribute("confidence", Float.toString(predicate.getConfidence())); Span<Term> span = predicate.getSpan(); if (span.getTargets().size() > 0) { Comment spanComment = new Comment(StringEscapeUtils.escapeXml11(predicate.getSpanStr())); Element spanElem = new Element("span"); predicateElem.addContent(spanComment); List<ExternalRef> externalReferences = predicate.getExternalRefs(); if (externalReferences.size() > 0) { Element externalReferencesElem = externalReferencesToDOM(externalReferences); predicateElem.addContent(externalReferencesElem); for (Predicate.Role role : predicate.getRoles()) { Element roleElem = new Element("role"); roleElem.setAttribute("id", role.getId()); for (Predicate target : span.getTargets()) { Element targetElem = new Element("target");
if (NAFUtils.extractHead(document, predicate.getSpan()) == null) { document.removeAnnotation(predicate); LOGGER.debug("Removed {} without valid head term", predicate); final boolean isSemafor = predicate.getId().startsWith("f_pr") || "semafor".equalsIgnoreCase(predicate.getSource()); if (isSemafor && !this.srlEnableSemafor || !isSemafor && !this.srlEnableMate) { document.removeAnnotation(predicate); final Term term = NAFUtils.extractHead(document, predicate.getSpan()); (isSemafor ? semaforPredicates : matePredicates).put(term, predicate); for (final Role mateRole : matePredicate.getRoles()) { boolean addRole = true; final Set<Term> mateTerms = ImmutableSet.copyOf(mateRole.getSpan() .getTargets()); for (final Role semaforRole : semaforPredicate.getRoles()) { final Set<Term> semaforTerms = ImmutableSet.copyOf(semaforRole.getSpan() .getTargets()); final Role semaforRole = document.newRole(semaforPredicate, mateRole.getSemRole(), mateRole.getSpan()); semaforPredicate.addRole(semaforRole); for (final ExternalRef ref : mateRole.getExternalRefs()) { semaforRole.addExternalRef(new ExternalRef(ref));
String uri = getOptAttribute("uri", predicateElem); if (uri != null) { newPredicate.setUri(uri); newPredicate.addExternalRefs(externalRefs); newPredicate.setConfidence(Float.valueOf(confidence)); newRole.addExternalRefs(externalRefs); newPredicate.addRole(newRole); predicateIndex.put(newPredicate.getId(), newPredicate);
private void processPredicate(final Predicate predicate) throws RDFHandlerException { final List<Term> terms = predicate.getSpan().getTargets(); final String label = NAFUtils.getText(NAFUtils.filterTerms(terms)); final Term head = NAFUtils.extractHead(this.document, predicate.getSpan()); for (final Role role : predicate.getRoles()) { selfArg |= head.equals(NAFUtils.extractHead(this.document, role.getSpan())); predicate.getId(), head.getLemma()); ann.predicateURI = predicateURI; for (final ExternalRef ref : predicate.getExternalRefs()) { if ("".equals(ref.getReference())) { continue;
final Predicate predicate = (Predicate) proposition.element; markables.add(new SRLElement(proposition, predicate, false)); for (final Role role : predicate.getRoles()) { markables.add(new SRLElement(proposition, role, false)); if (element instanceof Predicate) { final Predicate predicate = (Predicate) element; final String res = predicate.getTerms().get(0).getPos() .equalsIgnoreCase("V") ? "propbank" : "nombank"; String roleset = null; for (final ExternalRef ref : predicate.getExternalRefs()) { if (res.equalsIgnoreCase(ref.getResource())) { if (ref.getSource() != null) {
private void processRole(final Predicate predicate, final Role role, final Term argHead) { final Term predHead = NAFUtils.extractHead(this.document, predicate.getSpan()); final InstanceMention predMention = this.mentions.get(predHead); if (predMention == null || predMention.head != predHead) { for (final ExternalRef ref : predicate.getExternalRefs()) { if (ref.getSource() != null && !ref.getReference().isEmpty()) { if (ref.getResource().equalsIgnoreCase("nombank")) {
if (this.srlSenseMappingPM) { if (predicate.getTerms().get(0).getPos().equalsIgnoreCase("V")) { final ExternalRef ref = predicate.getExternalRef(NAFUtils.RESOURCE_PROPBANK); pbRoleset = ref == null ? null : PropBank.getRoleset(ref.getReference()); } else { final ExternalRef ref = predicate.getExternalRef(NAFUtils.RESOURCE_NOMBANK); nbRoleset = ref == null ? null : NomBank.getRoleset(ref.getReference()); final String pbSense = nbRoleset == null ? null : nbRoleset.getPBId(); for (final Role role : predicate.getRoles()) { final boolean verb = NAFUtils.extractHead(document, predicate.getSpan()) .getMorphofeat().startsWith("VB"); final String resource = verb ? "PropBank" : "NomBank";
if (term.equals(NAFUtils.extractHead(document, pred.getSpan()))) { final String res = isCoref ? NAFUtils.RESOURCE_PREDICATE_COREF : NAFUtils.RESOURCE_PREDICATE_REF; NAFUtils.setRef(annotation, document.newExternalRef(res, pred.getId())); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Linked {} to {} as {}", NAFUtils.toString(pred),
private void applySRLRoleLinking(final KAFDocument document) { // Process all the roles in the SRL layer for (final Predicate predicate : Lists.newArrayList(document.getPredicates())) { for (final Role role : predicate.getRoles()) { // Identify the role head. Skip if not found. final Term head = NAFUtils.extractHead(document, role.getSpan()); if (head == null) { continue; } // Identify the terms that can be linked final Set<Term> argTerms = document.getTermsByDepAncestors( Collections.singleton(head), PARTICIPATION_REGEX); // Perform the linking, possible augmenting terms using coref info linkEntitiesTimexPredicates(document, role, role.getSpan(), argTerms, this.srlRoleLinkingUsingCoref); } } }
for (final ExternalRef ref : predicate.getExternalRefs()) { if (NAFUtils.RESOURCE_NOMBANK.equals(ref.getResource())) { final NomBank.Roleset rs = NomBank.getRoleset(ref.getReference());
public static boolean hasHead(final KAFDocument document, final Object annotation, final Term head) { List<Span<Term>> spans; if (annotation instanceof Coref) { spans = ((Coref) annotation).getSpans(); } else if (annotation instanceof Entity) { spans = ((Entity) annotation).getSpans(); } else if (annotation instanceof Timex3) { spans = ImmutableList.of(KAFDocument.newTermSpan(document .getTermsByWFs(((Timex3) annotation).getSpan().getTargets()))); } else if (annotation instanceof Predicate) { spans = ImmutableList.of(((Predicate) annotation).getSpan()); } else if (annotation instanceof Role) { spans = ImmutableList.of(((Role) annotation).getSpan()); } else { throw new IllegalArgumentException("Unsupported annotation: " + annotation); } for (final Span<Term> span : spans) { if (head == extractHead(document, span)) { return true; } } return false; }
/** Creates a new srl predicate. It assigns an appropriate ID to it. The predicate is added to the document. * @param span span containing all the targets of the predicate * @return a new predicate */ public Predicate newPredicate(Span<Term> span) { String newId = idManager.getNextId(AnnotationType.PREDICATE); Predicate newPredicate = new Predicate(newId, span); annotationContainer.add(newPredicate, Layer.SRL, AnnotationType.PREDICATE); return newPredicate; }
String source = getOptAttribute("source", predicateElem); if (source != null) { newPredicate.setSource(source); newPredicate.setUri(uri); newPredicate.addExternalRefs(externalRefs); newPredicate.setConfidence(Float.valueOf(confidence)); newRole.addExternalRefs(externalRefs); newPredicate.addRole(newRole); predicateIndex.put(newPredicate.getId(), newPredicate);