Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.




В начале было слово...\" Часть 1. PtkDic и компания.

Автор : Александр Куприн

1. Введение.

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

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

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

  • централизованное хранение данных
  • большую часть работы по выборке, сортировке, индексированию и т.п. операциях берёт на себя sql-сервер
  • возможность создания собственного интерфейса на любом языке программирования, имеющем библиотеки доступа к MySQL
  • общедоступность MySQL и нетребовательность к машинным ресурсам

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

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

  • PtkDic -- написана на Perl/Tk. Теоретически должна работать на любой платформе, поддерживающей Perl/Tk.
  • GtkDic -- написана на GTK+ 1.2.x (к сожалению, версии под GTK+ 2.x нет, хотя по утверждению автора она должна собираться под GTK+ 2.x)
  • JaLingo -- есть два варианта программы, на Java и на Qt 3.0 (автором была выпущена только одна версия этой программы, после этого он прекратил развитие данной ветви и переключился на версию под Java, которая является кроссплатформенной).
  • phpMyLingvo -- веб-интерфейс к словарям, написан на PHP, соответственно доступ к базе словарей можно получить с любой машины, где есть веб-браузер (вне зависимости от типа операционной системы).

На текущий момент, в формате 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 и настроить всё через него. Для адептов командной строки у меня есть небольшой набор скриптов для предварительной настройки и установки словарей:

  • var_mysql_ptkdic.sh -- скрипт, где лежат все переменные, которые используются в скриптах настройки MySQL и установки словарей. Не забудьте пароли и параметры сети поменять под себя.
  • set_mysql_ptkdic.sh -- скрипт, в котором настраивается пароль root, создаётся база ptkdic, пользователи ptkdic_adm и ptkdic_usr и назначаются им права на доступ к базе ptkdic.
  • install_dic.sh -- скрипт, устанавливающий в БД ptkdic словарь, указанный в строке параметров.

Если вы только что установили 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 (слово автору программы, Сергею Галину):

  • Может быть установлена на компьютер с любой операционной системой с MySQL и веб-сервером с поддержкой PHP.
  • Одна инсталляция phpMyLingvo может обслуживать целую сеть компьютеров. При этом нет необходимости устанавливать какие-либо программы на клиентские машины, и не нужно открывать внешний доступ к MySQL-серверу.
  • Поддерживается ввод запросов и вывод статей кодировкой UNICODE (в виде HTML entities), что обеспечивает одновременное отображение символов кириллицы и западноевропейских алфавитов.
  • Возможен поиск по нескольким словарям.
  • Полнотекстовый поиск - позволяет находить слова, которые упомянуты в словаре, но не вынесены в заголовок, или использовать словарь "навыворот" - например, переводить с русского на немецкий немецко-русским словарем!.
  • Внешний вид может быть легко модифицирован изменением стилевого файла (CSS2), текста приветствия.
  • Настройки вынесены в отдельный файл. Вам не надо будет полностью переписывать их при обновлении программы до более новой версии.
  • Широкий выбор настроек для ограничения нагрузки на сервер (ограничения по количеству словарей для одновременного поиска, по количеству выводимых статей, сжатие вывода с помощью Zlib).
  • Пользователям не нужно запускать лишнюю программу для работы со словарем - достаточно открыть новое окно или вкладку браузера.
  • Словарь, установленный на сервере, может использоваться слабыми рабочими станциями - с помощью облегченных браузеров, даже из текстовой консоли с помощью достаточно новой версии Links.

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

  • Нужно иметь/установить Web-сервер, PHP и MySQL.
  • Многие люди предпочитают обычный GUI-интерфейс.
  • Формат словарей, позаимствованный у PtkDic, не позволяет создавать словари для азиатских кодировок - используется смесь ISO-8859-1 и KOI8-R, а нужен Юникод. Эта проблема может быть решена в будущих версиях (это проблема всех словарей, описанных здесь, а не только phpMyLingvo).
  • Пока что нет возможности редактирования словарных статей.

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

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

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

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

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

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

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

Спасибо...

  • Алексею Семёнову -- за комментарии, советы и терпение.
  • Александру Шишко -- за комментарии и оценку моего чувства юмора. ;-)
  • Сергею Галину -- за идеи и комментарии.

Обсудить данную тему на нашем форуме "Все о Linux"