예제 #1
0
        /// <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);
                        }
                    }
                }
            }
        }
예제 #2
0
 /// <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));
 }
예제 #3
0
        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);
            }
            }
        }
예제 #4
0
        /// <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);
        }