Компилятор словаря, обработав текстовые файлы с данными по морфологии, лексике, тезаурусу, синтаксису одного или нескольких естественных языков, создает файл dictionary.xml и вписывает туда имена всех созданных файлов данных. Этот файл может быть использован любыми программами и компонентами SDK без каких-либо модификаций. В некоторых случаях его содержимое можно отредактировать вручную, например вписав другие пути к файлам, или задав особые параметры подключения к базе данных. По умолчанию файл dictionary.xml сохраняется в каталоге ...\bin-windows[64] или .../bin-linux[64] для Windows и Linux соответственно, но большинство программ в рамках проекта позволяют задать другое размещение этого файла, например в командной строке или ini-файле.
Создаваемое компилятором словаря содержимое файла dictionary.xml предполагает использование локальной файловой словарной базы. Если необходимо подключиться к словарной базе в реляционной СУБД, то необходимо вручную отредактировать файл, вписав параметры подключения к БД, включая сетевой адрес, логин и пароль.
Формат конфигурационного файла такой:

Обратите особое внимание, что по умолчанию все файловые пути являются относительными к каталогу с dictionary.xml. Далее будет показано, как изменить эту интерпретацию значений для отдельных узлов.
1. alphabet.bin - алфавит.
2. diction.bin - словарные статьи (для не-SQL версии словаря).
3. Формат файла данных для морфологии.
4. lexicon.db - описание морфологии: части речи, грамматическое категории и так далее.
5. Формат базы данных тезауруса.
6. Путь к базе данных тезауруса. Этот файл содержит описание связей между словами - синонимы, антонимы, переводы и так далее.
7. Файл данных для модуля быстрого поиска слов, обычно он используется в поисковом движке.
8. Файл с данными для лемматизатора, далее есть подробное описание всех вариантов задания параметров этого модуля.
9. Файл данных для работы морфологического анализатора с не-словарными словами.
10. Файл данных для модуля быстрого инкрементального поиска слов, который используется только Грамматическим Словарем Русского Языка.
11. Правила синтаксического анализа и трансформации.
12. Данные для работы интерактивного отладчика. Он необходим только в отладочных версиях словаря.
13. Путь к папке, содержащей файлы данных с N-граммами.
14. Путь к модулю токенизации текста. Ниже описан расширенный формат конфигурации сегментаторов.
15. Путь к модулю стемминга. Он используется только поисковым движком как упрощенный морфологический анализатор.
16. Файл со списком стоп-слов. Он используется только поисковым движком для определения значимости слов и формирования обратных индексов для документов.
Большинство модулей грамматического словаря допускают размещение своих данных не только в локальных файлах, но и в базе данных на удаленном сервере (см. описание серверного варианта SDK грамматического словаря). В таком случае вместо пути к файлу мы должны указать параметры подключения к серверу, обычно называемые connection string. Типичная строка подключения содержит сетевой адрес сервера, номер порта, имя пользователя и пароль, а также имя базы данных или схемы. Для отдельных моделей СУБД могут быть свои специфические параметры, например для Oracle зачастую задается alias подключения, который раскрывается клиентом Oracle через данные в специальном файле.
Работа с базой данных для компонентов словаря инкапсулирована в особых классах - слоях абстракции данных (DAL), так что код грамматического словаря не знает о конкретных реализациях доступа к данным. Выбор модели СУБД, к которой будет выполняться подключение, осуществляется в конфигурационном файле через задание условного наименования, например sqlite или mysql:
<?xml version="1.0" encoding="utf-8"?>
<dataroot>
...
<thesaurus_provider>mysql</thesaurus_provider>
...
</dataroot>
Регистр в названии СУБД не играет роли, поэтому SQLite и sqlite одинаково приемлемы.
Набор поддерживаемых моделей СУБД зависит от параметров компиляции программ, и обычно ограничен одной или двумя СУБД, включая SQLite.
Строка подключения указывается для каждого модуля словаря отдельно. Это позволяет хранить данные разных модулей в независимых файлах. Но при использовании серверной версии словаря задание десятка одинаковых строк подключения утомительно и представляет потенциальный источник ошибок, поэтому предусмотрен другой вариант.
В разделе connections задаются именованные строки подключения. Каждая строка оформляется как узел connection с соответствующим атрибутом name. Конечно, в большинстве случаев такая строка одна:
<?xml version="1.0" encoding="utf-8"?>
<dataroot>
...
<connections>
<connection name="Local">host=127.0.0.1;port=3306;login=root;db=solarix;pool_size=1</connection>
</connections>
</dataroot>
В данном примере Local - это произвольно выбранное нами название для подключения к указанному серверу. Имея такой синоним, мы можем указать Local во всех узлах конфигурационного файла:
<?xml version="1.0" encoding="utf-8"?> <dataroot> ... <thesaurus_provider>mysql</thesaurus_provider> <thesaurus_db>Local</thesaurus_db> <ngrams_provider>mysql</ngrams_provider> <ngrams_db>Local</ngrams_db> ... <connections> <connection name="Local">host=127.0.0.1;port=3306;login=root;db=solarix;pool_size=1</connection> </connections> </dataroot>
Строка представляет из себя набор параметров со значениями. Точка с запятой отделяет параметры:
host=127.0.0.1;port=3306;login=root;db=solarix;pool_size=1
Параметры:
host - сетевой адрес сервера
port - номер порта, на котором сервер БД слушает запросы
login - имя пользователя
psw - пароль
db - имя базы данных (схемы)
pool_size - количество подключений в пуле, которые используются при паралелльной работе модулей.
По умолчанию провайдер подключения к SQLite ожидает имя файла, заданное относительно каталога с читаемым файлом dictionary.xml. База данных в таком случае открывается в режиме обновления, то есть при необходимости может выполнять команды DELETE, INSERT и UPDATE.
Чтобы задать абсолютный путь к файлу базы данных или изменить режим открытия базы на read-only, нужно использовать расширенный формат строки. Такая строка состоит из набора параметров, разделенных точкой с запятой и состоящих из имени параметра, знака = и значения параметра. Например, строка:
path=e:\dictionary_data\russian.db;mode=readonly
описывает подключение к базе данных, размещенной по абсолютному пути в режиме только на чтение.
Этот модуль используется для приведения слов к нормальной словарной форме. Он не является безусловно обязательным, поэтому в некоторых случаях соответствующие конфигурационные параметры могут отсутствовать в XML файле настроек или иметь значения атрибутов, фактически запрещающие загрузку модуля лемматизации.
Существует две альтернативные реализации лемматизатора, которые можно подключить к словарю - с хранилищем правил в реляционной SQL базе данных и с использованием обычного бинарного файла. Каждой из альтернатив соответствует свой порядок описания в XML файле.
Если правила лемматизации загружаются из SQL базы данных, то конфигурационный файл содержит название модели СУБД для выбора "драйвера подключения" и параметры подключения к серверу:
<?xml version="1.0" encoding="utf-8"?> <dataroot> ... <lemmatizer_provider enabled="true">mysql</lemmatizer_provider> <lemmatizer_db>Local</lemmatizer_db> ... <connections> <connection name="Local">host=127.0.0.1;port=3306;login=root;db=solarix;pool_size=1</Local> </connections> </dataroot>
В этом примере показано подключение к СУБД MySQL, работающей на локальном хосте. Вместо задания строки подключения в теле узла lemmatizer_db, используется более удобный вариант - указание условного названия строки подключения в секции connections.
Атрибут enabled для узла lemmatizer_provider позволяет запретить использование лемматизатора без удаления узлов из XML файла, задавая ему значение false.
Использование лемматизатора с хранением правил в бинарном файле описывается так:
<?xml version="1.0" encoding="utf-8"?> <dataroot> ... <lemmatizer enabled="true" flags="default" absolute="false">lemmatizer.db</lemmatizer> ... </dataroot>
Именно такая строка создается в файле dictionary.xml компилятором словаря.
Атрибут enabled позволяет заблокировать использование лемматизатора без удаления строк из XML файла. Второй атрибут flags настраивает режим работы лемматизатора - умолчальный с именем default, более быстрый с именем faster и самый быстрый с именем fastest. Кроме скорости эти режимы отличаются объемом потребляемой оперативной памяти, более подробно об этом сказано на странице API лемматизатора.
Путь к файлу по умолчанию должен указываться как относительный к каталогу, из которого прочитан файл конфигурации. Чтобы задать абсолютный путь, нужно указать значение true для атрибута absolute.
По умолчанию имя внешнего сегментатора и токенизатора, объявленное в описании языка, совпадает с именем DLL/SO файла, с добавлением принятого для целевой платформы расширения файла соответствующего типа. Например, если при описании китайского языка мы указали на внешний сегментатор chinese_segmenter, то при необходимости разобрать строку будет загружена библиотека chinese_segmenter.dll из каталога, в котором располагается файл dictionary.xml, с учетом относительного пути, заданного в узле segmentation_engines.
В некоторых случаях необходим более тонкий контроль за загрузкой и инициализацией подгружаемых модулей сегментации. В таких случаях применяется расширенный формат в конфигурационном файле:
<segmentation_engines> <segmenter> <name>chinese_segmenter</name> <module>chinese_segmenter-v5.dll</module> <libpath absolute="true">e:\mvoice\lem\bin-windows</libpath> <datapath absolute="true">e:\mvoice\lem\bin-windows</datapath> <params></params> </segmenter> </segmentation_engines>
В данном случае каждый сегментатор описывается в своей ветке segmenter. Таких узлом может быть много, для каждого сегментатора - своя. При поиске информации для загрузки и инициализации просматриваются узлы name, и как только найдено совпадение с именем сементатора, объявленным в описании языка, берутся остальные параметры. Обратите внимание, что фактическое имя файла DLL/SO может не совпадать с названием сегментатора, как это видно в узле module. Более того, узел libpath позволяет указать относительный или абсолютный путь к каталогу, в котором находится DLL/SO. В добавок к этому некоторые сегментаторы требуют загрузки данных из файлов, путь к которым можно задать в узле datapath. Наконец, узел params позволяет передать в процедуру инициализации сегментатора произвольную строку настроек, интерпретация которых полностью зависит от самого сегментатора.
Описание параметров для подключения базы N-грамм зависит от формата их хранилища.
Если n-граммы хранятся в бинарных файлах или в локальной базе данных SQLite, то необходимо указать путь к папке с файлами данных. Обратите внимание, что база N-грамм может включать в себя множество файлов, имена которых движок N-грамм узнаёт самостоятельно. Путь к папке указывается в узле ngrams:
<?xml version="1.0" encoding="utf-8"?> <dataroot> ... <ngrams>data_folder</ngrams> ... </dataroot>
По умолчанию данных узел в файле dictionary.xml, созданном при компиляции словаря, пуст, то есть файлы данных будут находится в той же папке, из которой прочитан файл dictionary.xml. Чтобы указать абсолютный путь, необходимо указать атрибут absolute="true":
<?xml version="1.0" encoding="utf-8"?>
<dataroot>
...
<ngrams absolute="true">c:\data_folder</ngrams>
...
</dataroot>
Если база данных находится в серверном хранилище, то параметры подключения описываются по-другому. По-первых, узел ngrams_provider задает имя модели СУБД, например MySQL. Во-вторых, узел ngrams_db содержит строку подключения к СУБД, или ссылку на строку в разделе connections (см. ранее):
<?xml version="1.0" encoding="utf-8"?> <dataroot> ... <ngrams_provider>mysql</ngrams_provider> <ngrams_db>Local</ngrams_db> ... </dataroot>
Сборка грамматического словаря
Расширение грамматического словаря
© Mental Computing 2009
|
|
changed 18-May-12 |