/// <summary>Returns the natural logic relation corresponding to the given dependency arc being inserted into a sentence.</summary> /// <param name="dependencyLabel">The label we are checking the relation for.</param> /// <param name="isSubject">Whether this is on the subject side of a relation (e.g., for CONJ_OR edges)</param> /// <param name="dependent">The dependent word of the dependency label.</param> public static Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation ForDependencyInsertion(string dependencyLabel, bool isSubject, Optional <string> dependent) { if (!isSubject) { switch (dependencyLabel) { case "conj:or": case "conj:nor": { // 'or' in the object position behaves as and. return(ForDependencyInsertion("conj:and", false)); } case "cc:preconj": { if (dependent.IsPresent() && Sharpen.Runtime.EqualsIgnoreCase("neither", dependent.Get())) { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } else { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment); } break; } } } Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation rel = Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.insertArcToNaturalLogicRelation[dependencyLabel.ToLower()]; if (rel != null) { return(rel); } else { // log.info("Unknown dependency arc for NaturalLogicRelation: " + dependencyLabel); if (dependencyLabel.StartsWith("nmod:")) { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment); } else { if (dependencyLabel.StartsWith("conj")) { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment); } else { if (dependencyLabel.StartsWith("advcl")) { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment); } else { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } } } } }
/// <summary>Returns the natural logic relation corresponding to the given dependency arc being deleted from a sentence.</summary> /// <param name="dependencyLabel">The label we are checking the relation for</param> /// <param name="isSubject">Whether this is on the subject side of a relation (e.g., for CONJ_OR edges)</param> /// <param name="dependent">The dependent word of the dependency label.</param> public static Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation ForDependencyDeletion(string dependencyLabel, bool isSubject, Optional <string> dependent) { Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation rel = ForDependencyInsertion(dependencyLabel, isSubject, dependent); return(InsertionToDeletion(rel)); }
private static Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation InsertionToDeletion(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation insertionRel) { switch (insertionRel) { case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } default: { throw new InvalidOperationException("Unhandled natural logic relation: " + insertionRel); } } }
/// <summary>The MacCartney "join table" -- this determines the transitivity of entailment if we chain two relations together.</summary> /// <remarks> /// The MacCartney "join table" -- this determines the transitivity of entailment if we chain two relations together. /// These should already be projected up through the sentence, so that the relations being joined are relations between /// <i>sentences</i> rather than relations between <i>lexical items</i> (see /// <see cref="Polarity.ProjectLexicalRelation(NaturalLogicRelation)"/> /// , /// set by /// <see cref="NaturalLogicAnnotator"/> /// using the /// <see cref="PolarityAnnotation"/> /// ). /// </remarks> /// <param name="other">The relation to join this relation with.</param> /// <returns>The new joined relation.</returns> public Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation Join(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation other) { switch (this) { case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent: { return(other); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment: { switch (other) { case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } } goto case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment; } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment: { switch (other) { case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } } goto case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation; } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation: { switch (other) { case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } } goto case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation; } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation: { switch (other) { case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } } goto case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover; } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover: { switch (other) { case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Equivalent: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ForwardEntailment: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Negation: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Alternation: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment); } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.ReverseEntailment: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Cover: case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } } goto case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence; } case Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence: { return(Edu.Stanford.Nlp.Naturalli.NaturalLogicRelation.Independence); } } throw new InvalidOperationException("[should be impossible]: Incomplete join table for " + this + " joined with " + other); }