"В начале было слово..." Часть 1. PtkDic и компания.
Автор: Александр Куприн


1. Введение.

Поговорим о тех костылях, которые иногда приходится использовать, занимаясь переводами. Я имею ввиду электронные словари, а не программы-переводчики. Давайте посмотрим, что может нам заменить, например, словарь Мюллера, который в бумажном варианте можно смело использовать при ковровом бомбометании.

Если не все, то большинство из вас хоть однажды в своей жизни пользовались словарями. Бумажными или электронными -- не важно. Если вы работаете (или работали) в среде Windows, то это, скорее всего, был Lingvo, возможно Socrat. Список можно продолжить, но, думаю, что львиную долю рынка на территории бывшего Союза занимает всё-таки Lingvo. Но, к сожалению, версии Lingvo под Linux нет. Можно попробовать запустить его в среде Wine, но придётся повозиться и при этом остаётся открытым вопрос лицензионной чистоты, используемого продукта. Для тех, кто не в курсе, сообщаю -- всё тоже самое есть в Linux. При этом в свободном доступе и абсолютно легально. И не один-два словаря (я имею ввиду программы), а, как минимум, десяток (возможно их больше, но это те словари, до которых я смог добраться). А об объёмах словарных запасов и говорить не приходится. Признаться, я был очень удивлён, узнав в своё время, какое количество электронных словарей разгуливают по свету под лицензией GNU GPL. Свободное программное обеспечение не стоит на месте и с вашей помощью может стать ещё лучше. Для этого не требуется что-то экстраординарное, достаточно желания внести посильный вклад в развитие того, чем вы и так свободно пользуетесь. Но достаточно предвыборных речей, перейдём к делу...

В этой статье речь пойдёт о словарях, использующих в качестве хранилища данных MySQL. Уверен, вы сразу же вспомните, что есть ещё словари -- mova, dict, Stardict и т.д. и т.п. Угу, я -- в курсе. Просто именно эта статья описывает троицу словарей (термин словарь будет использоваться в разных контекстах -- и как собственно набор статей, и как совокупность программы и данных; о чём идёт речь, думаю, будет понятно из контекста), объединённых "территориальным принципом", базой данных, содержащей таблицы со словарными статьями". Преимущества такого подхода очевидны:

Патриархом и своего рода основателем этой ветви словарей является PtkDic, программа, написанная Алексеем Семеновым на Perl/Tk. Идея хранения словарей в базе MySQL оказалась настолько удачной, что это позволило появится целой коллекции программ, работающих с теми же словарями (JaLingo, GtkDic, phpMyLingvo).

Немного о каждой из программ:

На текущий момент, в формате ptkdic (хотя это и не официальное название, но так проще не запутаться), доступны следующие словари:

Эти словари вы можете найти на домашней странице PtkDic и GtkDic или на странице проекта phpMyLingvo.

2. План действий.

С чего начать? Конечно же с настройки MySQL и установки словарей. А далее по необходимости доустановить J2RE 1.4 и/или Apache. Последовательность необходимых операций выглядит следующим образом:

  1. Установка и настройка MySQL.
  2. Установка словарей.
  3. Установка и настройка PtkDic(*).
  4. Установка и настройка GtkDic(*).
  5. Установка J2RE 1.4 и JaLingo(*).
  6. Установка и настройка Apache с поддержкой PHP и phpMyLingvo(*).
* -- опционально

2.1 Установка и настройка MySQL.

Нам понадобятся три пакета -- MySQL-server, MySQl-client и libMySQL. Как устанавливать -- сугубо личное дело каждого дистрибутива.

Сразу после того как вы установили MySQL, вы должны для себя решить -- используется MySQL только локально или sql-сервер должен предоставлять доступ к своим ресурсам другим машинам? Если да, то редактируем файл /var/lib/mysql/my.cnf и убираем из него строку

skip-networking

Получаем примерно следующее:

[mysqld]
chroot=/var/lib/mysql
datadir=/db
bdb-logdir=/log
log=/log/queries
pid-file=/mysqld.pid
skip-locking
socket=/mysql.sock
tmpdir=/tmp
user=mysql

Перезапускаем сервис mysqld:

[root@p4 bin]# service mysqld restart

