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
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))