public static DigestOutputResult ExecuteDigestInprocWithLinguisticService(
            XDocument rdf, ICoreferenceInfo coreferenceInfo, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.check input.]
            rdf.ThrowIfNull("rdf");
            #endregion

            #region [.process.]
            rdf = Algorithms.PreprocessRdf(rdf);

            var opinionMiningResult = OpinionMiningWcfService.ExecuteOpinionMiningInprocWithLinguisticService(
                rdf, false, objectAllocateMethod, coreferenceInfo);

            var inputParams = new DigestInputParams("[NEVER MIND]", InputTextFormat.LinguisticXml)
            {
                ExecuteTonalityMarking = true,
                ObjectAllocateMethod   = objectAllocateMethod,
            };

            var digestTuples = GenerateResult(opinionMiningResult, inputParams.ExecuteTonalityMarking, inputParams);
            #endregion

            #region [.result.]
            return(new DigestOutputResult(digestTuples, opinionMiningResult.OperateRulesNames));

            #endregion
        }
        public static OpinionMiningOutputResult ExecuteOpinionMiningInprocWithLinguisticService(
            XDocument rdf, bool callPreprocessRdf, ObjectAllocateMethod objectAllocateMethod, ICoreferenceInfo coreferenceInfo)
        {
            #region [.check input.]
            rdf.ThrowIfNull("rdf");
            if (!rdf.Root.HasElements)
            {
                throw (new ArgumentException("Input linguistics-RDF is empty."));
            }
            #endregion

            #region [.Opinion-mining.]
            if (callPreprocessRdf)
            {
                rdf = Algorithms.PreprocessRdf(rdf);
            }

            var inputParams = new OpinionMiningInputParams("[NEVER MIND]", InputTextFormat.LinguisticXml)
            {
                ObjectAllocateMethod = objectAllocateMethod
            };

            var opinionMiningTuples = ExecuteInternal(rdf, inputParams, coreferenceInfo);
            #endregion

            #region [.result.]
            var opinionMiningOutputResult = new OpinionMiningOutputResult(opinionMiningTuples, RuleBase.GetOperateRulesNamesDebugInfoOutput());
            return(opinionMiningOutputResult);

            #endregion
        }
예제 #3
0
        private static DigestOutputResult CreateOpinionMiningWithTonalityResult(
            XElement rdf, ICoreferenceInfo coreferenceInfo, ObjectAllocateMethod objectAllocateMethod)
        {
            var xdoc = new XDocument(rdf);

            var result = DigestWcfService.ExecuteDigestInprocWithLinguisticService(xdoc, coreferenceInfo, objectAllocateMethod);

            return(result);
        }
예제 #4
0
        private static TonalityMarkingOutputResult CreateTonalityResult(
            XElement rdf, ICoreferenceInfo coreferenceInfo, ObjectAllocateMethod objectAllocateMethod,
            TonalityMarkingInputParams4InProcess inputParams)
        {
            var xdoc = new XDocument(rdf);

            var result = TonalityMarkingWcfService.ExecuteTonalityMarkingInprocWithLinguisticService(xdoc, coreferenceInfo, objectAllocateMethod, inputParams);

            return(result);
        }
예제 #5
0
        public static IEnumerable <XElement> TryAllocateObjectsInSubsents(this IEnumerable <XElement> subsents,
                                                                          ObjectAllocateMethod objectAllocateMethod,
                                                                          int id,
                                                                          XElement breakSearchElement = null)
        {
            subsents.ForEachEx(_ => _.ThrowIfNotSubsent());

            if (breakSearchElement != null)
            {
                var list = new List <XElement>();
                foreach (var subsent in subsents)
                {
                    #region commented. previous

                    /*
                     * var e0 = subsent.ElementsExceptT().ToArray();
                     * var e1 = e0.TakeWhile( _ => _ != breakSearchElement ).ToArray();
                     *
                     * list.AddRange( e1.TryAllocateObjects( objectAllocateMethod, id ) );
                     *
                     * if ( e0.Length != e1.Length )
                     *  break;
                     * //*/
                    #endregion

                    var els = subsent.ElementsExceptT().ToArray();

                    var obj0 = els.TryAllocateObjects(objectAllocateMethod, id);
                    var obj1 = obj0.TakeWhile(o => o.Ancestors().All(a => a != breakSearchElement)).ToArray();

                    list.AddRange(obj1);

                    if (obj0.Count != obj1.Length)
                    {
                        break;
                    }
                }
                return(list.Distinct());
            }
            else
            {
                var objects = from subsent in subsents
                              let objs = subsent.ElementsExceptT().TryAllocateObjects(objectAllocateMethod, id)
                                         from o in objs
                                         select o;

                return(objects.Distinct());
            }
        }
