Капитально об программе 1С 8.0-8.3-8.4, 7.7

Морфологический анализ на 1С

Компонента программный интерфейс компонента морфологического анализа предназначена для определения части речи, нормальной формы и прочих характеристик слова.

Работает на собственных словарях.

Скачать можно на сайте разработчика: http://www.aot.ru/download.php 

После установки система требует перезагрузиться, пытаемся не верить, но зря:

На 32-битной регистрируем компоненты regsvr32 

На 64 битной системе запускаем DCOMCNFG: добавляем приложение и компоненты аналогично написанному здесь, необходимо показать две 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(Код)));
         Прервать;
      КонецЦикла; 

   КонецЕсли;
   Если Результат.ЧастьРечи = "С" Тогда
      //Существительное
      Сообщить("Существительное: "+Значение);
   КонецЕсли; 
КонецЦикла; 

 

Результат работы — выводит только существительные: