def main(args: typing.List[str]) -> None: sw = Stopwatch() # инициализация - необходимо проводить один раз до обработки текстов print("Initializing ... ", end="", flush=True) # инициализируются движок и все имеющиеся анализаторы Sdk.initialize((MorphLang.RU) | MorphLang.EN) sw.stop() print("OK (by {0} ms), version {1}".format( sw.elapsedMilliseconds, ProcessorService.getVersion()), flush=True) # анализируемый текст txt = "Единственным конкурентом «Трансмаша» на этом сомнительном тендере было ООО «Плассер Алека Рейл Сервис», основным владельцем которого является австрийская компания «СТЦ-Холдинг ГМБХ». До конца 2011 г. эта же фирма была совладельцем «Трансмаша» вместе с «Тако» Краснова. Зато совладельцем «Плассера», также до конца 2011 г., был тот самый Карл Контрус, который имеет четверть акций «Трансмаша». " print("Text: {0}".format(txt), flush=True) # запускаем обработку на пустом процессоре (без анализаторов NER) are = ProcessorService.getEmptyProcessor().process( SourceOfAnalysis(txt), None, None) print("Noun groups: ", end="", flush=True) t = are.first_token # перебираем токены first_pass2703 = True while True: if first_pass2703: first_pass2703 = False else: t = t.next0_ if (not (t is not None)): break # выделяем именную группу с текущего токена npt = NounPhraseHelper.tryParse(t, NounPhraseParseAttr.NO, 0) # не получилось if (npt is None): continue # получилось, выводим в нормализованном виде print("[{0}=>{1}] ".format( npt.getSourceText(), npt.getNormalCaseText(None, True, MorphGender.UNDEFINED, False)), end="", flush=True) # указатель на последний токен именной группы t = npt.end_token with ProcessorService.createProcessor() as proc: # анализируем текст ar = proc.process(SourceOfAnalysis(txt), None, None) # результирующие сущности print( "\r\n==========================================\r\nEntities: ", flush=True) for e0_ in ar.entities: print("{0}: {1}".format(e0_.type_name, str(e0_)), flush=True) for s in e0_.slots: print(" {0}: {1}".format(s.type_name, s.value), flush=True) # пример выделения именных групп print( "\r\n==========================================\r\nNoun groups: ", flush=True) t = ar.first_token first_pass2704 = True while True: if first_pass2704: first_pass2704 = False else: t = t.next0_ if (not (t is not None)): break # токены с сущностями игнорируем if (t.getReferent() is not None): continue # пробуем создать именную группу npt = NounPhraseHelper.tryParse( t, NounPhraseParseAttr.ADJECTIVECANBELAST, 0) # не получилось if (npt is None): continue print(npt, flush=True) # указатель перемещаем на последний токен группы t = npt.end_token with ProcessorService.createSpecificProcessor( KeywordAnalyzer.ANALYZER_NAME) as proc: ar = proc.process(SourceOfAnalysis(txt), None, None) print( "\r\n==========================================\r\nKeywords1: ", flush=True) for e0_ in ar.entities: if (isinstance(e0_, KeywordReferent)): print(e0_, flush=True) print( "\r\n==========================================\r\nKeywords2: ", flush=True) t = ar.first_token first_pass2705 = True while True: if first_pass2705: first_pass2705 = False else: t = t.next0_ if (not (t is not None)): break if (isinstance(t, ReferentToken)): kw = Utils.asObjectOrNull(t.getReferent(), KeywordReferent) if (kw is None): continue kwstr = MiscHelper.getTextValueOfMetaToken( Utils.asObjectOrNull(t, ReferentToken), Utils.valToEnum( (GetTextAttr.FIRSTNOUNGROUPTONOMINATIVESINGLE) | (GetTextAttr.KEEPREGISTER), GetTextAttr)) print("{0} = {1}".format(kwstr, kw), flush=True) print("Over!", flush=True)
def getVersion() -> str: return ProcessorService.getVersion()