Компонента программный интерфейс компонента морфологического анализа предназначена для определения части речи, нормальной формы и прочих характеристик слова.
Работает на собственных словарях.
Скачать можно на сайте разработчика: http://www.aot.ru/download.php
После установки система требует перезагрузиться, пытаемся не верить, но зря:
На 32-битной регистрируем компоненты regsvr32
На 64 битной системе запускаем DCOMCNFG: добавляем приложение и компоненты аналогично написанному здесь, необходимо показать две dll
- agramtab.dll
- Lemmatizer.dll
Вторая заработала сразу, а первая при попытке загрузки словаря выдавала ошибку 0x80004005.
После перезагрузки всё заработало отлично.
Пример использования:
Загрузка словарей занимает 1,5 секунды, поэтому следует производить это однократно, при обработке больших групп текстов.
Компонента работает быстро целом на массиве в 10000 фраз 39807 слова производится примерно за 10 секунд, что достаточно быстро. При увеличении количества фраз уже 1с упирается в свою производительность выборки из базы данных, на файловой базе это ощутимо заметно.
Покажу использование одного свойства в академических целях.
Попытка Лемматизер = Новый COMОбъект("Lemmatizer.LemmatizerRussian"); АграмТаб = Новый COMОбъект("Agramtab.RusGramTab"); Исключение Сообщить(ОписаниеОшибки()); Возврат КонецПопытки; Лемматизер.LoadDictionariesRegistry(); АграмТаб.Load(); Массив = Новый Массив; Массив.Добавить("Мама"); Массив.Добавить("любит"); Массив.Добавить("дочь"); Для каждого Значение из Массив Цикл Результат = Новый Структура; Парадигмы = Лемматизер.CreateParadigmCollectionFromForm(Значение, 1, 1); Если Парадигмы.Count = 0 Тогда Результат.Вставить("Норма", Значение); Результат.Вставить("ЧастьРечи",""); Результат.Вставить("Граммема" ,""); Иначе Для счeтчик=0 По Парадигмы.Count-1 Цикл Парадигма = Парадигмы.Item(счeтчик); Результат.Вставить("Норма", Парадигма.Norm); Результат.Вставить("id" , Формат(Парадигма.ParadigmID,"ЧГ=")); Коды = Парадигма.SrcAncode; Код = Сред(Коды, 1, 2); Результат.Вставить("ЧастьРечи",АграмТаб.GetPartOfSpeechStr(АграмТаб.GetPartOfSpeech(Код))); Результат.Вставить("Граммема",АграмТаб.GrammemsToStr(АграмТаб.GetGrammems(Код))); Прервать; КонецЦикла; КонецЕсли; Если Результат.ЧастьРечи = "С" Тогда //Существительное Сообщить("Существительное: "+Значение); КонецЕсли; КонецЦикла;
Результат работы — выводит только существительные:
Восторженное отношение жены к работе мужа — лучшая реклама его деятельности.