И заодно проверяем будет ли mysqld автоматически грузится при старте системы:

[root@p4 mysql]# chkconfig --list mysqld
mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off

В моём случае mysqld отключен, поэтому я включаю его:

[root@p4 mysql]# chkconfig mysqld on
[root@p4 mysql]# chkconfig --list mysqld
mysqld          0:off   1:off   2:off   3:on    4:on    5:on    6:off

Теперь при загрузке в runevel 3,4 или 5 будет автоматически грузиться mysqld. Проверяем запущен ли mysqld:

[root@p4 mysql]# service mysqld status
mysqld is stopped

Если нет, запускаем:

[root@p4 mysql]# service mysqld start

Если вы установили MySQL в первый раз, то вам необходимо настроить пароль суперпользователя в MySQL. Изначально для пользователя root пароль не указан. Что делаем? Для любителей GUI советую установить пакет mysqlnavigator и настроить всё через него. Для адептов командной строки у меня есть небольшой набор скриптов для предварительной настройки и установки словарей:

Если вы только что установили MySQL, то всё, что от вас потребуется, это сделать следующее (можно не под привилегированным пользователем):

[alex@p4 bin]$ ./set_mysql_ptkdic.sh
Установка пароля для root...
Создаём базу ptkdic...
Создаём новых пользователей, ptkdic_adm и ptkdic_usr, и назначаем им привилегии...
Перегружаем mysql...

А теперь давайте объяснимся. Что это за два пользователя, ptkdic_adm и ptkdic_usr? Первый согласно скрипту set_mysql_ptkdic.sh получает полные права над БД ptkdic, где будут храниться таблицы словарей. Второй пользователь, ptkdic_usr, получает возможность делать только выборки из БД ptkdic. Это решение я использовал вместо того, которое предлагалось в описании по установке пакета GtkDic -- создать пользователя ptkdic и присвоить ему все (!) права на базу ptkdic и в дальнейшем использовать его для её заполнения и для работы с ней, что чревато неприятностями. Поэтому для работы с базой словарей я ввёл вместо одного пользователя двух.

2.2 Установка словарей.

С пользователями мы разобрались, теперь переходим к увеличению словарного запаса -- установке словарей. Лучше сразу идти на страницу проекта phpMyLingvo и взять словари там, т.к. на сайте страницы проекта PtkDic/GtkDic не работает докачка и, во-вторых, Сергей Галин (автор проекта phpMyLingvo) поддерживает набор словарей в актуальном состоянии. Скачайте то, что вас интересует. Обратите внимание на метод сжатия файлов -- gzip или bzip. Зачем? Сейчас поймёте. Дело в том, что файлы словарей представляют из себя огромные, предварительно сжатые, скрипты, которые "скармливаются" MySQL. Для этого воспользуйтесь скриптом install_dic.sh (за основу взят скрипт из пакета PtkDic). Но, чтобы install_dic.sh "не ошибся", помогите ему -- измените значение переменной PACK_PRG в var_mysql_ptkdic.sh на нужное вам: gzip или bzip. После этого можно устанавливать словари:

[alex@p4 tmp]$ ./install-dic.sh eng_rus_slang.bz2
Подождите, пожалуйста. Загружаю словарь eng_rus_slang.bz2 в БД ptkdic...
Операция успешно завершена!

2.3 Установка и настройка PtkDic.

Пакет берём на домашней странице PtkDic и GtkDic. Для работоспособности PtkDic вам необходимо установить Perl и несколько модулей для него: perl-Tk и perl-DBD-mysql. Что ещё за собой потянет установка этих пакетов зависит от того, что у вас уже установлено в системе. В моём случае это были perl-DBI, perl-Net-Daemon и perl-PIRPC. Но это так ... лирика ... вам поможет разобраться с пакетными зависимостями apt или yum (к сожалению, я не в курсе чем отслеживают зависимости пользователи Slackware).

Сам скрипт ptkdic расположите там, куда указывает переменная $PATH или добавьте новый путь. Кроме это, скопируйте файл ptkdicrc.templ в ~/.ptkdic/ptkdicrc и настройте пользователя, ip-адрес или имя хоста MySQL-сервера, код доступа к БД ptkdic и шрифты. С последними, возможно, придётся повозиться -- воспользуйтесь программой xfontsel, она облегчит вам жизнь. Получится примерно следующее:

host = p4.home
user = ptkdic_usr
passwd = ""

font_lat  = -misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1    # 8859-1 font
font_latb = -misc-fixed-bold-r-normal--14-130-75-75-c-70-iso8859-1      # 8859-1 bold font
font_rus  = -rfx-courier-medium-r-normal-*-14-140-75-75-m-90-koi8-r     # koi8-r font
font_rusb  = -rfx-courier-bold-r-normal-*-14-140-75-75-m-90-koi8-r      # koi8-r bold font

latex_preamble = "\documentclass[a4paper,10pt]{article} \n \usepackage[koi8-r]{inputenc} \n \usepackage[english,russian]{babel} \n \pagestyle{empty}"

geometry = 800x600+0+0

Запускаем (см. скриншот). Работает прямой и обратный поиск, а также поиск по частичному вхождению. Печать (тут я положусь на слова автора, т.к. принтера поблизости нет и проверить это не могу). При печати в подкаталоге ~/.ptkdic формируются три файла texput.(aux|dvi|log). Несомненный плюс -- корректная работа с европейскими языками (но это можно сказать и о других, описываемых здесь словарях). Для этого используется два шрифта для вывода на экран плюс автоопределение кодировки.

2.4 Установка и настройка GtkDic.

Пакет берём там же, где и ptkdic. Если планируете собирать из "сырцов", то вам придётся установить devel-пакеты соответствующих библиотек (glib-devel, gtk+-devel, libMySQL-devel). К сожалению, GtkDic написан на GTK+ 1.2.x. Можно попытаться собрать его под GTK+ 2.x, но стабильность работы GtkDic в этом случае под вопросом.

Для того, чтобы GtkDic заработал, вы должны установить, как минимум, два пакета: gtkdic и gtkdic-simple. После этого вы должны отредактировать конфигурационный файл /etc/gtkdicrc (для глобальных настроек), либо создать файл ~/.gtkdic/gtkdicrc в домашнем каталоге пользователя. Минимальные изменения, которые нужно внести, это:

host = p4.home
dicdb = ptkdic
user = ptkdic_usr
password =

Остальное по вкусу.

Возможно, вы заметили, что в случае с пользователем gtkdic_usr я оставляю переменную password, даже если пароль отсутствует. Можно, конечно, её убрать или закомментировать. Это не принципиально. Просто есть пользователь, есть пароль. А если пароль отсутствует, то каков он по умолчанию? Вот поэтому я и оставил всё как есть.

Запускаем (см. скриншот). Работает прямой и обратный поиск, а также поиск по частичному вхождению. Работают перевод выделенного текста и обратный перевод, но следует учитывать две вещи: первое -- выделять вы должны только слово (словосочетание или часть слова), встречающееся в словаре, а не целый кусок текста и второе -- у gtk+ свой буфер обмена (clipboard), а работу с system-wide xclipboard автор не доделал, поэтому этой возможностью вы можете воспользоваться, работая только в gtk+ приложениях. Хотя есть другой вариант -- собрать PtkDic под GTK+ 2.0 (./configure --without-old-gtk). Тогда эта проблема будет решена. Хотя я заставить работать GtkDic в таком варианте не смог (почему-то оказался заблокированным ввод в поля "English" и "Russian".).

Кроме этого, интерес представляют пакеты gtkdic-audio и gtkdic-audio_edit. Первый -- это gtkdic с возможностью воспроизведения произношения слова. Решение при этом выбрано простое (см. скрипт /usr/bin/gtkdic-say.sh пакета gtkdic) -- проигрывать mp3-файлы, размещённые в подкаталоге /tmp. Не ахти какой механизм работы со звуком, но как временное решение проблемы вполне подойдёт. Второй пакет вместе с возможностью аудио воспроизведения имеет встроенный редактор, позволяющий добавлять в базу новые словарные статьи (см. пункт меню "Update dictionary"). Если вы хотите отказаться от ввода данных, то воспользуйтесь пунктами меню "Undo last update" или "Undo all updates". (Это единственная из программ, рассматриваемых здесь, которая способна заполнять словарные статьи.)

