Файл конфигурации грамматического словаря

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

Создаваемое компилятором словаря содержимое файла dictionary.xml предполагает использование локальной файловой словарной базы. Если необходимо подключиться к словарной базе в реляционной СУБД, то необходимо вручную отредактировать файл, вписав параметры подключения к БД, включая сетевой адрес, логин и пароль.

Формат конфигурационного файла такой:

Russian grammatical dictionary configuration file

Обратите особое внимание, что по умолчанию все файловые пути являются относительными к каталогу с 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>

MySQL connection string

Строка представляет из себя набор параметров со значениями. Точка с запятой отделяет параметры:

host=127.0.0.1;port=3306;login=root;db=solarix;pool_size=1

Параметры:

host - сетевой адрес сервера

port - номер порта, на котором сервер БД слушает запросы

login - имя пользователя

psw - пароль

db - имя базы данных (схемы)

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

Строка подключения к словарной базе данных в SQLite

По умолчанию провайдер подключения к 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-грамм зависит от формата их хранилища.

Если 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>

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

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

Сборка грамматического словаря

Расширение грамматического словаря

  © Mental Computing 2009  home  rss  email  icq  download
changed 05-Jun-12