예제 #6
0
        /*public static List< XElement > TryAllocateObjects4AuthorSubject4Automat( this XElement sent, InputParams4AutomatBase inputParams )
         * {sent.ThrowIfNotSent();
         *
         *  var objects = new List< XElement >();
         *
         *  var subsents = Algorithms.GetSubsents4AllocateInquiry( sent );
         *  foreach ( var subsent in subsents )
         *  {
         *      var inquiries = Algorithms.GetAllocateInquiries4Automat4Subsent( subsent, inputParams, false );
         *      foreach ( var inquiryEntity in inquiries )
         *      {
         *          inquiryEntity.SetAttributeISOBJECT( ATTRIBUTEVALUE_ISOBJECT_4AUTHORSUBJECT );
         *          objects.Add( inquiryEntity );
         *      }
         *  }
         *
         #region [.anaphoria | coreference4 inquiry.]
         *  var anaphoriaOrcoreference = Algorithms.GetAnaphoriaOrCoreference( subsents );
         *
         *  foreach ( var CETorENTITY in anaphoriaOrcoreference )
         *  {
         *      if ( CETorENTITY.IsElementCET() )
         *          CETorENTITY.RenameCET2ENTITY();
         *
         *      CETorENTITY.SetAttributeISOBJECT( ATTRIBUTEVALUE_ISOBJECT_4AUTHORSUBJECT );
         *      objects.Add( CETorENTITY );
         *  }
         #endregion
         *
         *  return (objects);
         * }*/
        public static List <XElement> TryAllocateObjects(this IEnumerable <XElement> elements,
                                                         ObjectAllocateMethod objectAllocateMethod,
                                                         int attributeValueISOBJECT)
        {
            var objects = new List <XElement>();

            foreach (var e in elements)
            {
                var @object = e.TryAllocateObject(objectAllocateMethod, attributeValueISOBJECT);
                if (@object.IsNotNull())
                {
                    objects.Add(@object);
                }
            }
            return(objects);
        }
예제 #7
0
        public static IList <XElement> TryAllocateObjectsInUnknownElements(this IEnumerable <XElement> unknownElements,
                                                                           ObjectAllocateMethod objectAllocateMethod,
                                                                           int id)
        {
            var list = new List <XElement>();

            foreach (var unk in unknownElements)
            {
                switch (unk.Name.LocalName)
                {
                case TextMining.Core.XLinqExtensions.Consts.SENT_ELEMENT:
                    list.AddRangeEx(unk.ElementsExceptT().TryAllocateObjects(objectAllocateMethod, id));
                    break;

                case TextMining.Core.XLinqExtensions.Consts.SUBSENT_ELEMENT:
                    var inquiries = Algorithms.GetAllocateInquiries4Subsent(unk, objectAllocateMethod, null, false);
                    foreach (var inquiry in inquiries)
                    {
                        inquiry.SetAttributeISOBJECT_wpfHomogeneous(id);
                    }
                    list.AddRangeEx(inquiries);
                    break;

                case TextMining.Core.XLinqExtensions.Consts.U_ELEMENT:
                    break;

                default:
                    var @object = unk.TryAllocateObject(objectAllocateMethod, id);
                    if (@object.IsNotNull())
                    {
                        list.Add(@object);
                    }
                    break;
                }
            }
            return(list.Distinct().ToList());
        }
예제 #8
0
        private static XElement TryAllocateObject(this XElement element, ObjectAllocateMethod objectAllocateMethod, int attributeValueISOBJECT)
        {
            var @object = element.DescendantsAndSelfEntity().FirstOrDefault(e => Algorithms.IsObjectEntity(e));

            if (@object.IsNotNull() &&
                @object.GetAttributeISSUBJECT().IsNull())   //and not has attribute 'ISSUBJECT'
            {
                return(@object.SetAttributeISOBJECT_wpfHomogeneous(attributeValueISOBJECT));
            }

            if ((objectAllocateMethod & ObjectAllocateMethod.FirstEntityWithRoleSubj) == ObjectAllocateMethod.FirstEntityWithRoleSubj)
            {
                #region [.FirstEntityWithRoleSubj.]
                @object = element.DescendantsAndSelfEntity().FirstOrDefault(e => e.HasRoleAttributeValue(RoleAttributeValue.Subj));
                if (@object.IsNotNull() &&
                    @object.GetAttributeISSUBJECT().IsNull())   //and not has attribute 'ISSUBJECT'
                {
                    return(@object.SetAttributeISOBJECT_wpfHomogeneous(attributeValueISOBJECT));
                }

                if ((objectAllocateMethod & ObjectAllocateMethod.FirstEntityWithTypePronoun) == ObjectAllocateMethod.FirstEntityWithTypePronoun)
                {
                    #region [.FirstEntityWithTypePronoun.]
                    @object = element.DescendantsAndSelfEntity().FirstOrDefault(e => e.HasTypeAttributeValue(TypeAttributeValue.Pronoun));
                    if (@object.IsNotNull() &&
                        @object.GetAttributeISSUBJECT().IsNull())   //and not has attribute 'ISSUBJECT'
                    {
                        return(@object.SetAttributeISOBJECT_wpfHomogeneous(attributeValueISOBJECT));
                    }
                    #endregion
                }
                #endregion
            }

            return(null);
        }
        public virtual SubjectObjectsTuple Process(SubsentPair pair, Language language
                                                   , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.condition.]
            SubsentsIsSwaped = false;

            var subjects = default(IEnumerable <SubjectData>);
            if (!IsSubsent1MatchCondition(pair, language, out subjects))
            {
                pair             = pair.SwapSubsents();
                SubsentsIsSwaped = true;
                if (!IsSubsent1MatchCondition(pair, language, out subjects))
                {
                    return(null);
                }
            }
            #endregion

            #region [.match condition.]
            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();
            //allocate objects
            var subsent = pair.SUBSENT1; // (SubsentsIsSwaped ? pair.SUBSENT1 : pair.SUBSENT2);
            var objects = subsent.ElementsExceptT().TryAllocateObjectsInUnknownElements(objectAllocateMethod, id);

            //mark begin-end DirectSpeech-subsents
            subsent.Elements().SetAttributeDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
        public virtual SubjectObjectsTuple Process(SubsentPair pair, Language language
                                                   , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.condition.]
            var subjects = default(IEnumerable <SubjectData>);
            if (!IsChildMatchCondition(pair, language) ||
                !IsParentMatchCondition(pair, language, out subjects)
                )
            {
                return(null);
            }
            #endregion

            #region [.match condition.]
            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();

            //allocate objects
            var subsents = pair.CHILD.AfterAndSelfSubsents().ToArray();
            var objects  = default(XElement[]);
            //if-RightExtremeElement-rights-then-pair.CHILD
            if (subjects.Last().RightExtremeElement.IsAfter(pair.CHILD))
            {
                objects = pair.CHILD.AfterSubsents().TryAllocateObjectsInSubsents(objectAllocateMethod, id).ToArray();
            }
            else
            {
                objects = subsents.TryAllocateObjectsInSubsents(objectAllocateMethod, id).ToArray();
            }

            //mark begin-end IndirectSpeech-subsents
            subsents.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
