예제 #1
0
 def _deserialize(self, str0_: 'ByteArrayWrapper', pos: int) -> None:
     cou = str0_.deserialize_short(pos)
     while cou > 0:
         it = ControlModelItem()
         b = str0_.deserialize_byte(pos)
         if ((((b) & 0x80)) != 0):
             it.nominative_can_be_agent_and_pacient = True
         it.typ = (Utils.valToEnum(((b) & 0x7F), ControlModelItemType))
         if (it.typ == ControlModelItemType.WORD):
             it.word = str0_.deserialize_string(pos)
         licou = str0_.deserialize_short(pos)
         while licou > 0:
             bi = str0_.deserialize_byte(pos)
             i = bi
             b = str0_.deserialize_byte(pos)
             if (i >= 0 and (i < len(ControlModelQuestion.ITEMS))):
                 it.links[ControlModelQuestion.ITEMS[i]] = Utils.valToEnum(
                     b, SemanticRole)
             licou -= 1
         self.items.append(it)
         cou -= 1
     cou = str0_.deserialize_short(pos)
     while cou > 0:
         p = str0_.deserialize_string(pos)
         if (p is not None):
             self.pacients.append(p)
         cou -= 1
예제 #2
0
 def _deserialize(self, str0_: 'ByteArrayWrapper', pos: int) -> bool:
     id0__ = str0_.deserialize_short(pos)
     if (id0__ <= 0):
         return False
     self.misc_info_id = (id0__)
     iii = str0_.deserialize_short(pos)
     mc = MorphClass()
     mc.value = (iii)
     if (mc.is_misc and mc.is_proper):
         mc.is_misc = False
     self.class0_ = mc
     bbb = 0
     bbb = str0_.deserialize_byte(pos)
     self.gender = Utils.valToEnum(bbb, MorphGender)
     bbb = str0_.deserialize_byte(pos)
     self.number = Utils.valToEnum(bbb, MorphNumber)
     bbb = str0_.deserialize_byte(pos)
     mca = MorphCase()
     mca.value = (bbb)
     self.case_ = mca
     s = str0_.deserialize_string(pos)
     self.normal_tail = s
     s = str0_.deserialize_string(pos)
     self.full_normal_tail = s
     return True
예제 #3
0
 def __deserialize_item(self, stream: Stream) -> 'MorphBaseInfo':
     from pullenti.ner.core.internal.SerializerHelper import SerializerHelper
     ty = stream.readbyte()
     res = (MorphBaseInfo() if ty == 0 else MorphWordForm())
     res.class0_ = MorphClass._new53(
         SerializerHelper.deserialize_short(stream))
     res.case_ = MorphCase._new29(
         SerializerHelper.deserialize_short(stream))
     res.gender = Utils.valToEnum(
         SerializerHelper.deserialize_short(stream), MorphGender)
     res.number = Utils.valToEnum(
         SerializerHelper.deserialize_short(stream), MorphNumber)
     res.language = MorphLang._new56(
         SerializerHelper.deserialize_short(stream))
     if (ty == 0):
         return res
     wf = Utils.asObjectOrNull(res, MorphWordForm)
     wf.normal_case = SerializerHelper.deserialize_string(stream)
     wf.normal_full = SerializerHelper.deserialize_string(stream)
     wf.undef_coef = SerializerHelper.deserialize_short(stream)
     cou = SerializerHelper.deserialize_int(stream)
     i = 0
     while i < cou:
         if (wf.misc is None):
             wf.misc = MorphMiscInfo()
         wf.misc.attrs.append(SerializerHelper.deserialize_string(stream))
         i += 1
     return res
예제 #4
0
 def _hasMorphEquals(list0_: typing.List['MorphWordForm'],
                     mv: 'MorphWordForm') -> bool:
     for mr in list0_:
         if ((mv.class0_ == mr.class0_ and mv.number == mr.number
              and mv.gender == mr.gender)
                 and mv.normal_case == mr.normal_case
                 and mv.normal_full == mr.normal_full):
             mr.case_ = (mr.case_) | mv.case_
             p = mv.misc.person
             if (p != MorphPerson.UNDEFINED and p != mr.misc.person):
                 mr.misc = mr.misc.clone()
                 mr.misc.person = Utils.valToEnum(
                     (mr.misc.person) | (mv.misc.person), MorphPerson)
             return True
     for mr in list0_:
         if ((mv.class0_ == mr.class0_ and mv.number == mr.number
              and mv.case_ == mr.case_) and mv.normal_case == mr.normal_case
                 and mv.normal_full == mr.normal_full):
             mr.gender = Utils.valToEnum((mr.gender) | (mv.gender),
                                         MorphGender)
             return True
     for mr in list0_:
         if ((mv.class0_ == mr.class0_ and mv.gender == mr.gender
              and mv.case_ == mr.case_) and mv.normal_case == mr.normal_case
                 and mv.normal_full == mr.normal_full):
             mr.number = Utils.valToEnum((mr.number) | (mv.number),
                                         MorphNumber)
             return True
     return False
예제 #5
0
 def __correctExtTypes(ex: 'NumberExToken') -> None:
     t = ex.end_token.next0_
     if (t is None):
         return
     ty = ex.ex_typ
     wrapty480 = RefOutArgWrapper(ty)
     tt = NumberExHelper.__corrExTyp2(t, wrapty480)
     ty = wrapty480.value
     if (tt is not None):
         ex.ex_typ = ty
         ex.end_token = tt
         t = tt.next0_
     if (t is None or t.next0_ is None):
         return
     if (t.isCharOf("/\\") or t.isValue("НА", None)):
         pass
     else:
         return
     tok = NumberExHelper._m_postfixes.tryParse(t.next0_,
                                                TerminParseAttr.NO)
     if (tok is not None and (((Utils.valToEnum(
             tok.termin.tag, NumberExType)) != NumberExType.MONEY))):
         ex.ex_typ2 = (Utils.valToEnum(tok.termin.tag, NumberExType))
         ex.end_token = tok.end_token
         ty = ex.ex_typ2
         wrapty479 = RefOutArgWrapper(ty)
         tt = NumberExHelper.__corrExTyp2(ex.end_token.next0_, wrapty479)
         ty = wrapty479.value
         if (tt is not None):
             ex.ex_typ2 = ty
             ex.end_token = tt
             t = tt.next0_
예제 #6
0
 def person(self) -> 'MorphPerson':
     """ Лицо """
     res = MorphPerson.UNDEFINED
     if ("1 л." in self.__m_attrs):
         res = (Utils.valToEnum((res) | (MorphPerson.FIRST), MorphPerson))
     if ("2 л." in self.__m_attrs):
         res = (Utils.valToEnum((res) | (MorphPerson.SECOND), MorphPerson))
     if ("3 л." in self.__m_attrs):
         res = (Utils.valToEnum((res) | (MorphPerson.THIRD), MorphPerson))
     return res
예제 #7
0
 def __getKind(self, s: str) -> 'TransportKind':
     if (s is None):
         return TransportKind.UNDEFINED
     try:
         res = Utils.valToEnum(s, TransportKind)
         if (isinstance(res, TransportKind)):
             return Utils.valToEnum(res, TransportKind)
     except Exception as ex2549:
         pass
     return TransportKind.UNDEFINED
 def tryParse(t : 'Token') -> 'DefinitionWithNumericToken':
     """ Выделить определение с указанного токена
     
     Args:
         t(Token): токен
     
     """
     if (not MiscHelper.canBeStartOfSentence(t)): 
         return None
     tt = t
     noun_ = None
     num = None
     first_pass2886 = True
     while True:
         if first_pass2886: first_pass2886 = False
         else: tt = tt.next0_
         if (not (tt is not None)): break
         if (tt != t and MiscHelper.canBeStartOfSentence(tt)): 
             return None
         if (not ((isinstance(tt, NumberToken)))): 
             continue
         if (tt.whitespaces_after_count > 2 or tt == t): 
             continue
         if (tt.morph.class0_.is_adjective): 
             continue
         nn = NounPhraseHelper.tryParse(tt.next0_, NounPhraseParseAttr.NO, 0)
         if (nn is None): 
             continue
         num = (Utils.asObjectOrNull(tt, NumberToken))
         noun_ = nn
         break
     if (num is None or num.int_value is None): 
         return None
     res = DefinitionWithNumericToken(t, noun_.end_token)
     res.number = num.int_value
     res.number_begin_char = num.begin_char
     res.number_end_char = num.end_char
     res.noun = noun_.getNormalCaseText(None, True, MorphGender.UNDEFINED, False)
     res.nouns_genetive = (Utils.ifNotNull(noun_.getMorphVariant(MorphCase.GENITIVE, True), (res.noun if res is not None else None)))
     res.text = MiscHelper.getTextValue(t, num.previous, Utils.valToEnum((GetTextAttr.KEEPQUOTES) | (GetTextAttr.KEEPREGISTER), GetTextAttr))
     if (num.is_whitespace_before): 
         res.text += " "
     res.number_substring = MiscHelper.getTextValue(num, noun_.end_token, Utils.valToEnum((GetTextAttr.KEEPQUOTES) | (GetTextAttr.KEEPREGISTER), GetTextAttr))
     res.text += res.number_substring
     tt = noun_.end_token
     while tt is not None: 
         if (MiscHelper.canBeStartOfSentence(tt)): 
             break
         res.end_token = tt
         tt = tt.next0_
     if (res.end_token != noun_.end_token): 
         if (noun_.is_whitespace_after): 
             res.text += " "
         res.text += MiscHelper.getTextValue(noun_.end_token.next0_, res.end_token, Utils.valToEnum((GetTextAttr.KEEPQUOTES) | (GetTextAttr.KEEPREGISTER), GetTextAttr))
     return res
예제 #9
0
 def kind2(self) -> 'InstrumentKind':
     s = self.get_string_value(InstrumentBlockReferent.ATTR_KIND2)
     if (s is None):
         return InstrumentKind.UNDEFINED
     try:
         res = Utils.valToEnum(s, InstrumentKind)
         if (isinstance(res, InstrumentKind)):
             return Utils.valToEnum(res, InstrumentKind)
     except Exception as ex1583:
         pass
     return InstrumentKind.UNDEFINED
예제 #10
0
 def __tryParse(t: 'Token') -> 'BusinessFactItem':
     tok = BusinessFactItem.__m_base_onto.tryParse(t, TerminParseAttr.NO)
     if (tok is None and t.morph.class0_.is_verb and t.next0_ is not None):
         tok = BusinessFactItem.__m_base_onto.tryParse(
             t.next0_, TerminParseAttr.NO)
     if (tok is not None):
         ki = Utils.valToEnum(tok.termin.tag, BusinessFactKind)
         if (ki != BusinessFactKind.UNDEFINED):
             return BusinessFactItem._new402(t, tok.end_token,
                                             BusinessFactItemTyp.BASE, ki,
                                             tok.morph, tok.termin.tag2
                                             is not None)
         tt = tok.end_token.next0_
         first_pass2765 = True
         while True:
             if first_pass2765: first_pass2765 = False
             else: tt = tt.next0_
             if (not (tt is not None)): break
             if (tt.morph.class0_.is_preposition):
                 continue
             tok = BusinessFactItem.__m_base_onto.tryParse(
                 tt, TerminParseAttr.NO)
             if (tok is None):
                 continue
             ki = (Utils.valToEnum(tok.termin.tag, BusinessFactKind))
             if (ki != BusinessFactKind.UNDEFINED):
                 return BusinessFactItem._new403(t, tok.end_token,
                                                 BusinessFactItemTyp.BASE,
                                                 ki, tok.morph)
             tt = tok.end_token
     npt = NounPhraseHelper.tryParse(t, NounPhraseParseAttr.NO, 0)
     if (npt is not None):
         if (((((npt.noun.isValue("АКЦИОНЕР", None) or npt.noun.isValue(
                 "ВЛАДЕЛЕЦ", None) or npt.noun.isValue("ВЛАДЕЛИЦА", None))
                or npt.noun.isValue("СОВЛАДЕЛЕЦ", None)
                or npt.noun.isValue("СОВЛАДЕЛИЦА", None))
               or npt.noun.isValue("АКЦІОНЕР", None) or npt.noun.isValue(
                   "ВЛАСНИК", None)) or npt.noun.isValue("ВЛАСНИЦЯ", None)
              or npt.noun.isValue("СПІВВЛАСНИК", None))
                 or npt.noun.isValue("СПІВВЛАСНИЦЯ", None)):
             return BusinessFactItem._new403(t, npt.end_token,
                                             BusinessFactItemTyp.BASE,
                                             BusinessFactKind.HAVE,
                                             npt.morph)
     if (npt is not None):
         if ((npt.noun.isValue("ОСНОВАТЕЛЬ", None)
              or npt.noun.isValue("ОСНОВАТЕЛЬНИЦА", None)
              or npt.noun.isValue("ЗАСНОВНИК", None))
                 or npt.noun.isValue("ЗАСНОВНИЦЯ", None)):
             return BusinessFactItem._new403(t, npt.end_token,
                                             BusinessFactItemTyp.BASE,
                                             BusinessFactKind.CREATE,
                                             npt.morph)
     return None
