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 }
private static DigestOutputResult CreateOpinionMiningWithTonalityResult( XElement rdf, ICoreferenceInfo coreferenceInfo, ObjectAllocateMethod objectAllocateMethod) { var xdoc = new XDocument(rdf); var result = DigestWcfService.ExecuteDigestInprocWithLinguisticService(xdoc, coreferenceInfo, objectAllocateMethod); return(result); }
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); }
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()); } }
/*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); }
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()); }
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 }
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 }
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 }
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)); }
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); }
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 }
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); }
public abstract IEnumerable <SubjectObjectsTuple> Process(XElement sent, Language languag , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod);
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 }
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); }
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 }
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 }
protected abstract SubjectObjectsTuple ProcessEssence(TRule rule, TEssence essence, Language language , ref int directAndIndirectSpeechGlobalNumber, ObjectAllocateMethod objectAllocateMethod);