예제 #11
0
        public override SubjectObjectsTuple Process(SubsentPair pair, Language language
                                                    , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.condition.]
            var subjects = default(IEnumerable <SubjectData>);
            if (!_IsChildMatchCondition(pair, language, out subjects))
            {
                return(null);
            }
            #endregion

            #region [.match condition.]
            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();

            //allocate objects
            var elements = pair.CHILD.ElementsAfterSelf();
            var subsents = pair.CHILD.AfterSubsents();
            var objects  = elements.TryAllocateObjects(objectAllocateMethod, id)
                           .Concat
                           (
                subsents.TryAllocateObjectsInSubsents(objectAllocateMethod, id)
                           )
                           .ToArray();

            //mark begin-end IndirectSpeech-subsents
            subsents.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);
            elements.SetAttributeINDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
예제 #12
0
        public virtual SubjectObjectsTuple Process(SubsentPair pair, Language language
                                                   , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.condition.]
            var subjects = default(IEnumerable <SubjectData>);
            if (!IsParentMatchCondition(pair, language, out subjects) ||
                !IsChildMatchCondition(pair, language))
            {
                return(null);
            }
            #endregion

            #region [.match condition.]
            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();

            //allocate objects
            var objects = pair.CHILD.ElementsExceptT().TryAllocateObjects(objectAllocateMethod, id);

            //mark begin-end IndirectSpeech-subsents
            var u = pair.CHILD.ElementsExceptT().LastOrDefault();
            pair.CHILD.Elements().TakeWhile(e => e != u).SetAttributeINDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
예제 #13
0
        public override IEnumerable <SubjectObjectsTuple> Process(XElement sent, Language language
                                                                  , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            sent.ThrowIfNotSent();

            var opinionMiningTuples = new List <SubjectObjectsTuple>();
            var opinionMiningTuple  = default(SubjectObjectsTuple);
            var essences            = GetEssence4Processing(sent);

            foreach (var essence in essences)
            {
                foreach (var rule in _Rules)
                {
                    opinionMiningTuple = ProcessEssence(rule, essence, language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod);
                    if (!opinionMiningTuple.IsNull())
                    {
                        opinionMiningTuples.Add(opinionMiningTuple);
                        break;
                    }
                }

                if (!opinionMiningTuple.IsNull())
                {
                    break;
                }
            }

            //Объединяем/группируем одинаковые Subject/субъекты
            return(GroupAlikeSubjects(opinionMiningTuples));
        }
예제 #14
0
        public IList <SubjectObjectsTuple> Process(XElement sent, ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            sent.ThrowIfNotSent();

            var opinionMiningTuples = new List <SubjectObjectsTuple>();

            ThreeSubsent.Process(sent, Language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod)
            .AddRangeTo(opinionMiningTuples);
            if (opinionMiningTuples.AnyEx())
            {
                return(opinionMiningTuples);
            }

            TwoSubsent_Ex.Process(sent, Language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod)
            .AddRangeTo(opinionMiningTuples);
            if (opinionMiningTuples.AnyEx())
            {
                return(opinionMiningTuples);
            }

            TwoSubsent.Process(sent, Language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod)
            .AddRangeTo(opinionMiningTuples);
            if (opinionMiningTuples.AnyEx())
            {
                return(opinionMiningTuples);
            }
            TwoSubsent_2.Process(sent, Language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod)
            .AddRangeTo(opinionMiningTuples);
            if (opinionMiningTuples.AnyEx())
            {
                return(opinionMiningTuples);
            }

            TwoCitation.Process(sent, Language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod)
            .AddRangeTo(opinionMiningTuples);
            if (opinionMiningTuples.AnyEx())
            {
                return(opinionMiningTuples);
            }

            OneCitation.Process(sent, Language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod)
            .AddRangeTo(opinionMiningTuples);
            if (opinionMiningTuples.AnyEx())
            {
                return(opinionMiningTuples);
            }

            return(opinionMiningTuples);
        }
예제 #15
0
        public virtual SubjectObjectsTuple Process(SubsentPair pair, Language language
                                                   , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.condition.]
            SubsentsIsSwaped = false;

            var subjects = default(IEnumerable <SubjectData>);
            if (!IsSubsent2MatchCondition(pair, language) ||
                !IsSubsent1MatchCondition(pair, language, out subjects))
            {
                pair             = pair.SwapSubsents();
                SubsentsIsSwaped = true;
                if (!IsSubsent2MatchCondition(pair, language) ||
                    !IsSubsent1MatchCondition(pair, language, out subjects))
                {
                    return(null);
                }
            }
            #endregion

            #region [.match condition.]
            //allocate objects
            var subsents = (SubsentsIsSwaped ? pair.SUBSENT2.BeforeAndSelfSubsents() :
                            pair.SUBSENT2.AfterAndSelfSubsents()
                            ).ToArray();

            if (subjects.HasAnySubjectEntityAncestorInAnySubsents(subsents))
            {
                return(null);
            }

            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();

            var objects = subsents.TryAllocateObjectsInSubsents(objectAllocateMethod, id).ToArray();

            //mark begin-end IndirectSpeech-subsents
            subsents.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
 protected override SubjectObjectsTuple ProcessEssence(IS_OneSubsentBase pattern, XElement essence, Language language
                                                       , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
 {
     if (essence.IsSubsentNotHasObjectAndSubject())
     {
         return(pattern.Process(essence, language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod));
     }
     return(null);
 }
 protected override SubjectObjectsTuple ProcessEssence(IS_ParentChild_DanglingParticipleAfterDSBase rule, SubsentTuple essence, Language language
                                                       , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
 {
     throw (new InvalidOperationException());
 }
        public SubjectObjectsTuple Process(XElement subsent, Language language
                                           , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            subsent.ThrowIfNotSubsent();

            #region [.condition.]
            var subjects       = default(IEnumerable <SubjectData>);
            var quotePairLeft  = default(CitationQuotes);
            var quotePairRight = default(CitationQuotes);
            if (!IsSubsentMatchCondition(subsent, language, out subjects, out quotePairLeft, out quotePairRight))
            {
                return(null);
            }
            #endregion

            #region [.match condition.]
            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();
            //allocate objects
            var elementsLeft  = quotePairLeft.ElementsBetween();
            var elementsRight = quotePairRight.ElementsBetween();
            var objects       = elementsLeft.TryAllocateObjectsInUnknownElements(objectAllocateMethod, id)
                                .Concat
                                (
                elementsRight.TryAllocateObjectsInUnknownElements(objectAllocateMethod, id)
                                )
                                .ToArray();

            //mark begin-end DirectSpeech
            elementsLeft.SetAttributeDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);
            elementsRight.SetAttributeDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
        public virtual SubjectObjectsTuple Process(SubsentTuple tuple, Language language
                                                   , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.condition.]
            var subjects = default(IEnumerable <SubjectData>);
            if (!IsParentMatchCondition(tuple) ||
                !IsChildMatchCondition(tuple, language, out subjects))
            {
                return(null);
            }
            #endregion

            #region [.match condition.]
            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();
            #region previous. commented

            /*
             * //allocate objects
             * var objects = tuple.PARENT.ElementsExceptT().TryAllocateObjects( id )
             *           .Concat
             *           (
             *           tuple.SUBSENT3.ElementsExceptT().TryAllocateObjects( id )
             *           );
             *
             * //create IndirectSpeech-parent-1
             * var subsentIS = directAndIndirectSpeechGlobalNumber.CreateSubsentIndirectSpeech();
             * subsentIS.MoveIn2ThisAllNodes( tuple.PARENT.Nodes().TakeWhile( n => n != tuple.CHILD ) );
             * tuple.CHILD.AddBeforeSelf( subsentIS );
             *
             * //create IndirectSpeech-subsent-3
             * subsentIS = directAndIndirectSpeechGlobalNumber.CreateSubsentIndirectSpeech();
             * subsentIS.MoveIn2ThisAllNodes( tuple.SUBSENT3.Nodes() );
             * tuple.SUBSENT3.Add( subsentIS );
             */
            #endregion

            //allocate objects
            var elements1 = tuple.PARENT.Elements().TakeWhile(e => e != tuple.CHILD);

            var subsents1 = tuple.PARENT.BeforeSubsents().ToArray();
            var subsents3 = tuple.SUBSENT3.AfterAndSelfSubsents().ToArray();

            var objects = subsents1.TryAllocateObjectsInSubsents(objectAllocateMethod, id)
                          .Concat
                          (
                elements1.TryAllocateObjects(objectAllocateMethod, id)
                          )
                          .Concat
                          (
                subsents3.TryAllocateObjectsInSubsents(objectAllocateMethod, id)
                          )
                          .ToArray();

            //mark begin-end IndirectSpeech-subsents-1
            subsents1.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);
            elements1.SetAttributeINDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);

            //mark begin-end IndirectSpeech-subsents-3
            subsents3.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
예제 #20
0
        public static List <XElement> TryAllocateObjects4AuthorSubject(this XElement sent, ObjectAllocateMethod objectAllocateMethod, InquiriesSynonymsInfo isi)
        {
            sent.ThrowIfNotSent();

            var objects = new List <XElement>();

            var subsents = Algorithms.GetSubsents4AllocateInquiry(sent);

            foreach (var subsent in subsents)
            {
                var inquiries = Algorithms.GetAllocateInquiries4Subsent(subsent, objectAllocateMethod, isi, false);
                foreach (var inquiryEntity in inquiries)
                {
                    objects.Add(inquiryEntity.SetAttributeISOBJECT_wpfHomogeneous(ATTRIBUTEVALUE_ISOBJECT_4AUTHORSUBJECT));
                }
            }

            return(objects);
        }
 protected override SubjectObjectsTuple ProcessEssence(DS_TwoSubsent_ExBase pattern, DS_TwoSubsent_ExBase.SubsentPair essence, Language language
                                                       , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
 {
     if (essence.IsNotHasSubject())
     {
         return(pattern.Process(essence, language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod));
     }
     return(null);
 }
예제 #22
0
 public abstract IEnumerable <SubjectObjectsTuple> Process(XElement sent, Language languag
                                                           , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod);
예제 #23
0
        public override SubjectObjectsTuple Process(SubsentPair pair, Language language
                                                    , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.condition.]
            SubjectData sd = null;

            var u = inderectspeech1.GetElementUByCondition(pair.SUBSENT1.Elements());
            if (u.IsNull())
            {
                return(null);
            }

            sd = pattern1.GetSubjectData(u.ElementsAfterSelf(), language);
            if (sd.IsNull())
            {
                return(null);
            }

            var u2 = inderectspeech1.GetElementUByCondition(sd.RightExtremeElement.ElementsAfterSelf());
            if (u2.IsNull())
            {
                return(null);
            }
            #endregion

            #region [.match condition.]
            //allocate objects
            var subsents2 = (SubsentsIsSwaped ? pair.SUBSENT2.BeforeAndSelfSubsents() :
                             pair.SUBSENT2.AfterAndSelfSubsents()
                             ).ToArray();

            if (sd.HasAnySubjectEntityAncestorInAnySubsents(subsents2))
            {
                return(null);
            }

            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            sd.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = sd.FirstEntity().GetAttributeIDForce();

            //allocate objects in IndirectSpeech-subsents-2
            var objects2 = subsents2.TryAllocateObjectsInSubsents(objectAllocateMethod, id).ToArray();

            //mark begin-end IndirectSpeech-subsents-2
            subsents2.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);

            var objects1 = pair.SUBSENT1.ElementsExceptT().TakeWhile(e => e != u).TryAllocateObjects(objectAllocateMethod, id).ToArray();
            //mark begin-end IndirectSpeech-subsent-1
            pair.SUBSENT1.Elements().TakeWhile(e => e != u).SetAttributeINDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);

            //build all objects
            var objects = objects1
                          .Concat
                          (
                objects2
                          )
                          .ToArray();

            //add 2 result
            return(new SubjectObjectsTuple(sd.RepeatOnce(), objects, Id));

            #endregion
        }
