Анализ и экспорт грамматического словаря (программа decompiler)

Назначение

Результаты исполнения

Экспорт в формат SQL

Экспорт в формат XML

Утилита для декомпиляции и анализа словаря

С помощью программы decompiler (ее можно либо скомпилировать самостоятельно, либо загрузить готовый исполнимый модуль в составе SDK) можно выполнить простейший анализ содержимого словаря - распределение всевозможных структурных элементов по категориям (например, словарных статей по грамматическим классам), а также экспортировать информацию в одном из поддерживаемых внешних форматов - XML, SQL, текстовый.

Изначально эта программа являлась настоящим декомпилятором словаря, она позволяла из бинарного образа получить текстовое представление на языке ПРИИСК, которое можно было снова компилировать с помощью compiler.

Однако со временем такая возможность оказалась невостребованной, а ее поддержка - слишком обременительной, поэтому остался только код для анализа и экспорта XML/SQL содержимого словаря. Мы используем эту утилиту для общего анализа словаря после внесения в него большого объема языковой информации, а также для проверки программного кода загрузки словаря.

Утилита написана на C++ и компилируется для нескольких платформ:

Результаты исполнения

Исполнимый файл утилиты можно найти в подкаталоге exe (или exe64 для 64-битных платформ).

В каталоге  ...\sdk\dictionary можно найти готовые скрипты decompile.cmd и decompile.sh, которые загружают словарь из соответственно \sdk\bin-windows или /sdk/bin-linux и сбрасывают результаты в \sdk\tmp. Скрипты sql.cmd и sql.sh выполняют экспорт словаря в формат SQL для заливки в СУБД (подробности далее).

Через пару минут работы decompile.cmd проанализированное содержимое словаря будет распечатано в нескольких текстовых файлах:

alphabet.map - содержимое алфавита

lexicon.map - содержимое лексикона и лексемного автомата, то есть собственно словарь.

grammar.map - содержимое грамматического автомата, главным образом продукционные правила анализа и синтеза фраз.

prolog.map - содержимое всех баз данных пролог-машины.

speaker.map - содержимое голосового автомата (синтезатора речи) и голосовой грамматики.

Большинство из вышеперечисленных файлов имеет кодировку utf-8, поэтому содержимое многоязыковых словарей можно легко анализировать без фокусов с кодовыми страницами. Стандартный блокнот ОС Windows поддерживает кодировки Unicode по крайней мере с версии XP.

Хочу особо отметить, что все частотные характеристики относятся именно к содержимому словаря, а не к языковой практике. Для того, чтобы определить, например, частоты употребления разных слов в произвольном тексте, необходимо воспользоваться модулем empirika.

Экспорт грамматического словаря в формат SQL

Часть данных грамматического словаря может быть экспортирована в реляционную базу данных - поддерживаются несколько версий существующих SQL СУБД. Экспорт выполняется в текстовый файл в однобайтовой кодировке или utf8 в виде SQL-скрипта, который при своем исполнении административными средствами целевой СУБД создаст набор таблиц и заполнит их данными.

Опции экспорта

Для экспорта используется опция

-sql "название_СУБД,параметр,параметр"

Название СУБД может принимать одно из значений:

mysql - для создания таблиц и загрузки данных в СУБД MySql

oracle - для создания схемы и загрузки данных в СУБД Oracle

firebird - для СУБД FireBird

mssql - для MS SQL

sqlite - для SQLite

unknown или не определенная СУБД - для генерации скрипта с командами заливки данных в стандартную SQL базу данных (без создания таблиц).

Дополнительные параметры:

utf8 - создавать файл в кодировке utf-8

bom - начинать файл в кодировке utf-8 с метки BOM. Среди поддерживаемых СУБД только MS SQL нуждается в данном параметре, чтобы автоматически распознать Unicode в скрипте без явного указания в командной строке запуска sqlcmd.

ascii - создавать файл скрипта в кодировке ASCII.

noschema - не генерировать в создаваемом скрипте команды CREATE TABLE и т.п.

lemmatizator - создавать отдельный SQL скрипт для создания в базе данных лемматизатора

noformcoords - не создавать в схеме словаря таблицу SG_FORM_COORD.

mssql_bulk_insert - использовать оператор BULK INSERT при генерации скрипта для MS SQL, сохранять некоторые данные в отдельных csv-файлах - см. подробнее здесь.

loader - использовать оператор LOAD DATA INFILE для скрипта под MySQL - см. подробнее здесь.

Например:

-sql "firebird,utf8"

В результате выплнения экспорта будут созданы следующие файлы:

dictionary.sql - команды создания и заполнения всех таблиц, кроме лемматизатора

lemmatizator.sql - команды создания и заполнения таблиц лемматизатора

Скрипты для выполнения экспорта

Скрипт \scripts\dictionary\sql.cmd содержит все необходимые опции для экспорта в SQL. Для Linux аналогичную работу выполняет скрипт sql.sh.

Содержимое создаваемого утилитой файла ...\tmp\dictionary.sql можно условно разбить на несколько крупных шагов: удаление таблиц для поддержки изменений в структуре (по возможности используем DROP IF EXISTS или аналогичные средства), создание таблиц, собственно заливка данных операторами INSERT, создание индексов. Если в параметрах экспорта указана опция noschema, то пересоздание таблиц и индексов не выполняется.

Если для опции -sql задан параметр lemmatizator, то поддерживающие лемматизацию таблицы и данные создаются другим скриптом - в файле с именем lemmatizator.sql.

Загрузка созданного SQL скрипта в СУБД

