def toStringMorphForm(form: 'MorphForm') -> str: res = io.StringIO() if ((((form) & (MorphForm.SHORT))) != (MorphForm.UNDEFINED)): print("кратк.|", end="", file=res) if ((((form) & (MorphForm.SYNONYM))) != (MorphForm.UNDEFINED)): print("синонимич.|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def __str__(self) -> str: res = io.StringIO() if (self.coef > 0): print("{0}: ".format(self.coef), end="", file=res, flush=True) for it in self.items: if (it != self.items[0]): print("; \r\n", end="", file=res) print(str(it), end="", file=res) return Utils.toStringStringIO(res)
def __str__(self) -> str: res = io.StringIO() i = 0 while i < len(self.variants_key): if (res.tell() > 0): print(", ", end="", file=res) print("-{0}".format(self.variants_key[i]), end="", file=res, flush=True) i += 1 return Utils.toStringStringIO(res)
def toStringMorphNumber(number: 'MorphNumber') -> str: res = io.StringIO() if ((((number) & (MorphNumber.SINGULAR))) != (MorphNumber.UNDEFINED)): print("единств.|", end="", file=res) if ((((number) & (MorphNumber.PLURAL))) != (MorphNumber.UNDEFINED)): print("множеств.|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def __mergeLetters(self) -> None: before_word = False tmp = io.StringIO() t = self.first_token first_pass2800 = True while True: if first_pass2800: first_pass2800 = False else: t = t.next0_ if (not (t is not None)): break tt = Utils.asObjectOrNull(t, TextToken) if (not tt.chars.is_letter or tt.length_char != 1): before_word = False continue i = t.whitespaces_before_count if (i > 2 or ((i == 2 and before_word))): pass else: before_word = False continue i = 0 Utils.setLengthStringIO(tmp, 0) print(tt.getSourceText(), end="", file=tmp) t1 = t while t1.next0_ is not None: tt = (Utils.asObjectOrNull(t1.next0_, TextToken)) if (tt.length_char != 1 or tt.whitespaces_before_count != 1): break i += 1 print(tt.getSourceText(), end="", file=tmp) t1 = t1.next0_ if (i > 3 or ((i > 1 and before_word))): pass else: before_word = False continue before_word = False mt = Morphology.process(Utils.toStringStringIO(tmp), None, None) if (mt is None or len(mt) != 1): t = t1 continue for wf in mt[0].word_forms: if (wf.is_in_dictionary): before_word = True break if (not before_word): t = t1 continue tt = TextToken(mt[0], self) if (t == self.first_token): self.first_token = (tt) else: tt.previous = t.previous tt.next0_ = t1.next0_ tt.begin_char = t.begin_char tt.end_char = t1.end_char t = (tt)
def attach_mail_users(t1: 'Token') -> typing.List['UriItemToken']: if (t1 is None): return None if (t1.is_char('}')): res0 = UriItemToken.attach_mail_users(t1.previous) if (res0 is None): return None t1 = res0[0].begin_token.previous first_pass3415 = True while True: if first_pass3415: first_pass3415 = False else: t1 = t1.previous if (not (t1 is not None)): break if (t1.is_char('{')): res0[0].begin_token = t1 return res0 if (t1.is_char_of(";,")): continue res1 = UriItemToken.attach_mail_users(t1) if (res1 is None): return None res0.insert(0, res1[0]) t1 = res1[0].begin_token return None txt = io.StringIO() t0 = t1 t = t1 first_pass3416 = True while True: if first_pass3416: first_pass3416 = False else: t = t.previous if (not (t is not None)): break if (t.is_whitespace_after): break if (isinstance(t, NumberToken)): nt = Utils.asObjectOrNull(t, NumberToken) Utils.insertStringIO(txt, 0, nt.get_source_text()) t0 = t continue tt = Utils.asObjectOrNull(t, TextToken) if (tt is None): break src = tt.get_source_text() ch = src[0] if (not str.isalpha(ch)): if (".-_".find(ch) < 0): break Utils.insertStringIO(txt, 0, src) t0 = t if (txt.tell() == 0): return None res = list() res.append( UriItemToken._new2706(t0, t1, Utils.toStringStringIO(txt).lower())) return res
def __str__(self) -> str: if (len(self.items) == 1): return "{0}, {1}".format(str(self.items[0]), str(self.morph)) tmp = io.StringIO() for it in self.items: if (tmp.tell() > 0): print(' ', end="", file=tmp) print(it, end="", file=tmp) print(", {0}".format(str(self.morph)), end="", file=tmp, flush=True) return Utils.toStringStringIO(tmp)
def __str__(self) -> str: tmp = io.StringIO() for it in self.items_from: print("{0}{1}; ".format(("(fr)" if self.is_diap else ""), str(it)), end="", file=tmp, flush=True) for it in self.items_to: print("(to){0}; ".format(str(it)), end="", file=tmp, flush=True) return Utils.toStringStringIO(tmp)
def __str__(self) -> str: tmp_str = io.StringIO() i = 0 while i < len(MorphLang.__m_names): if (self.__getValue(i)): if (tmp_str.tell() > 0): print(";", end="", file=tmp_str) print(MorphLang.__m_names[i], end="", file=tmp_str) i += 1 return Utils.toStringStringIO(tmp_str)
def to_string_morph_aspect(aspect: 'MorphAspect') -> str: res = io.StringIO() if (((aspect) & (MorphAspect.IMPERFECTIVE)) != (MorphAspect.UNDEFINED)): print("несоверш.|", end="", file=res) if (((aspect) & (MorphAspect.PERFECTIVE)) != (MorphAspect.UNDEFINED)): print("соверш.|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def __str__(self) -> str: tmp = io.StringIO() print("TransitiveCoef = {0} \r\n".format(self.transitive_coef), end="", file=tmp, flush=True) print("NextModel = {0} \r\n".format(self.next_model), end="", file=tmp, flush=True) print("NgLink = {0} \r\n".format(self.ng_link), end="", file=tmp, flush=True) print("List = {0} \r\n".format(self.list0_), end="", file=tmp, flush=True) print("VerbPlural = {0} \r\n".format(self.verb_plural), end="", file=tmp, flush=True) print("CaseAccord = {0} \r\n".format(self.case_accord), end="", file=tmp, flush=True) print("MorphAccord = {0} \r\n".format(self.morph_accord), end="", file=tmp, flush=True) return Utils.toStringStringIO(tmp)
def __tryAttachSpeciality(t : 'Token', key_word_before : bool) -> 'TitleItemToken': if (t is None): return None susp = False if (not key_word_before): if (not t.is_newline_before): susp = True val = None t0 = t dig_count = 0 for i in range(3): nt = Utils.asObjectOrNull(t, NumberToken) if (nt is None): break if (nt.typ != NumberSpellingType.DIGIT or nt.morph.class0_.is_adjective): break if (val is None): val = io.StringIO() if (susp and t.length_char != 2): return None digs = nt.getSourceText() dig_count += len(digs) print(digs, end="", file=val) if (t.next0_ is None): break t = t.next0_ if (t.isCharOf(".,") or t.is_hiphen): if (susp and (i < 2)): if (not t.isChar('.') or t.is_whitespace_after or t.is_whitespace_before): return None if (t.next0_ is not None): t = t.next0_ if (val is None or (dig_count < 5)): return None if (dig_count != 6): if (not key_word_before): return None else: Utils.insertStringIO(val, 4, '.') Utils.insertStringIO(val, 2, '.') tt = t.next0_ first_pass3126 = True while True: if first_pass3126: first_pass3126 = False else: tt = tt.next0_ if (not (tt is not None)): break if (tt.is_newline_before): break br = BracketHelper.tryParse(tt, BracketParseAttr.NO, 100) if (br is not None): tt = br.end_token t = tt continue t = tt return TitleItemToken._new2501(t0, t, TitleItemToken.Types.SPECIALITY, Utils.toStringStringIO(val))
def __str__(self) -> str: tmp = io.StringIO() print("'{0}'".format(self.rus), end="", file=tmp, flush=True) if (self.rus_to_lat and self.lat_to_rus): print(" <-> ", end="", file=tmp) elif (self.rus_to_lat): print(" -> ", end="", file=tmp) elif (self.lat_to_rus): print(" <- ", end="", file=tmp) print("'{0}'".format(self.lat), end="", file=tmp, flush=True) return Utils.toStringStringIO(tmp)
def __str__(self) -> str: res = io.StringIO() t = self._m_begin_token while t is not None: if (res.tell() > 0 and t.is_whitespace_before): print(' ', end="", file=res) print(t.get_source_text(), end="", file=res) if (t == self._m_end_token): break t = t.next0_ return Utils.toStringStringIO(res)
def __str__(self) -> str: res = io.StringIO() print("{0} = ".format(self.coef), end="", file=res, flush=True) for it in self.links: if (it != self.links[0]): print("; \r\n", end="", file=res) if (it is None): print("<null>", end="", file=res) else: print(str(it), end="", file=res) return Utils.toStringStringIO(res)
def __str__(self) -> str: tmp = io.StringIO() print("{0}: ".format(self.coef), end="", file=tmp, flush=True) for s in self.segs: if (s != self.segs[0]): print("; \r\n", end="", file=tmp) if (s is not None): print(str(s), end="", file=tmp) else: print("null", end="", file=tmp) return Utils.toStringStringIO(tmp)
def to_string_morph_voice(voice: 'MorphVoice') -> str: res = io.StringIO() if ((((voice) & (MorphVoice.ACTIVE))) != (MorphVoice.UNDEFINED)): print("действит.|", end="", file=res) if ((((voice) & (MorphVoice.PASSIVE))) != (MorphVoice.UNDEFINED)): print("страдат.|", end="", file=res) if ((((voice) & (MorphVoice.MIDDLE))) != (MorphVoice.UNDEFINED)): print("средн.|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def to_string_morph_mood(mood: 'MorphMood') -> str: res = io.StringIO() if ((((mood) & (MorphMood.INDICATIVE))) != (MorphMood.UNDEFINED)): print("изъявит.|", end="", file=res) if ((((mood) & (MorphMood.IMPERATIVE))) != (MorphMood.UNDEFINED)): print("повелит.|", end="", file=res) if ((((mood) & (MorphMood.SUBJUNCTIVE))) != (MorphMood.UNDEFINED)): print("условн.|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def to_string_morph_person(person: 'MorphPerson') -> str: res = io.StringIO() if ((((person) & (MorphPerson.FIRST))) != (MorphPerson.UNDEFINED)): print("1лицо|", end="", file=res) if ((((person) & (MorphPerson.SECOND))) != (MorphPerson.UNDEFINED)): print("2лицо|", end="", file=res) if ((((person) & (MorphPerson.THIRD))) != (MorphPerson.UNDEFINED)): print("3лицо|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def to_string_morph_gender(gender: 'MorphGender') -> str: res = io.StringIO() if ((((gender) & (MorphGender.MASCULINE))) != (MorphGender.UNDEFINED)): print("муж.|", end="", file=res) if ((((gender) & (MorphGender.FEMINIE))) != (MorphGender.UNDEFINED)): print("жен.|", end="", file=res) if ((((gender) & (MorphGender.NEUTER))) != (MorphGender.UNDEFINED)): print("средн.|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def __str__(self) -> str: words_ = list(self.words.keys()) tmp = io.StringIO() for w in words_: if (tmp.tell() > 100): print("...", end="", file=tmp) break if (tmp.tell() > 0): print(" ", end="", file=tmp) print("{0}:{1}".format(self.words[w], w), end="", file=tmp, flush=True) return Utils.toStringStringIO(tmp)
def to_string_morph_tense(tense: 'MorphTense') -> str: res = io.StringIO() if ((((tense) & (MorphTense.PAST))) != (MorphTense.UNDEFINED)): print("прошедшее|", end="", file=res) if ((((tense) & (MorphTense.PRESENT))) != (MorphTense.UNDEFINED)): print("настоящее|", end="", file=res) if ((((tense) & (MorphTense.FUTURE))) != (MorphTense.UNDEFINED)): print("будущее|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def correct_word_by_morph(self, word: str) -> str: vars0_ = list() tmp = Utils.newStringIO(len(word)) ch = 1 while ch < len(word): Utils.setLengthStringIO(tmp, 0) print(word, end="", file=tmp) Utils.setCharAtStringIO(tmp, ch, '*') var = self.__check_corr_var(Utils.toStringStringIO(tmp), self.m_root, 0) if (var is not None): if (not var in vars0_): vars0_.append(var) ch += 1 if (len(vars0_) == 0): ch = 1 while ch < len(word): Utils.setLengthStringIO(tmp, 0) print(word, end="", file=tmp) Utils.insertStringIO(tmp, ch, '*') var = self.__check_corr_var(Utils.toStringStringIO(tmp), self.m_root, 0) if (var is not None): if (not var in vars0_): vars0_.append(var) ch += 1 if (len(vars0_) == 0): ch = 1 while ch < (len(word) - 1): Utils.setLengthStringIO(tmp, 0) print(word, end="", file=tmp) Utils.removeStringIO(tmp, ch, 1) var = self.__check_corr_var(Utils.toStringStringIO(tmp), self.m_root, 0) if (var is not None): if (not var in vars0_): vars0_.append(var) ch += 1 if (len(vars0_) != 1): return None return vars0_[0]
def toString(self, short_variant : bool, lang : 'MorphLang'=None, lev : int=0) -> str: res = io.StringIO() if (self.number is not None): print("[{0}] ".format(self.number), end="", file=res, flush=True) if (self.pages is not None): print("{0} {1}; ".format(("pages" if lang is not None and lang.is_en else "стр."), self.pages), end="", file=res, flush=True) book_ = self.book if (book_ is None): print("?", end="", file=res) else: print(book_.toString(short_variant, lang, lev), end="", file=res) return Utils.toStringStringIO(res)
def _add_date(self, dt: object) -> bool: if (dt is None): return False if (isinstance(dt, DecreeToken)): if (isinstance(dt.ref, ReferentToken)): return self._add_date(dt.ref.referent) if (dt.value is not None): self.add_slot(InstrumentReferent.ATTR_DATE, dt.value, True, 0) return True return False if (isinstance(dt, ReferentToken)): return self._add_date(dt.referent) if (isinstance(dt, DateReferent)): dr = Utils.asObjectOrNull(dt, DateReferent) year = dr.year mon = dr.month day = dr.day if (year == 0): return dr.pointer == DatePointerType.UNDEFINED ex_date = self.date if (ex_date is not None and ex_date.year == year): if (mon == 0 and ex_date.month > 0): return False if (day == 0 and ex_date.day > 0): return False del_exist = False if (mon > 0 and ex_date.month == 0): del_exist = True if (del_exist): for s in self.slots: if (s.type_name == InstrumentReferent.ATTR_DATE): self.slots.remove(s) break tmp = io.StringIO() print(year, end="", file=tmp) if (mon > 0): print(".{0}".format("{:02d}".format(mon)), end="", file=tmp, flush=True) if (day > 0): print(".{0}".format("{:02d}".format(day)), end="", file=tmp, flush=True) self.add_slot(DecreeReferent.ATTR_DATE, Utils.toStringStringIO(tmp), False, 0) return True if (isinstance(dt, str)): self.add_slot(InstrumentReferent.ATTR_DATE, Utils.asObjectOrNull(dt, str), True, 0) return True return False
def __str__(self) -> str: res = io.StringIO() if (self.not0_): print("НЕ ", end="", file=res) for a in self.attrs: print("{0} ".format(str(a).lower()), end="", file=res, flush=True) if (self.quantity is not None): print("{0} ".format(self.quantity), end="", file=res, flush=True) elif (self.morph.number == MorphNumber.PLURAL and self.typ == SemObjectType.NOUN): print("* ".format(), end="", file=res, flush=True) print(Utils.ifNotNull(self.morph.normal_case, "?"), end="", file=res) return Utils.toStringStringIO(res)
def to_string_morph_finite(finit: 'MorphFinite') -> str: res = io.StringIO() if ((((finit) & (MorphFinite.FINITE))) != (MorphFinite.UNDEFINED)): print("finite|", end="", file=res) if ((((finit) & (MorphFinite.GERUND))) != (MorphFinite.UNDEFINED)): print("gerund|", end="", file=res) if ((((finit) & (MorphFinite.INFINITIVE))) != (MorphFinite.UNDEFINED)): print("инфинитив|", end="", file=res) if ((((finit) & (MorphFinite.PARTICIPLE))) != (MorphFinite.UNDEFINED)): print("participle|", end="", file=res) if (res.tell() > 0): Utils.setLengthStringIO(res, res.tell() - 1) return Utils.toStringStringIO(res)
def get_normal_case_text_without_adjective(self, adj_index : int) -> str: res = io.StringIO() i = 0 while i < len(self.adjectives): if (i != adj_index): s = self.adjectives[i].get_normal_case_text((MorphClass.ADJECTIVE) | MorphClass.PRONOUN, MorphNumber.UNDEFINED, MorphGender.UNDEFINED, False) print("{0} ".format(Utils.ifNotNull(s, "?")), end="", file=res, flush=True) i += 1 r = self.noun.get_normal_case_text((MorphClass.NOUN) | MorphClass.PRONOUN, MorphNumber.UNDEFINED, MorphGender.UNDEFINED, False) if (r is None): r = self.noun.get_normal_case_text(None, MorphNumber.UNDEFINED, MorphGender.UNDEFINED, False) print(Utils.ifNotNull(r, str(self.noun)), end="", file=res) return Utils.toStringStringIO(res)
def attachisbn(t0: 'Token') -> 'UriItemToken': txt = io.StringIO() t1 = t0 digs = 0 t = t0 first_pass3417 = True while True: if first_pass3417: first_pass3417 = False else: t = t.next0_ if (not (t is not None)): break if (t.is_table_control_char): break if (t.is_newline_before and t != t0): if (t.previous is not None and t.previous.is_hiphen): pass else: break if (isinstance(t, NumberToken)): nt = Utils.asObjectOrNull(t, NumberToken) if (nt.typ != NumberSpellingType.DIGIT or not nt.morph.class0_.is_undefined): break d = nt.get_source_text() print(d, end="", file=txt) digs += len(d) t1 = t if (digs > 13): break continue tt = Utils.asObjectOrNull(t, TextToken) if (tt is None): break s = tt.term if (s != "-" and s != "Х" and s != "X"): break if (s == "Х"): s = "X" print(s, end="", file=txt) t1 = t if (s != "-"): break i = 0 dig = 0 i = 0 while i < txt.tell(): if (str.isdigit(Utils.getCharAtStringIO(txt, i))): dig += 1 i += 1 if (dig < 7): return None return UriItemToken._new2706(t0, t1, Utils.toStringStringIO(txt))
def attachUrl(t0: 'Token') -> 'UriItemToken': srv = UriItemToken.attachDomainName(t0, True, False) if (srv is None): return None txt = Utils.newStringIO(srv.value) t1 = srv.end_token if (t1.next0_ is not None and t1.next0_.isChar(':') and (isinstance(t1.next0_.next0_, NumberToken))): t1 = t1.next0_.next0_ print(":{0}".format((t1).value), end="", file=txt, flush=True) t = t1.next0_ while t is not None: if (t.is_whitespace_before): break if (not t.isChar('/')): break if (t.is_whitespace_after): t1 = t break dat = UriItemToken.__AttachUriContent(t.next0_, ".-_+%", False) if (dat is None): t1 = t break t1 = dat.end_token t = t1 print("/{0}".format(dat.value), end="", file=txt, flush=True) t = t.next0_ if ((t1.next0_ is not None and t1.next0_.isChar('?') and not t1.next0_.is_whitespace_after) and not t1.is_whitespace_after): dat = UriItemToken.__AttachUriContent(t1.next0_.next0_, ".-_+%=&", False) if (dat is not None): t1 = dat.end_token print("?{0}".format(dat.value), end="", file=txt, flush=True) if ((t1.next0_ is not None and t1.next0_.isChar('#') and not t1.next0_.is_whitespace_after) and not t1.is_whitespace_after): dat = UriItemToken.__AttachUriContent(t1.next0_.next0_, ".-_+%", False) if (dat is not None): t1 = dat.end_token print("#{0}".format(dat.value), end="", file=txt, flush=True) i = 0 while i < txt.tell(): if (str.isalpha(Utils.getCharAtStringIO(txt, i))): break i += 1 if (i >= txt.tell()): return None return UriItemToken._new2550(t0, t1, Utils.toStringStringIO(txt))