Как перекодировать словарь Dict -а в словарь для StarDict -а ?

Изображение пользователя balamutick.

Как перекодировать словарь Dict -а в словарь для StarDict -а ?

Взял я русско-эсперантский словарь бокарёва, перевёл по инструкции из текстовых данных (Plain_text) в формат Dict -a

У меня получились следующие файлы:
bokarjovrueo-big.dict.dz
bokarjovrueo-big.index

но они не скармливаются StarDict -ту :-(

По идее должна быть простая консольная программа, которую запуская с нужным ключиком можно заставить превратить Dict -овские словари в StarDict -овские.

0
balamutick - 27 Май, 2009 - 15:52
Изображение пользователя balamutick.

Э-э-э про тему не забываем, хотя бы от отправьте на ЧДР (читай долбанное руководство) ;-\

0
Doomed - 27 Май, 2009 - 23:33
Изображение пользователя Doomed.

у меня вообще вышло поставить только StarDict =/...

0
Michael72 - 6 Февраль, 2011 - 17:38
Изображение пользователя Michael72.

Это не попытка написать подробную инструкцию по установке словаря Dict, а просто выписки по горячим следам из журнала терминала.
sudo apt-get install dictd
Теперь можно установить словари. Можно выбрать что-то из репозиториев. Посмотреть список доступных словарей можно так:

Я себе установил из этого списка пакет dict-freedict-eng-rus:
sudo apt-get install dict-freedict-eng-rus
Но по настоящему нужных мне словарей я в этом списке не нашёл. Случайно наткнулся в интернете на ресурс Сообщество бесплатных словарей Sdictionary. Оттуда я скачал себе несколько словарей в формате Sdictionary dictionary (.dct). Переконвертировать в формат DICT и StarDict помогла утилита dictconv.
  • Для DICT dictionary (.index)
    for i in /home/michael/Загрузки/Linux/*.dct; do sudo dictconv -o /usr/share/dictd/`basename ${i%.*}`.index $i; done
  • Для StarDict dictionary (.ifo)
    for i in /home/michael/Загрузки/Linux/*.dct; do dictconv -o ~/.stardict/dic/`basename ${i%.*}`.ifo $i; done

Правда, тут я наткнулся на одно принеприятное обстоятельство. После конвертации утилитой dictconv в полученных словарях некоторые словарные статьи содержат символы с некорректным кодом. Вычислить (определить) все эти бракованные словарные статьи - это отдельная тема. Но даже если удастся все их определить, отредактировать их с целью устранить брак - задача не из лёкгих. Возможно для этого поможет пакет dictfmt - утилита для редактирования файлов, используемых dictd сервером.
После установки нужных словарей:
sudo dictdconfig -w
Проверяем, что конфигурационный файл /var/lib/dictd/db.list действительно настроился должным образом:

На всякий случай проверим содержимое /etc/dictd/dictd.conf:
Обязательно должна быть строка allow localhost.
Проверим, установлен ли сам словарь Dict:
$ aptitude show dict | grep Состояние:
Состояние: установлен

Если словарь не установлен, тогда установим его:
sudo apt-get install dict
Теперь, перед тем как в терминале проверять работу словаря, потребуется перегрузить даемон dictd:
sudo /etc/init.d/dictd restart
После перегруза проверяем:
$ dict שלום
2 definitions found

From Hebrew-Russian [Hebrew-Russian]:

  שלום
  прощайте<br>мир<br>порядок<br>алло!<br>покой<br>прощайте!<br>прощание<br>спокойствие<br>привет!<br>спокойствие<br>мирный<br>всего!

From Hebrew-Russian [Hebrew-Russian]:

  שלום!
  прощайте!<br>прощание<br>до свидания!<br>привет!

Видим, что словарь не понимает html-тэги. Так что, лучше словари очистить от всех ненужных тэгов:
for i in /usr/share/dictd/*.dict; do sudo sed -i -e 's/<b>/   /g' -e 's/<\/b>/    /g' -e 's/<p>/  \n/g' -e 's/<br>/   \n/g' $i; done
После чего перегрузите даемон dictd, чтобы увидеть результат внесённых изменений:
sudo /etc/init.d/dictd restart
+1
DarkneSS - 6 Февраль, 2011 - 19:25
Изображение пользователя DarkneSS.

Можно попробовать goldendict - ест многие форматы словарей без конвертации.

0
balamutick - 6 Февраль, 2011 - 20:47
Изображение пользователя balamutick.

Можно и платный купить какой-нибудь и печатные использовать.

+2
Michael72 - 2 Июль, 2013 - 21:13
Изображение пользователя Michael72.

Данный ответ вполне относится автору данной темы, т.е. вместо конвертирования словаря в формат StarDict, просто перейти на использование приложения goldendict, которое по функциональным возможностям не уступает StarDict'у, таким образом оно может легко удовлетворить возникшие потребности у пользователя. Я же в свою очередь поддержал немного другую тему — как установить консольный словарь dict. У консольного приложения есть одна особенность, которую приложению goldendict будет не под силам реализовать. Вот небольшой пример, в каком случае использование консольного словаря dict может быть весьма полезным. Создадим файл /var/www/dict.php с php-кодом:

Теперь мы можем из html-приложения обращаться к словарю dict по ссылке: http://localhost/dict.php?dbname=russian-hebrew-2006-11-08_luna&word=lemma
где
  • russian-hebrew-2006-11-08_luna - кодовое имя словаря. Узнать список имён можно по команде dict -D
  • lemma - слово в словарной форме (лемма)

Это даёт возможность создать html-приложение с использованием языка javascript, которое, к примеру, сможет получить исходные данные из текстового файла, для каждого слова в текстовом файле ввода выполнить запрос в словарь DICT и полученный результат обработать. Это очень коротко, — не вдаваясь в подробности и не рассматривая принципы работы html-кода, например как реализовать возможность обработки полученного результата, — с той лишь целью, чтобы наглядно продемонстрировать в каких случаях использование словаря dict может быть незаменимым. Подробнее смотрите мой блог здесь.
Что же касается словарей в формате Sdictionary dictionary (.dct), так тут опять таки без конвертирования не обойтись — goldendict не поддерживает этот формат.

Примечание

Имеет место для версии 1.0.2~git20110906-1.1. Проект очень быстро развивается. В настоящее время данная поддержка уже реализована. Используйте 1.0.2~git20130620-1 версию, которая это умеет.

Жаль, что утилита dictconv не справляется со своей задачей как должно. По всей видимости, тут надо сперва установить приложение ptksdict, затем с помощью утилиты /opt/sdict/bin/sdict-tools.plx получить исходники словарей Sdictionary (.sdct), а затем уже писать свою собственную утилиту, которая будет конвертировать полученные исходники в какой-либо другой формат, доступный для обработки уже известными утилитами.
Например, для утилиты dictfmt создайте текстовый файл в следующем формате: каждая словарная статья начинается со знака <A NAME="Txxxxxxx">, где "xxxxxxx" - 7 цифр. Затем идет с новой строки слово, заключённое в тэг <B></B>, при этом в конце слова должен быть знак минус. Далее идут значения этого слова, каждое новое значение с новой строки.
Пример:
<A NAME="T0000001">
<B>Слово1 - </B>
Значение слова 1
Значение слова 2
Значение слова 3
<A NAME="T0000002">
<B>Слово2 - </B>
Значение слова 1
Значение слова 2
Значение слова 3
<A NAME="T0000003">
<B>Слово3 - </B>
Значение слова 1
Значение слова 2
Значение слова 3

Теперь ваш текстовый файл в данном формате можно конвертировать: для этого воспользуйтесь командой подобной этой
USERDATA_PATH="/home/michael/Документы/Словари"; cd /usr/share/dictd; cat $USERDATA_PATH/Hebrew-Russian.html | sudo dictfmt -e -u 'http://sdict.com/ru/view.php?file=Hebrew-Russian.dct' -s "Hebrew-Russian Dictionary" --utf8 --columns 0 Hebrew-Russian; sudo dictdconfig -w; sudo /etc/init.d/dictd restart
где /home/michael/Документы/Словари/Hebrew-Russian.html — ваш текстовый файл, "Hebrew-Russian Dictionary" — заголовок, Hebrew-Russian — кодовое имя. Ключ -e указывает на то, что текстовый файл именно в таком формате, который указан в вышеприведённом примере. Возможно, что другие форматы, с которыми утилита dictfmt может работать, намного проще, но для меня данный формат оказался наиболее понятным из всех, что я увидел в мануале (имеется наглядный образец). Утилиту, которая конвертирует исходники словарей Sdictionary (.sdct) в данный текстовый формат (условно пусть будет — в формате HTML), написал на языке JavaScript, но воздержусь от того, чтобы здесь выкладывать её код. Потому что в ней слишком много лишнего — в код включены сразу несколько утилит, позволяющие преобразовывать тексты из одного формата в другой.
В последнее время приходилось создавать массу тематических словарей в формате DICT. Для этого потребовалось сперва подготовить несколько десятков текстовых файлов в формате, который я условно называю HTML, а затем все эти файлы поочерёдно конвертировать утилитой dictfmt в формат DICT. Кроме того, чтобы произвести данную конвертацию, было также желание сразу же каждый созданный модуль заархивировать для Интернета. Чтобы облегчить свою работу по выполнению поставленной задачи, был создан следующий скрипт:

Этот скрипт оставлю без комментария. Может быть кому-то тоже будет полезный, поэтому решил выложить.
0
Ockonal - 27 Май, 2009 - 23:55
Изображение пользователя Ockonal.

rtfm =)
-------------
А если серьезно, то завтра попробую.

+1
Michael72 - 24 Июль, 2010 - 01:55
Изображение пользователя Michael72.

sudo apt-get install stardict-tools
Пакет устанавливается в каталог /usr/lib/stardict-tools
Смотрим все доступные утилиты:
ls /usr/lib/stardict-tools
В нашем случае нам нужна dictd2dic
$ /usr/lib/stardict-tools/dictd2dic
please type this:
./dictd2dic eng-fra

Я думаю, всё очень коротко и понятно. Для вышеупомянутого словаря нам нужно ввести команду:
/usr/lib/stardict-tools/dictd2dic bokarjovrueo-big

0
balamutick - 24 Июль, 2010 - 15:06
Изображение пользователя balamutick.

Спасибо за подсказку, пока не до того, но как-нибудь займусь.

Реально на куче ресурсов никто не знал как сделать.

P.S. волнистые - рулят.

+1
Michael72 - 15 Июль, 2013 - 15:28
Изображение пользователя Michael72.

К сожалению оказалось, что не всё так просто как это показалось на первый взгляд. Во-первых утилита dictd2dic не анализирует содержимое конфигурационного файла /var/lib/dictd/db.list, как этого хотелось бы, и для того, чтобы конвертация словаря произошла, необходимо, чтобы каталог, в котором этот словарь находится, был обязательно текущим. Но и при этом не всё гладко проходит — не создаётся специальный ".ifo" файл (информацию о формате данного файла можно найти здесь), без которого StarDict "не видит" полученный словарь. Пришлось малость посидеть и создать небольшой скрипт, который делает процесс конвертации формата более удобным.
Кроме этого удалось найти ещё одну утилиту, позволяющую преобразовывать словари из одного формата в другой, в том числе из DICT в StarDict. Эта утилита называется makedict. Итак, есть два способа произвести данную конвертацию форматов. Первый способ удобен в том случае, когда в системе установлен и запущен сервер dictd. Обратите внимание, что результаты конвертации у обоих программ отличаются. В первой программе (dictd2dic) получается словарь с чистым текстом внутри (PlainText), во второй (makedict) — в словаре лежит html, makedict расставляет в нём тэги <k></k>. Кроме этого содержимое ".ifo" файла также будет отличаться.

Конвертировать словарь из DICT в StarDict, используя утилиту dictd2dic из пакета stardict-tools
Создайте скрипт:

Потребуется небольшая настройка скрипта. Внутри скрипта необходимо указать пароль администратора и каталог в котором находятся словари StarDict (в скрипте уже указан по умолчанию каталог "/usr/share/stardict/dic", но возможно указать другой каталог, где StarDict ищет свои словари — "~/.stardict/dic"). Скрипт не требует никаких параметров, после запуска появляется меню со списком словарей, которые установлены в DICT.
Пример
michael@michael-desktop:~$ dictd2dic

1) fd-eng-rus    4) Russian-Hebrew_Phrase_book
2) german_rus2    5) Hebrew-Russian
3) russian-hebrew-2006-11-08_luna  6) Russian-Hebrew
Выберите словарь:
В данном примере вышеприведённый код сохранён в файле dictd2dic и помещён в один из каталогов, перечисленных в переменной окружения PATH.

Конвертировать словарь из DICT в StarDict, используя утилиту makedict

Загрузка и сборка из исходников makedict проекта XDXF
Для установки этой программы сделайте следующее:
1 Запустите Терминал. После запуска Терминала введите команду для загрузки исходников из репозитория makedict:
svn co https://xdxf.svn.sourceforge.net/svnroot/xdxf/trunk/ makedict2 Перейдите в каталог, куда вы загрузили исходники программы (далее этот каталог будем называть $SRC_DIR):
cd makedict3 Пропишите путь к текущему каталогу в переменной окружения SRC_DIR:
export SRC_DIR=$PWDСоздайте какой-нибудь подкаталог, который будет содержать собранный пакет, и перейдите в него. Например:
mkdir Bin && cd Bin4 Проверьте, установлен ли у вас пакет libgtk2.0-dev, если нет — установите.

5 Для сборки программы выполните команду:
cmake $SRC_DIR && make && sudo make installгде $SRC_DIR — каталог, куда вы загрузили исходники программы

Основы работы с makedict
После того как установка пройдёт успешно начните работу с ознакомления всех возможных ключей программы:
makedict --helpХотя обязательным ключом является только -o, рекомендую всё же использовать все три ключа: -o, -i и -d. Например, чтобы конвертировать в формат StarDict все имеющиеся словари в формате Sdictionary, вы можете выполнить команду:
for i in /opt/sdict/share/dicts/*.dct; do makedict -o stardict -i sdict -d /home/michael/Документы/Словари/ $i; doneКаждый полученный путём конвертации словарь, состоящий из трёх файлов, будет помещен в свой отдельный подкаталог каталога /home/michael/Документы/Словари/ (указан в качестве параметра к ключу -d).
Итак, для конвертации словаря bokarjovrueo-big можно выполнить команду: makedict -o stardict -i dictd -d ~/Документы/Словари/ bokarjovrueo-big.indexВместо bokarjovrueo-big.index впишите полный маршрут и его имя, если он находится не в текущем каталоге.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры