def create_refenets_tokens_with_register(self, ad : 'AnalyzerData', name : str, regist : bool=True) -> typing.List['ReferentToken']:
     if (name == "T ="): 
         name = "ТЕМПЕРАТУРА"
     res = list()
     for u in self.units: 
         rt = ReferentToken(u.create_referent_with_register(ad), u.begin_token, u.end_token)
         res.append(rt)
     mr = MeasureReferent()
     templ = "1"
     if (self.single_val is not None): 
         mr.add_value(self.single_val)
         if (self.plus_minus is not None): 
             templ = "[1 ±2{0}]".format(("%" if self.plus_minus_percent else ""))
             mr.add_value(self.plus_minus)
         elif (self.about): 
             templ = "~1"
     else: 
         if (self.not0_ and ((self.from_val is None or self.to_val is None))): 
             b = self.from_include
             self.from_include = self.to_include
             self.to_include = b
             v = self.from_val
             self.from_val = self.to_val
             self.to_val = v
         num = 1
         if (self.from_val is not None): 
             mr.add_value(self.from_val)
             templ = ("[1" if self.from_include else "]1")
             num += 1
         else: 
             templ = "]"
         if (self.to_val is not None): 
             mr.add_value(self.to_val)
             templ = "{0} .. {1}{2}".format(templ, num, (']' if self.to_include else '['))
         else: 
             templ += " .. ["
     mr.template = templ
     for rt in res: 
         mr.add_slot(MeasureReferent.ATTR_UNIT, rt.referent, False, 0)
     if (name is not None): 
         mr.add_slot(MeasureReferent.ATTR_NAME, name, False, 0)
     if (self.div_num is not None): 
         dn = self.div_num.create_refenets_tokens_with_register(ad, None, True)
         res.extend(dn)
         mr.add_slot(MeasureReferent.ATTR_REF, dn[len(dn) - 1].referent, False, 0)
     ki = UnitToken.calc_kind(self.units)
     if (ki != MeasureKind.UNDEFINED): 
         mr.kind = ki
     if (regist and ad is not None): 
         mr = (Utils.asObjectOrNull(ad.register_referent(mr), MeasureReferent))
     res.append(ReferentToken(mr, self.begin_token, self.end_token))
     return res
예제 #2
0
 def __calc_genetive(self) -> None:
     if (not self.from0_.source.can_be_noun):
         return
     if (self.from0_.source.typ == SentItemType.FORMULA):
         if (self.to.source.typ != SentItemType.NOUN):
             return
         self.coef = SemanticService.PARAMS.transitive_coef
         return
     frmorph = self.from_morph
     if (self.to.source.typ == SentItemType.FORMULA):
         if (self.from0_.source.typ != SentItemType.NOUN):
             return
         if (frmorph.case_.is_genitive):
             self.coef = SemanticService.PARAMS.transitive_coef
         elif (frmorph.case_.is_undefined):
             self.coef = (0)
         return
     if (isinstance(self.from0_.source.source, NumbersWithUnitToken)):
         if (self.from0_.order != (self.to.order + 1)):
             return
         num = Utils.asObjectOrNull(self.from0_.source.source,
                                    NumbersWithUnitToken)
         ki = UnitToken.calc_kind(num.units)
         if (ki != MeasureKind.UNDEFINED):
             if (UnitsHelper.check_keyword(ki, self.to.source.source)):
                 self.coef = (SemanticService.PARAMS.next_model * (3))
                 return
         if (isinstance(self.to.source.source, NumbersWithUnitToken)):
             return
     non_gen_text = False
     if (Utils.isNullOrEmpty(self.from_prep) and
             not (isinstance(self.from0_.source.source, VerbPhraseToken))):
         if (self.from0_.order != (self.to.order + 1)):
             non_gen_text = True
     if (self.to.source.dr_groups is not None):
         for gr in self.to.source.dr_groups:
             if (gr.cm.transitive and Utils.isNullOrEmpty(self.from_prep)):
                 ok = False
                 if (isinstance(self.to.source.source, VerbPhraseToken)):
                     if (frmorph.case_.is_accusative):
                         ok = True
                         self.can_be_pacient = True
                 elif (frmorph.case_.is_genitive
                       and self.from0_.order == (self.to.order + 1)):
                     ok = True
                 if (ok):
                     self.coef = SemanticService.PARAMS.transitive_coef
                     return
             if ((((gr.cm.questions) & (QuestionType.WHATTODO))) !=
                 (QuestionType.UNDEFINED) and
                 (isinstance(self.from0_.source.source, VerbPhraseToken))):
                 self.coef = SemanticService.PARAMS.transitive_coef
                 return
             if (gr.cm.nexts is not None):
                 if (self.from_prep in gr.cm.nexts):
                     cas = gr.cm.nexts[self.from_prep]
                     if (not ((cas) & frmorph.case_).is_undefined):
                         if (Utils.isNullOrEmpty(self.from_prep)
                                 and self.from0_.order !=
                             (self.to.order + 1)
                                 and ((cas) & frmorph.case_).is_genitive):
                             pass
                         else:
                             self.coef = SemanticService.PARAMS.next_model
                             return
     if (non_gen_text or not Utils.isNullOrEmpty(self.from_prep)):
         return
     cas0 = frmorph.case_
     if (cas0.is_genitive or cas0.is_instrumental or cas0.is_dative):
         if ((isinstance(self.to.source.source, NumbersWithUnitToken))
                 and cas0.is_genitive):
             self.coef = SemanticService.PARAMS.transitive_coef
         else:
             self.coef = SemanticService.PARAMS.ng_link
             if (cas0.is_nominative
                     or self.from0_.source.typ == SentItemType.PARTBEFORE):
                 self.coef /= (2)
             if (not cas0.is_genitive):
                 self.coef /= (2)
     elif (isinstance(self.from0_.source.source, VerbPhraseToken)):
         self.coef = 0.1
     if ((isinstance(self.to.source.source, NumbersWithUnitToken))
             and self.to.source.end_token.is_value("ЧЕМ", None)):
         self.coef = (SemanticService.PARAMS.transitive_coef * (2))