Словари

Материал из DvoWiki
Перейти к: навигация, поиск

С 2001 в сети Академгородка ДВО РАН года работает сервер dict://dict.dvo.ru протокола DICT (Dictionary Server Protocol). DICT ( RFC2229 ) одобрен в качестве Internet-стандарта и включен в RFCs в 1997 году. Словарь для DICT - текстовый файл в простом, легко читаемом формате [1]. Словарь содержит последовательность статей (определений), начинающихся с названия (определяемого в статье слова либо фразы) и заканчивающихся строкой состоящей из единственной точки. По файлу словаря формируется файл с индексом, индекс связывает каждое название с его позицией в тексте словаря. Словарь можно запаковать специальным образом (формат упаковки позволяет извлекать отдельную словарную статью не распаковывая весь архив). Для национальных символов (не ASCII) стандарт предписывает использовать кодировку UTF-8 .Для протокола DICT создано много реализаций серверов, клиентов и словарей (баз) (см. http://www.dict.org/links.html). Имеются Internet-браузеры которые понимают URI dict://... ( например, curl ).

Для доступа к серверу dict.dvo.ru можно воспользоваться DICT-клиентом либо WEB-интерфейсом.На dict.dvo.ru использован сервер DICT Development Group ( v. 1.10.6 ), ранее разработчики этого сервера базировались на ftp://ftp.dict.org/pub/dict/. Словари для dict.dvo.ru получены из различных источников (см. Cписок словарей на dict.dvo.ru). Добавление нового словаря - простая операция, в конфигурационный файл сервера нужно добавить ссылки на файлы словаря и индекса.

Проиллюстрируем основные команды протокола в форме URI. DICT-клиент либо WEB интерфейс будет обеспечивать туже функциональность, хотя внешний вид вызова может выглядеть иначе (как правило, интерфейс пользователя клиента упрощен):

  1. Запросить у сервера список доступных словарей (баз):
    curl dict://dict.dvo.ru/show:databases
    . Словари (базы) выдаются в том порядке, в каком они будут использованы для поиска определений. В конфигурации сервера можно определять виртуальные базы,представляющие собой группы словарей (например, "англо-русские и русско-английские словари","толковые словари русского и английского языка", ... ). Виртуальные базы упрощают задание области для поиска определения. Согласно RFC2229, для использования в запросах предусмотрены специальные имена словарей:
    • * - искать и выводить все определения искомого слова (фразы) из всех доступных на сервере словарей;
    • ! - искать первый словарь, содержащий определение искомого слова (фразы) и выводить все определения искомого из этого словаря.
    Умолчание, на случай, если в запросе база не указана, может быть определено разработчиком программы-клиента. Хотя в RFC2229, в запросах на получение определений, по умолчанию, рекомендуется использовать словарь !, клиент командной строки dictl (из пакета [2]) использует *, т.е. выдает все определения из всех словарей для искомого слова.
  2. Запросить у сервера список доступных стратегий поиска определений по словарям:
    curl dict://dict.dvo.ru/show:strategies
    . Стратегии, отличные от exact применяют, например, когда мы не знаем как точно пишется слово либо фраза и в каком виде слово либо фраза занесены в словарь ("...ёж" или "...еж"?, ...). dict.dvo.ru поддерживает следующие стратегии:
    • exact Match headwords exactly (ищем статьи, названия которых польностью совпадают с текстом запроса).
    • prefix Match prefixes (ищем статьи, начало названия которых совпадает с текстом запроса).
    • nprefix Match prefixes (skip, count) .
    • substring Match substring occurring anywhere in a headword (ищем статьи, названия которых содержат текст запроса в качестве подстроки).
    • suffix Match suffixes (ищем статьи, окончание названия которых совпадает с текстом запроса).
    • re POSIX 1003.2 (modern) regular expressions (ищем статьи, названия которых соответствуют регулярному выражению, записанному в тексте запроса). (см. Regular_expression). Регулярные выражения являются самой гибкой и самой ресурсоемкой стратегией поиска. В результате некорректно составленного запроса вы можете получить ОЧЕНЬ длинный ответ.
    • regexp Old (basic) regular expressions (см. Regular_expression).
    • soundex Match using SOUNDEX algorithm (ищем англоязычные названия, сходные по звучанию с текстом запроса, см. Soundex). С кириллицей алгоритм не работает.
    • lev Match headwords within Levenshtein distance one (ищем названия, сходные по звучанию с текстом запроса, Levenshtein distance). Алгоритм работает и с русским языком.
    • word Match separate words within headwords (ищем статьи, названия которых содержат текст запроса в качестве отдельного слова).
    • . Специальное обозначение для стратегии по умолчанию (чаще всего, по умолчанию используется lev). С помощью конфигурационного файла сервера можно определять для словарей индивидуальные стратегии по умолчанию.
    Архитектура сервера позволяет добавлять новые стратегии в виде динамически подключаемых библиотек. Стратегия say доступная через WEB-интерфейс dict.dvo.ru к DICT отношения не имеет (см. ниже).
  3. Запросить у сервера подмножество определений слова либо фразы из некоторого словаря:
    curl dict://dict.dvo.ru/define:<word>:[<dictionary>[:<n>]]
    . Пример реального запроса и ответа сервера:
    ~ $ curl dict://dict.dvo.ru/define:destination:mueller-base
     % Total  % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 516 0 516 0 0 17615 0 --:--:-- --:--:-- --:--:-- 136k
    220 ftp.dvo.ru dictd 1.10.6/rf on Linux 2.6.16.16 <auth.mime> <273.11457.1152138187@ftp.dvo.ru>
    250 ok
    150 1 definitions retrieved
    151 "destination" mueller-base "Base dictionary"
    destination
    [,destI'neISэn] _n.
    1) назначение, предназначение
    2) место назначения (тж. place of destination); цель (путешествия,
    похода и т.п.)
    .
    250 ok [d/m/c = 1/0/15; 0.000r 0.000u 0.000s]
    221 bye [d/m/c = 0/0/0; 0.000r 0.000u 0.000s]
    . Если вместо конкретного словаря mueller-base поставить * ответ будет значительно длиннее. Обычный клиент протокола dict,
    конечно, не станет вываливать на пользователя коды ответов и статистику. Данный пример может быть полезен потенциальным разработчикам.
  4. Найти, согласно указанной стратегии, подмножество названий статей из некоторого словаря:
    curl dict://dict.dvo.ru/match:<word>:[<dictionary>[:<strategy>[:<n>]]]
    . Пример реального запроса и ответа сервера:
~$ curl dict://dict.dvo.ru/match:лапата:*:lev
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
 100   755    0   755    0     0   3754      0 --:--:-- --:--:-- --:--:--  3445
 220 ftp.dvo.ru dictd 1.10.6/rf on Linux 2.6.16.16 <auth.mime> <281.14545.1152143672@ftp.dvo.ru>
 250 ok
 152 19 matches found
 korolew_ru-en "лопата"
 korolew_ru-en "лапта"
 sinyagin_general_re "лопата"
 ozhegov "лопата"
 ozhegov "лапта"
 ozhegov "лапать"
 ozhshv "лопата"
 ozhshv "лапта"
 ozhshv "лапать"
 slovnyk_ru-be "лопата"
 slovnyk_ru-en "лопата"
 slovnyk_ru-en "лапта"
 slovnyk_ru-pl "лопата"
 slovnyk_ru-pl "лапта"
 slovnyk_ru-uk "лопата"
 slovnyk_ru-uk "лапта"
 slovnyk_ru-uk "лапала"
 slovnyk_ru-uk "лапать"
 slovnyk_uk-be "лопата"
 .
 250 ok [d/m/c = 0/19/1119230; 1.000r 0.000u 0.000s]
 221 bye [d/m/c = 0/0/0; 1.000r 0.000u 0.000s]


Другие команды позволяют получить информацию о сервере, авторизоваться на сервере, если это необходимо.

Есть DICT клиенты с графическим интерфейсом для Windows, Linux, Macintosh, WAP-устройств, ... : [3], ... . Есть plugin-ы для Internet-браузеров (даже для IE! [4]). Наконец, есть WEB-страницы, выполняющие роль DICT-клиента конкретного DICT-сервера ([5]).

WEB-интерфейс сервера dict.dvo.ru, помимо традиционных функций DICT-клиента, предлагает к каждой словарной статье английского языка WAV-файл с произношением определяемого слова либо фразы. Если файл на сервере отсутствует, произношение названий синтезируется с помощью OpenSource пакета Festival (разработка "The Centre for Speech Technology Research" University of Edinburgh ). По поводу синтезаторов речи см., например http://en.wikipedia.org/wiki/Speech_synthesis. Качество произношения системой Festival определяется "голосом" (voice), выбранным для произношения. "Голос" представляет из себя набор файлов, описывающих правила произношения для конкретного диалекта некоторого языка. Размер "голоса" зависит от того, насколько детально описаны правила произношения. "Голос" может занимать от единиц мегабайт до сотен. В настоящее время под Festival свободно доступны мужские и женские "голоса" для различных диалектов английского, немецкого и испанского языков. Из опробованных у нас, наилучшее качество произношения обеспечивали:

Пока для синтеза выбран первый голос. Помимо произношения названий словарных статей, Web интерфейс позволяет произнести фразу на английском. Ограничение на длину произносимой строки выставлено в 100 символов (мало? нормально?). К сожалению, некоторые браузеры (Firefox с realplayer, например) норовят оборвать фразу до ее окончания. Operа этим не страдает, также можно просто сохранить файл и прослушать его через проигрыватель. Что-бы не вводить дополнительные элементы интерфейса, генерация WAV-файла с произношением фразы , включена в список стратегий поиска (стратегия "say", обращения к серверу DICT вообще не происходит). Обычный (как мне представляется) порядок применения "say" - ищется определение английского слова, из некоторого словаря в строку редактирования вынимается пример использования слова, выбирается стратегия "say" и нажимается Enter . С тойже целью можно непосредственно редактировать строку URI в браузере.