Принцип работы редактора следующий -- в поле "English" вводите слово, а в окне, где обычно показываются словарные статьи, пишете свою статью. После этого выбираете пункт меню "Update dictionary". Недостаток редактора в том, что он не обновляет статью с таким же именем, а добавляет ещё одну. Так что будьте внимательны, если захотите воспользоваться этой возможностью. Да! И самое главное -- если вы используете предложенный мною вариант работы с базами, основанный на использовании двух пользователей, то напоминаю вам, что для добавления новых словарных статей у пользователя должны быть соответствующие права на это, поэтому замените пользователя gtkdic_usr на gtkdic_adm.

Как и PtkDic, GtkDic корректно работает с европейскими языками, используя тоже два шрифта для вывода на экран плюс автоопределение кодировки и имеет возможность печати.

И ещё. В составе пакета gtkdic есть скрипт, написанный на Perl, который представляет из себя простой веб-интерфейс для доступа к словарям. Чтобы заставить его работать, вам нужно установить и настроить apache (подробнее об этом читайте дальше в п. 2.6 "Установка и настройка Apache с поддержкой PHP и phpMyLingvo.") и скопировать скрипт webdic.pl в подкаталог /var/www/cgi-bin, предварительно настроив в нём доступ к базе данных:

 ...
my $dbhost = 'p4.home';
my $dbname = 'ptkdic';
my $dbuser = 'ptkdic_usr';
my $dbpass = '';
 ...
И добавив в скрипт, после определения переменной $q, строку указывающую кодовую страницу для генерируемого html-документа:
 ...
my $q = new CGI;
$q->charset('KOI8-R'); # по умолчанию используется iso-8859-1
 ...
В данный момент проект не развивается, т.к. автор сделал то, что хотел, а желающих продолжить и развивать проект не нашлось. А жаль.

2.5 Установка J2RE 1.4 и JaLingo.

Всё просто как "кусок хозяйственного мыла". Нам нужны: а -- пакет J2RE и б -- клиент для доступа к словарям, JaLingo. Пакеты для J2RE можно взять здесь. Я воспользовался Sisyphus (репозиторий пакетов ALT Linux) и взял там два пакета: j2se1.4-sun и j2se1.4-sun-fonts. Их установка потребовала наличия в системе ещё одного пакета -- java-common.

Теперь скачиваем программу-клиент с с домашней страницы проекта. На момент написания статьи это была альфа-версия 0.2. Запускаем (см. скриншот):

[alex@p4 bin]$ java -jar jalingo-0.2a.jar

Интерфейс напоминает старый добрый Lingvo. Работает только прямой поиск. Но есть возможность поиска в процессе ввода слова (так, как это реализовано в Lingvo). Интересен тем, что может подключать словари PtkDic через MySQL-соединение и/или файловый словарь Мюллера или любой другой с таким же форматом (см. скриншот). Программа показывает транскрипцию для словаря Мюллера (если она там есть), форматирует статью, делает подсветку служебных слов и сокращений. Статьи из MySQL-словарей отображаются как есть, без форматирования. Неоспоримое преимущество -- кроссплатформенность. Хотя ещё и сыроват, поэтому, если вас заинтересует этот клиент и вы найдёте в его работе ошибки, не забудьте сообщить о них автору программы, Александру Шишко.

2.6 Установка и настройка Apache с поддержкой PHP и phpMyLingvo.

"Апачи вышли на тропу войны!"

Итак, нам осталась пара пустяков -- установить и настроить Apache. Те, кто этого раньше никогда не делал -- не комплексуйте! Всё очень просто. Нам нужно установить несколько пакетов -- apache, mod_php, php-mysql. Все остальные пакеты (apache-common, php-common, ...) по необходимости. Почему я так невразумительно говорю? Наверное, потому что я "обленился" и переложил работу по отслеживанию зависимостей между пакетами на APT. Хотя APT -- это детище Debian, но он неплохо себя чувствует на дистрибутивах ALT Linux и его несложно настроить под RedHat (думаю, и под Mandrake тоже, как и под любой другой rpm-based дистрибутив).

Установили? Теперь проверьте запущен он или нет, и настроен ли так, чтобы автоматически запускаться после загрузки. Вам нужно повторить все те же операции, что и с mysqld (см. п. 2.1), только в нашем случае название сервиса httpd. Проверьте конфигурационный файл /etc/httpd/conf/httpd.conf -- в конце файла должна быть строка:

Include conf/addon-modules/mod_php4.conf

Эта строка подключает модуль php к apache.

Теперь отправляемся на домашнюю страницу phpMyLingvo и скачиваем оттуда последний вариант программы. Распаковываем его и копируем в /var/www/html/phpMyLingvo (/var/www/html -- это корень, если так можно выразиться, "файловой системы" документов, хранящихся на веб-сервере; см. опцию DocumentRoot в файле /etc/httpd/conf/httpd.conf).

Отредактируйте файл config.php пакета phpMyLingvo -- замените строку:

mysql_connect("localhost", "root", "") or die("MySQL connection error: ".mysql_error());

на

mysql_connect("localhost", "ptkdic_usr", "") or die("MySQL connection error: ".mysql_error());

(Обратите внимание, что здесь в качестве хоста я указал localhost. Сделано это по той причине, что к MySQL будет обращаться php-скрипт, размещённый локально, даже если вы планируете открыть доступ к словарям в сети. В этом случае, за предоставление такого доступа будет отвечать apache.)

А теперь запустите веб-браузер и наберите в нём http://localhost/phpMyLingvo/ или http://имя_хоста/phpMyLingvo/ (если пытаетесь подключиться к веб-серверу с другого компьютера.)

У меня получилось (см. скриншот). А у вас?

Если хотите попробовать в действии phpMyLingvo, не устанавливая его у себя, то вам сюда.

Несколько слов о достоинствах phpMyLingvo (слово автору программы, Сергею Галину):

Недостатки, недоделки и известные ошибки:

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

3. Заключение (субъективное).

Несколько слов о том, что и в каком случае удобно использовать. Как универсальное средство могу рекомендовать phpMyLingvo. Почему? Работая в веб-браузере, вам не нужно задумываться о том какая именно операционная система стоит на том конце, откуда приходит html-код. Вы просто набираете адрес и начинаете веб-сёрфинг. Поэтому, если у вас гетерогенная сеть, то попробуйте именно phpMyLingvo. Кроме этого, веб-интерфейс имеет ещё одно неоспоримое преимущество -- вы можете работать в текстовом режиме (если у вас, конечно, есть соответствующий веб-браузер -- links, lynx и т.п.).

Если вы не привыкли работать с веб-браузерами, тогда в вашем распоряжении GtkDic/PtkDic или JaLingo. По функциональным возможностям первый обгоняет второго. Это неоспоримо. Но если вам хочется поработать с симпатишым Lingvo-подобным клиентом, то JaLingo подходит тут идеально. Правда, в его случае есть один недостаток -- нужно выкачать из Интернета пакет j2re. А это иногда кусается.

В любом случае решайте сами. Хотите почувствовать себя гедонистом -- возьмите JaLingo. Нет времени настраивать на каждой рабочей станции доступ к словарям -- вам по пути с phpMyLingvo. Хотите использовать печать, обратный поиск и возможность добавлять новые статьи -- работайте с GtkDic/PtkDic.

Умф. Вот, в принципе, и всё. Надеюсь, что-то вам приглянется. Если так, то не забудьте написать о своих впечатлениях автору (или авторам) программы. Удачи и красивых переводов!

Благодарности.

Спасибо...


Copyright (c) June 2003, Alexander Kuprin


Команда переводчиков:
Александр Куприн, Андрей Киселев, Александр Михайлов, Александр Саввин, Владимир Меренков, Иван Песин, Игорь Яровинский, Павел Соколов, Роман Шумихин, Сергей Скороходов, Юрий Прушинский

Со всеми предложениями, идеями и комментариями обращайтесь к Александру Куприну (ru_classic at mail.ru). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.

Сайт рассылки: http://gazette.linux.ru.net
Эту статью можно взять здесь: http://gazette.linux.ru.net/rus/articles/dict_ptkdic_other.html
Архивы выпусков находятся здесь: http://gazette.linux.ru.net/archive/