예제 #11
0
 def kind(self) -> 'SentimentKind':
     s = self.getStringValue(SentimentReferent.ATTR_KIND)
     if (s is None):
         return SentimentKind.UNDEFINED
     try:
         res = Utils.valToEnum(s, SentimentKind)
         if (isinstance(res, SentimentKind)):
             return Utils.valToEnum(res, SentimentKind)
     except Exception as ex2497:
         pass
     return SentimentKind.UNDEFINED
예제 #12
0
 def pointer(self) -> 'DatePointerType':
     """ Дополнительный указатель примерной даты """
     s = self.get_string_value(DateReferent.ATTR_POINTER)
     if (s is None):
         return DatePointerType.NO
     try:
         res = Utils.valToEnum(s, DatePointerType)
         if (isinstance(res, DatePointerType)):
             return Utils.valToEnum(res, DatePointerType)
     except Exception as ex783:
         pass
     return DatePointerType.NO
예제 #13
0
 def kind(self) -> 'DecreeChangeValueKind':
     """ Тип значение """
     s = self.getStringValue(DecreeChangeValueReferent.ATTR_KIND)
     if (s is None):
         return DecreeChangeValueKind.UNDEFINED
     try:
         res = Utils.valToEnum(s, DecreeChangeValueKind)
         if (isinstance(res, DecreeChangeValueKind)):
             return Utils.valToEnum(res, DecreeChangeValueKind)
     except Exception as ex1083:
         pass
     return DecreeChangeValueKind.UNDEFINED
예제 #14
0
 def detail(self) -> 'AddressDetailType':
     """ ополнительная детализация места (пересечение, около ...) """
     s = self.getStringValue(AddressReferent.ATTR_DETAIL)
     if (s is None):
         return AddressDetailType.UNDEFINED
     try:
         res = Utils.valToEnum(s, AddressDetailType)
         if (isinstance(res, AddressDetailType)):
             return Utils.valToEnum(res, AddressDetailType)
     except Exception as ex342:
         pass
     return AddressDetailType.UNDEFINED
예제 #15
0
 def kind(self) -> 'DefinitionKind':
     """ Тип тезиса """
     s = self.get_string_value(DefinitionReferent.ATTR_KIND)
     if (s is None):
         return DefinitionKind.UNDEFINED
     try:
         res = Utils.valToEnum(s, DefinitionKind)
         if (isinstance(res, DefinitionKind)):
             return Utils.valToEnum(res, DefinitionKind)
     except Exception as ex1122:
         pass
     return DefinitionKind.UNDEFINED
예제 #16
0
 def kind(self) -> 'BusinessFactKind':
     """ Классификатор бизнес-факта """
     s = self.getStringValue(BusinessFactReferent.ATTR_KIND)
     if (s is None): 
         return BusinessFactKind.UNDEFINED
     try: 
         res = Utils.valToEnum(s, BusinessFactKind)
         if (isinstance(res, BusinessFactKind)): 
             return Utils.valToEnum(res, BusinessFactKind)
     except Exception as ex448: 
         pass
     return BusinessFactKind.UNDEFINED
예제 #17
0
 def kind2(self) -> 'InstrumentKind':
     """ Классификатор дополнительный """
     s = self.getStringValue(InstrumentBlockReferent.ATTR_KIND2)
     if (s is None):
         return InstrumentKind.UNDEFINED
     try:
         res = Utils.valToEnum(s, InstrumentKind)
         if (isinstance(res, InstrumentKind)):
             return Utils.valToEnum(res, InstrumentKind)
     except Exception as ex1477:
         pass
     return InstrumentKind.UNDEFINED
