def __init__(self, source: 'MorphCollection' = None) -> None: super().__init__() self.__m_class = MorphClass() self.__m_gender = MorphGender.UNDEFINED self.__m_number = MorphNumber.UNDEFINED self.__m_case = MorphCase() self.__m_language = MorphLang() self.__m_voice = MorphVoice.UNDEFINED self.__m_need_recalc = True self.__m_items = None if (source is None): return for it in source.items: mi = None if (isinstance(it, MorphWordForm)): wf = MorphWordForm() wf.copy_from_word_form(Utils.asObjectOrNull(it, MorphWordForm)) mi = (wf) else: mi = MorphBaseInfo() mi.copy_from(it) if (self.__m_items is None): self.__m_items = list() self.__m_items.append(mi) self.__m_class = MorphClass._new53(source.__m_class.value) self.__m_gender = source.__m_gender self.__m_case = MorphCase._new29(source.__m_case.value) self.__m_number = source.__m_number self.__m_language = MorphLang._new56(source.__m_language.value) self.__m_voice = source.__m_voice self.__m_need_recalc = False
def copy_from(self, src: 'MorphBaseInfo') -> None: cla = MorphClass() cla.value = src.class0_.value self.class0_ = cla self.gender = src.gender self.number = src.number cas = MorphCase() cas.value = src.case_.value self.case_ = cas lng = MorphLang() lng.value = src.language.value self.language = lng
def language(self) -> 'MorphLang': """ Язык(и) """ if (self.__m_language is not None and self.__m_language != MorphLang.UNKNOWN): return self.__m_language lang = MorphLang() if (self.word_forms is not None): for wf in self.word_forms: if (wf.language != MorphLang.UNKNOWN): lang |= wf.language return lang
def _deserialize(self, stream: Stream) -> None: from pullenti.ner.core.internal.SerializerHelper import SerializerHelper self.__m_class = MorphClass._new53( SerializerHelper.deserialize_short(stream)) self.__m_case = MorphCase._new29( SerializerHelper.deserialize_short(stream)) self.__m_gender = (Utils.valToEnum( SerializerHelper.deserialize_short(stream), MorphGender)) self.__m_number = (Utils.valToEnum( SerializerHelper.deserialize_short(stream), MorphNumber)) self.__m_voice = (Utils.valToEnum( SerializerHelper.deserialize_short(stream), MorphVoice)) self.__m_language = MorphLang._new56( SerializerHelper.deserialize_short(stream)) cou = SerializerHelper.deserialize_int(stream) self.__m_items = list() i = 0 while i < cou: it = self.__deserialize_item(stream) if (it is not None): self.__m_items.append(it) i += 1 self.__m_need_recalc = False
def __init__(self) -> None: self.__m_cla = MorphClass() self.__gender = MorphGender.UNDEFINED self.__number = MorphNumber.UNDEFINED self.__m_cas = MorphCase() self.__m_lang = MorphLang()
def __process_one_word( self, wstr: str, def_lang: 'MorphLang') -> typing.List['MorphWordForm']: lang = LanguageHelper._get_word_lang(wstr) if (lang == MorphLang.UNKNOWN): def_lang.value = MorphLang() return None if (lang == MorphLang.EN): return self.__m_engine_en.process(wstr) if (def_lang.value == MorphLang.RU): if (lang.is_ru): return self.__m_engine_ru.process(wstr) if (lang == MorphLang.RU): def_lang.value = lang return self.__m_engine_ru.process(wstr) if (def_lang.value == MorphLang.UA): if (lang.is_ua): return self.__m_engine_ua.process(wstr) if (lang == MorphLang.UA): def_lang.value = lang return self.__m_engine_ua.process(wstr) if (def_lang.value == MorphLang.BY): if (lang.is_by): return self.__m_engine_by.process(wstr) if (lang == MorphLang.BY): def_lang.value = lang return self.__m_engine_by.process(wstr) if (def_lang.value == MorphLang.KZ): if (lang.is_kz): return self.__m_engine_kz.process(wstr) if (lang == MorphLang.KZ): def_lang.value = lang return self.__m_engine_kz.process(wstr) ru = None if (lang.is_ru): ru = self.__m_engine_ru.process(wstr) ua = None if (lang.is_ua): ua = self.__m_engine_ua.process(wstr) by = None if (lang.is_by): by = self.__m_engine_by.process(wstr) kz = None if (lang.is_kz): kz = self.__m_engine_kz.process(wstr) has_ru = False has_ua = False has_by = False has_kz = False if (ru is not None): for wf in ru: if (wf.is_in_dictionary): has_ru = True if (ua is not None): for wf in ua: if (wf.is_in_dictionary): has_ua = True if (by is not None): for wf in by: if (wf.is_in_dictionary): has_by = True if (kz is not None): for wf in kz: if (wf.is_in_dictionary): has_kz = True if ((has_ru and not has_ua and not has_by) and not has_kz): def_lang.value = MorphLang.RU return ru if ((has_ua and not has_ru and not has_by) and not has_kz): def_lang.value = MorphLang.UA return ua if ((has_by and not has_ru and not has_ua) and not has_kz): def_lang.value = MorphLang.BY return by if ((has_kz and not has_ru and not has_ua) and not has_by): def_lang.value = MorphLang.KZ return kz if ((ru is None and ua is None and by is None) and kz is None): return None if ((ru is not None and ua is None and by is None) and kz is None): return ru if ((ua is not None and ru is None and by is None) and kz is None): return ua if ((by is not None and ru is None and ua is None) and kz is None): return by if ((kz is not None and ru is None and ua is None) and by is None): return kz res = list() if (ru is not None): lang |= MorphLang.RU res.extend(ru) if (ua is not None): lang |= MorphLang.UA res.extend(ua) if (by is not None): lang |= MorphLang.BY res.extend(by) if (kz is not None): lang |= MorphLang.KZ res.extend(kz) return res