Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 def __init__(self) -> None:
     self.__m_cla = MorphClass()
     self.__gender = MorphGender.UNDEFINED
     self.__number = MorphNumber.UNDEFINED
     self.__m_cas = MorphCase()
     self.__m_lang = MorphLang()
Ejemplo n.º 6
0
 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