예제 #18
0
 def kind(self) -> 'FundsKind':
     """ Классификатор ценной бумаги """
     s = self.getStringValue(FundsReferent.ATTR_KIND)
     if (s is None):
         return FundsKind.UNDEFINED
     try:
         res = Utils.valToEnum(s, FundsKind)
         if (isinstance(res, FundsKind)):
             return Utils.valToEnum(res, FundsKind)
     except Exception as ex449:
         pass
     return FundsKind.UNDEFINED
예제 #19
0
 def kind(self) -> 'InstrumentKind':
     """ Тип фрагмента """
     s = self.get_string_value(InstrumentBlockReferent.ATTR_KIND)
     if (s is None):
         return InstrumentKind.UNDEFINED
     try:
         if (s == "Part" or s == "Base" or s == "Special"):
             return InstrumentKind.UNDEFINED
         res = Utils.valToEnum(s, InstrumentKind)
         if (isinstance(res, InstrumentKind)):
             return Utils.valToEnum(res, InstrumentKind)
     except Exception as ex1582:
         pass
     return InstrumentKind.UNDEFINED
예제 #20
0
 def kind(self) -> 'InstrumentKind':
     """ Классификатор """
     s = self.getStringValue(InstrumentBlockReferent.ATTR_KIND)
     if (s is None):
         return InstrumentKind.UNDEFINED
     try:
         if (s == "Part" or s == "Base" or s == "Special"):
             return InstrumentKind.UNDEFINED
         res = Utils.valToEnum(s, InstrumentKind)
         if (isinstance(res, InstrumentKind)):
             return Utils.valToEnum(res, InstrumentKind)
     except Exception as ex1476:
         pass
     return InstrumentKind.UNDEFINED
예제 #21
0
 def kind(self) -> 'DecreeChangeKind':
     """ Классификатор """
     s = self.get_string_value(DecreeChangeReferent.ATTR_KIND)
     if (s is None): 
         return DecreeChangeKind.UNDEFINED
     try: 
         if (s == "Add"): 
             return DecreeChangeKind.APPEND
         res = Utils.valToEnum(s, DecreeChangeKind)
         if (isinstance(res, DecreeChangeKind)): 
             return Utils.valToEnum(res, DecreeChangeKind)
     except Exception as ex1111: 
         pass
     return DecreeChangeKind.UNDEFINED
예제 #22
0
 def deserialize_derivate_group(str0_: 'ByteArrayWrapper',
                                dg: 'DerivateGroup', pos: int) -> None:
     attr = str0_.deserialize_short(pos)
     if (((attr & 1)) != 0):
         dg.is_dummy = True
     if (((attr & 2)) != 0):
         dg.not_generate = True
     if (((attr & 4)) != 0):
         dg.m_transitive = 0
     if (((attr & 8)) != 0):
         dg.m_transitive = 1
     if (((attr & 0x10)) != 0):
         dg.m_rev_agent_case = 0
     if (((attr & 0x20)) != 0):
         dg.m_rev_agent_case = 1
     if (((attr & 0x40)) != 0):
         dg.m_rev_agent_case = 2
     dg.questions = (Utils.valToEnum(str0_.deserialize_short(pos),
                                     NextModelQuestion))
     dg.questions_ref = (Utils.valToEnum(str0_.deserialize_short(pos),
                                         NextModelQuestion))
     dg.prefix = str0_.deserialize_string(pos)
     cou = str0_.deserialize_short(pos)
     while cou > 0:
         w = DerivateWord(dg)
         w.spelling = str0_.deserialize_string(pos)
         w.class0_ = MorphClass()
         w.class0_.value = (str0_.deserialize_short(pos))
         w.lang = MorphLang._new10(str0_.deserialize_short(pos))
         w.attrs.value = (str0_.deserialize_short(pos))
         dg.words.append(w)
         cou -= 1
     cou = str0_.deserialize_short(pos)
     while cou > 0:
         pref = Utils.ifNotNull(str0_.deserialize_string(pos), "")
         cas = MorphCase()
         cas.value = (str0_.deserialize_short(pos))
         if (dg.nexts is None):
             dg.nexts = dict()
         dg.nexts[pref] = cas
         cou -= 1
     cou = str0_.deserialize_short(pos)
     while cou > 0:
         pref = Utils.ifNotNull(str0_.deserialize_string(pos), "")
         cas = MorphCase()
         cas.value = (str0_.deserialize_short(pos))
         if (dg.nexts_ref is None):
             dg.nexts_ref = dict()
         dg.nexts_ref[pref] = cas
         cou -= 1
예제 #23
0
 def __remove_items_morph_base_info(self, inf: 'MorphBaseInfo') -> None:
     if (self.__m_items is None):
         return
     if (len(self.__m_items) == 0):
         if (inf.gender != MorphGender.UNDEFINED):
             self.__m_gender = (Utils.valToEnum(
                 (self.__m_gender) & (inf.gender), MorphGender))
         if (inf.number != MorphNumber.UNDEFINED):
             self.__m_number = (Utils.valToEnum(
                 (self.__m_number) & (inf.number), MorphNumber))
         if (not inf.case_.is_undefined):
             self.__m_case &= inf.case_
         return
     for i in range(len(self.__m_items) - 1, -1, -1):
         ok = True
         it = self.__m_items[i]
         if (inf.gender != MorphGender.UNDEFINED):
             if (((it.gender) & (inf.gender)) == (MorphGender.UNDEFINED)):
                 ok = False
         ch_num = False
         if (inf.number != MorphNumber.PLURAL
                 and inf.number != MorphNumber.UNDEFINED):
             if (((it.number) & (inf.number)) == (MorphNumber.UNDEFINED)):
                 ok = False
             ch_num = True
         if (not inf.class0_.is_undefined):
             if (((inf.class0_) & it.class0_).is_undefined):
                 ok = False
         if (not inf.case_.is_undefined):
             if (((inf.case_) & it.case_).is_undefined):
                 ok = False
         if (not ok):
             del self.__m_items[i]
             self.__m_need_recalc = True
         else:
             if (not inf.case_.is_undefined):
                 if (it.case_ != (((inf.case_) & it.case_))):
                     it.case_ = ((inf.case_) & it.case_)
                     self.__m_need_recalc = True
             if (inf.gender != MorphGender.UNDEFINED):
                 if ((it.gender) != ((inf.gender) & (it.gender))):
                     it.gender = Utils.valToEnum((inf.gender) & (it.gender),
                                                 MorphGender)
                     self.__m_need_recalc = True
             if (ch_num):
                 if ((it.number) != ((inf.number) & (it.number))):
                     it.number = Utils.valToEnum((inf.number) & (it.number),
                                                 MorphNumber)
                     self.__m_need_recalc = True
예제 #24
0
 def _deserialize(self, str0_: 'ByteArrayWrapper', pos: int) -> None:
     b = str0_.deserialize_byte(pos)
     self.transitive = b != (0)
     sh = str0_.deserialize_short(pos)
     self.questions = (Utils.valToEnum(sh, QuestionType))
     sh = str0_.deserialize_short(pos)
     if (sh != 0):
         pr = str0_.deserialize_string(pos)
         cas = MorphCase()
         cas.value = (sh)
         self.agent = NextModelItem(pr, cas)
     sh = str0_.deserialize_short(pos)
     if (sh != 0):
         pr = str0_.deserialize_string(pos)
         cas = MorphCase()
         cas.value = (sh)
         self.pacient = NextModelItem(pr, cas)
     sh = str0_.deserialize_short(pos)
     if (sh != 0):
         pr = str0_.deserialize_string(pos)
         cas = MorphCase()
         cas.value = (sh)
         self.instrument = NextModelItem(pr, cas)
     cou = str0_.deserialize_short(pos)
     while cou > 0:
         pref = str0_.deserialize_string(pos)
         if (pref is None):
             pref = ""
         cas = MorphCase()
         sh = str0_.deserialize_short(pos)
         cas.value = (sh)
         if (self.nexts is None):
             self.nexts = dict()
         self.nexts[pref] = cas
         cou -= 1
예제 #25
0
 def __try_parse(t: 'Token') -> 'AutoannoSentToken':
     if (t is None or not MiscHelper.can_be_start_of_sentence(t)):
         return None
     res = AutoannoSentToken(t, t)
     has_verb = False
     while t is not None:
         if (MiscHelper.can_be_start_of_sentence(t)
                 and t != res.begin_token):
             break
         r = t.get_referent()
         if (isinstance(r, KeywordReferent)):
             res.rank += r.rank
             if (r.typ == KeywordType.PREDICATE):
                 has_verb = True
         elif (isinstance(t, TextToken)):
             mc = t.get_morph_class_in_dictionary()
             if (mc.is_pronoun or mc.is_personal_pronoun):
                 res.rank -= (1)
             elif (t.length_char > 1):
                 res.rank -= 0.1
         res.end_token = t
         t = t.next0_
     if (not has_verb):
         res.rank /= (3)
     res.value = MiscHelper.get_text_value_of_meta_token(
         res,
         Utils.valToEnum(
             (GetTextAttr.KEEPREGISTER) | (GetTextAttr.KEEPQUOTES),
             GetTextAttr))
     return res
예제 #26
0
 def __tryParse(t: 'Token') -> 'AutoannoSentToken':
     if (t is None or not MiscHelper.canBeStartOfSentence(t)):
         return None
     res = AutoannoSentToken(t, t)
     has_verb = False
     while t is not None:
         if (MiscHelper.canBeStartOfSentence(t) and t != res.begin_token):
             break
         r = t.getReferent()
         if (isinstance(r, KeywordReferent)):
             res.rank += (r).rank
             if ((r).typ == KeywordType.PREDICATE):
                 has_verb = True
         elif (isinstance(t, TextToken)):
             mc = t.getMorphClassInDictionary()
             if (mc.is_pronoun or mc.is_personal_pronoun):
                 res.rank -= (1)
             elif (t.length_char > 1):
                 res.rank -= .1
         res.end_token = t
         t = t.next0_
     if (not has_verb):
         res.rank /= (3)
     res.value = MiscHelper.getTextValueOfMetaToken(
         res,
         Utils.valToEnum(
             (GetTextAttr.KEEPREGISTER) | (GetTextAttr.KEEPQUOTES),
             GetTextAttr))
     return res
예제 #27
0
 def remove_items(self, it: object, eq: bool = False) -> None:
     """ Удалить элементы, не соответствующие элементу
     
     Args:
         it(object): 
     """
     if (isinstance(it, MorphCase)):
         self.__remove_items_morph_case(it)
     elif (isinstance(it, MorphClass)):
         self.__remove_items_morph_class(it, eq)
     elif (isinstance(it, MorphBaseInfo)):
         self.__remove_items_morph_base_info(it)
     elif (isinstance(it, MorphNumber)):
         self.__remove_items_morph_number(Utils.valToEnum(it, MorphNumber))
     elif (isinstance(it, MorphGender)):
         self._remove_items_morph_gender(Utils.valToEnum(it, MorphGender))
예제 #28
0
 def try_parse(t: 'Token') -> 'DelimToken':
     if (not (isinstance(t, TextToken))):
         return None
     if (t.is_comma_and):
         res0 = DelimToken.try_parse(t.next0_)
         if (res0 is not None):
             res0.begin_token = t
             return res0
         return None
     tok = DelimToken.__m_onto.try_parse(t, TerminParseAttr.NO)
     if (tok is not None):
         res = DelimToken(t, tok.end_token)
         res.typ = (Utils.valToEnum(tok.termin.tag, DelimType))
         res.doublt = tok.termin.tag2 is not None
         res2 = DelimToken.try_parse(res.end_token.next0_)
         if (res2 is not None):
             if (res2.typ == res.typ):
                 res.end_token = res2.end_token
                 res.doublt = False
         if (t.morph.class0_.is_pronoun):
             npt = NounPhraseHelper.try_parse(
                 t, NounPhraseParseAttr.PARSEADVERBS, 0, None)
             if (npt is not None and npt.end_char > res.end_char):
                 return None
         return res
     return None
 def gender(self) -> 'MorphGender':
     res = MorphGender.UNDEFINED
     for it in self.items:
         res = (Utils.valToEnum((res) | (it.gender), MorphGender))
     if (res == MorphGender.FEMINIE or res == MorphGender.MASCULINE):
         return res
     else:
         return MorphGender.UNDEFINED
예제 #30
0
 def typ(self) -> 'KeywordType':
     str0_ = self.getStringValue(KeywordReferent.ATTR_TYPE)
     if (str0_ is None):
         return KeywordType.UNDEFINED
     try:
         return Utils.valToEnum(str0_, KeywordType)
     except Exception as ex:
         return KeywordType.UNDEFINED