Созданный файл загружается в целевую СУБД с помощью соответствующего инструмента этой БД. Для работы с загруженным в БД словарем не нужны никакие дополнительные инструменты, кроме средств языка SQL, включая хранимые процедуры на поддерживающих эту возможность СУБД. Для удобства в подкаталоге ...\scripts\dictionary есть отдельные командные скрипты для заливки данных в FireBird, MySQL, Oracle, MS SQL, SQLite.

Обратный экспорт словаря из SQL базы

Загруженные и, возможно, отредактированные в СУБД данные можно обратно выгрузить в текстовом формате описания словаря, который понимает компилятор. Для этого используется утилита sql2sol.exe, написанная на Delphi. Для удобства использования в подкаталоге ...\scripts\dictionary есть командный файл sql2sol.cmd, который запускает экспорт и сохраняет результаты в подкаталоге ...\tmp. А, к примеру, скрипт rus-jap-sql.cmd собирает из результатов выгрузки бинарный русско-японский словарь с модулями полнотекстового перевода.

Работа со словарем в базе данных

В прикладном коде работа со словарем в БД возможна любыми доступными средствами, предоставляемыми используемой платформой. В некоторых случаях следует обращать внимание на поддержку юникода в используемых библиотеках. Непосредственно получение информации из словаря можно осуществлять как с помощью SQL-запросов, так и через технологию LINQ с поддержкой ORM Entity Framework.

С загруженным в SQL БД словарем можно также работать с помощью программы SQLex. Она предоставляет удобный интерфейс для добавления и удаления словарных и фразовых статей, связей в тезаурус:

редактирование русско-японского словаря

Эта программа работает со словарем, загруженным в СУБД FireBird или MySQL. Благодаря использованию кодировки utf8 для текстовых полей в таблицах, можно работать с многоязычными словарями (на скриншоте показана работа с русско-японским словарем). Результаты ее работы сохраняются в SQL базе, а также могут быть скомпилированы прямо из программы с бинарный файл словаря, который используется всеми утилитами проекта.

Примеры запросов к SQL словарю

Подробно о получении различной информации из словаря - склонении, спряжении, работе с тезаурусом - написано здесь.

Загруженный в SQL базу грамматический словарь позволяет очень просто выполнять различные статистические расчеты - именно таким образом были получены многие результаты, отраженные здесь.

Демо-скрипты для загрузки базы

Скрипты для загрузки демо-версии словаря для MySQL, Oracle, MS SQL и FireBird можно найти на странице загрузок. Эти скрипты формируют полную схему БД, но с урезанным лексиконом и тезаурусом.

Экспорт в формат XML

Экспорт в формат XML выполняется при указании опции -xml в строке запуска утилиты.

При этом в указанном опцией -outdir формируются файлы:

lexicon.xml, lexicon.xsd - полное содержимое лексикона в виде реляционных таблиц для загрузки в СУБД, поддерживающей XML.

export_NN.xml - набор XML файлов с объявлениями словарных статей, при этом размер одного файла поддерживается относительно небольшим, чтобы программы типа xml2sol могли комфортно работать с ними.

export - список сгенерированных файлов export_NN.xml

Файл lexicon.xml содержит список словарных статей в виде таблиц: class - грамматические классы, entry - шапки словарных статей, entry_form - грамматические формы статей.

Подробнее о реляционной структуре XML словаря и о работе с создаваемыми файлами написано здесь.

  © Elijah Koziev 2010
прикладные проекты на основе грамматического словаря API грамматической машины компоненты для доступа к грамматическому словарю условия получения SDK токенизатор и сегментатор морфологический анализ и синтез лемматизатор база N-грамм синтаксический анализатор словоформы морфология и синтаксис русского языка падеж число род совершенный и несовершенный вид экспорт в SQL формат экспорт в XML формат скрипт SQL словаря структура SQL словаря структура XML словаря компоненты для доступа к грамматическому словарю ORM Persistent Dictionary Library лемматизация стемминг примеры использования грамматического словаря склонение существительных в русском языке склонение русских прилагательных спряжение глаголов в русском языке поиск текста с учетом морфологии OCR подсистема расширенные регулярные выражения генератор текста генератор случайного текста и имитатор рандомизатор синонимизатор перефразировщик Статистика буквенных паттернов

Грамматический словарь русского языка



Грамматический словарь
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
требования: 512 Mb свободной памяти, 300 Мб на диске
размер:         34 Мб

  скачать грамматический словарь купить грамматический словарь SDK грамматического словаря
грамматический словарь русского языка



SDK Грамматического словаря



SDK Грамматического Словаря
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
размер:         13 Мб

SQL словарь (демо):
sqlite mysql oracle firebird mssql

скачать демо-версию SDK купить SDK API грамматического словаря



Поисковая система



Integra
настольная и сетевая поисковая система 

платформа:  Windows XP ... Windows 7
требования: 512 Mb свободной памяти
размер:         21 Мб

Дополнительные компоненты:
MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать поисковую систему SDK поисковой системыописание поисковой системы



SDK Поисковой системы



SDK Поискового движка
API для настольной и сетевой поисковая система 

платформа:  Windows XP ... Windows 7
размер:         17 Мб

Дополнительные компоненты:

MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать SDK SDK поисковой системы



Экранный переводчик



Translator
экранный переводчик

платформа:  Windows XP ... Windows 7
требования: 256 Mb свободной памяти
размер:         4.4 Мб

Дополнительные компоненты:
расширенный англо-русский словарь 6.4 Мб


скачать экранный переводчикописание экранного переводчика



изменено 18-Sep-10