예제 #24
0
 protected override SubjectObjectsTuple ProcessEssence(IS_ParentChild_DanglingParticipleBase pattern, IS_ParentChild_DanglingParticipleBase.SubsentTuple essence, Language language
                                                       , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
 {
     if (essence.IsNotHasSubject())
     {
         return(pattern.Process(essence, language, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod));
     }
     return(null);
 }
        public SubjectObjectsTuple Process(XElement sent, Language language, int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod, SubjectObjectsTuple DSsubjectObjectsTuple)
        {
            var essences = GetEssence4Processing(sent);

            foreach (var essence in essences)
            {
                //if ( essence.IsNotHasSubject() )
                //{
                foreach (var rule in _Rules)
                {
                    var sot = rule.Process(essence, language, directAndIndirectSpeechGlobalNumber, objectAllocateMethod, DSsubjectObjectsTuple);
                    if (sot.IsNotNull())
                    {
                        return(sot);
                    }
                }
                //}
            }
            return(null);
        }
예제 #26
0
        public IEnumerable <SubjectObjectsTuple> Process(XElement sent, ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            var result = DirectSpeech.Process(sent, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod);

            if (!result.AnyEx())
            {
                result = IndirectSpeech.Process(sent, ref directAndIndirectSpeechGlobalNumber, objectAllocateMethod);
            }
            else if (result.Count == 1)
            {
                /*
                 * Если DirectSpeech отработало (первое условие), то смотрим только один шаблон: ParentChild-DanglingParticiple,
                 * с условием, что субъект высказывания ENTITY SUBJECT="TRUE" остался тот  же (второе условие).
                 */
                var sot = IS_ParentChild_DanglingParticipleAfterDSGroup.Instance.Process
                          (
                    sent,
                    Language,
                    directAndIndirectSpeechGlobalNumber,
                    objectAllocateMethod,
                    result.First()
                          );
                if (sot != null)
                {
                    return(sot.RepeatOnce());
                }
            }

            return(result);
        }
        public virtual SubjectObjectsTuple Process(SubsentTuple tuple, Language language, int directAndIndirectSpeechGlobalNumber
                                                   , ObjectAllocateMethod objectAllocateMethod, SubjectObjectsTuple DSsubjectObjectsTuple)
        {
            #region [.condition.]
            var subjects = default(IEnumerable <SubjectData>);
            if (!IsParentMatchCondition(tuple, language, out subjects) ||
                !IsChildMatchCondition(tuple, language))
            {
                return(null);
            }
            #endregion

            //проверяем, что субъект высказывания Entity из DS остался тот же
            var e1 = from s1 in DSsubjectObjectsTuple.Subjects
                     from s2 in s1.SubjectEssences
                     select s2.Entity;
            var e2 = from s1 in subjects
                     from s2 in s1.SubjectEssences
                     select s2.Entity;
            if (e2.Except(e1).Any())
            {
                return(null);
            }

            #region [.match condition.]
            MatchActionDebugInfoOutput(this.Id);

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();

            //allocate objects
            var subsents = tuple.CHILD.AfterAndSelfSubsents().ToArray();
            var objects  = subsents.TryAllocateObjectsInSubsents(objectAllocateMethod, id).ToArray();

            //mark begin-end IndirectSpeech-subsents
            subsents.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            var v1 = from s1 in DSsubjectObjectsTuple.Subjects
                     from s2 in s1.SubjectEssences
                     select s2.VerbValue;
            var v2 = from s1 in subjects
                     from s2 in s1.SubjectEssences
                     select s2.VerbValue;
            //склеиваем название нескольких (к.п. 2-х) глаголов
            var verbsValues = v1.Concat(v2).Distinct().JoinBy(", ");

            //создем новые пары субъект высказывания Entity - название нескольких (к.п. 2-х) глаголов Verb
            var se = from s1 in DSsubjectObjectsTuple.Subjects
                     from s2 in s1.SubjectEssences
                     select new SubjectEssence(s2, verbsValues);

            //создем новый IEnumerable< SubjectData >
            subjects = new SubjectData
                       (
                se.ToList(),
                DSsubjectObjectsTuple.Subjects.First().LeftExtremeElement,
                subjects.Last().RightExtremeElement
                       )
                       .RepeatOnce();
            //создаем объединенный результат some-rule-DS + IS_ParentChild_DanglingParticipleAfterDS_01
            return(new SubjectObjectsTuple(subjects,
                                           DSsubjectObjectsTuple.Objects.Select(o => o.Entity).Concat(objects),
                                           DSsubjectObjectsTuple.RuleId + " + " + Id));

            #endregion
        }
예제 #28
0
        public virtual SubjectObjectsTuple Process(SubsentTuple tuple, Language language
                                                   , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            #region [.condition.]
            var subjects = default(IEnumerable <SubjectData>);
            if (!IsSubsent2MatchCondition(tuple, language, out subjects))
            {
                return(null);
            }
            #endregion

            #region [.match condition.]
            //allocate objects
            var subsents1 = tuple.SUBSENT1.BeforeSubsents().ToArray();
            if (subjects.HasAnySubjectEntityAncestorInAnySubsents(subsents1))
            {
                return(null);
            }

            var subsents3 = tuple.SUBSENT3.AfterAndSelfSubsents().ToArray();
            if (subjects.HasAnySubjectEntityAncestorInAnySubsents(subsents3))
            {
                return(null);
            }

            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();

            var objects1 = subsents1.TryAllocateObjectsInSubsents(objectAllocateMethod, id).ToArray();
            //mark begin-end IndirectSpeech-subsents-1
            subsents1.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);

            var objects3 = subsents3.TryAllocateObjectsInSubsents(objectAllocateMethod, id).ToArray();
            //mark begin-end IndirectSpeech-subsents-3
            subsents3.SetAttributeINDIRECTSPEECH_BEGINEND_4Subsents(directAndIndirectSpeechGlobalNumber);

            var u                = tuple.SUBSENT1.ElementsExceptT().LastOrDefault();
            var elements1        = tuple.SUBSENT1.Elements().TakeWhile(e => e != u);
            var elements1objects = elements1.TryAllocateObjects(objectAllocateMethod, id).ToArray();
            //mark begin-end IndirectSpeech-subsents-1
            elements1.SetAttributeINDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);

            //build all objects
            var objects = objects1
                          .Concat
                          (
                elements1objects
                          )
                          .Concat
                          (
                objects3
                          )
                          .ToArray();

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
        public SubjectObjectsTuple Process(XElement subsent, Language language
                                           , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod)
        {
            subsent.ThrowIfNotSubsent();

            #region [.condition.]
            var subjects = default(IEnumerable <SubjectData>);
            var elementU = default(XElement);
            if (!IsSubsentMatchCondition(subsent, language, out subjects, out elementU))
            {
                return(null);
            }
            #endregion

            #region [.match condition.]
            MatchActionDebugInfoOutput(this.Id);

            //growup global IndirectSpeech-subsent number
            directAndIndirectSpeechGlobalNumber++;

            //set 'ISSUBJECT' attribute for subject-entity
            subjects.SetAttributeISSUBJECTforAllEntity(directAndIndirectSpeechGlobalNumber);

            //set 'ISOBJECT' attribute for all object-entity
            var id = subjects.GetAttributeIDForce();
            //allocate objects
            var objects = elementU.ElementsAfterSelfExceptT().TryAllocateObjects(objectAllocateMethod, id);

            //mark begin-end IndirectSpeech
            elementU.ElementsAfterSelfExceptT().SetAttributeINDIRECTSPEECH_BEGINEND(directAndIndirectSpeechGlobalNumber);

            //add 2 result
            return(new SubjectObjectsTuple(subjects, objects, Id));

            #endregion
        }
예제 #30
0
 protected abstract SubjectObjectsTuple ProcessEssence(TRule rule, TEssence essence, Language language
                                                       , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod);