Список форумов AlReader
Домой/Home
AlReader
AlReader - программа для чтения электронных текстов на КПК и Смартфонах
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Инструкция по конвертации словарей Lingvo в словари Dict
На страницу 1, 2, 3, 4, 5, 6  След.
 
Начать новую тему   Ответить на тему    Список форумов AlReader -> Dict
Предыдущая тема :: Следующая тема  
Автор Сообщение
PhoeniX
житель


Зарегистрирован: 09.12.2006
Сообщения: 20

СообщениеДобавлено: Сб Дек 16, 2006 4:14 pm    Заголовок сообщения: Инструкция по конвертации словарей Lingvo в словари Dict Ответить с цитатой

Эта инструкция будет дорабатываться и дополняться в процессе разработки одного из инструментов, обсуждаемого вот здесь.
Итак, что мы будем делать. Мы будем преобразовывать словари, идущие в комплекте с Lingvo в словари для Dict.
0. Ставим Lingvo. Все словари, которые вы хотите сконвертировать (файлы с расширением lsd в директории Lingvo), можете положить в отдельную папку, например 1.lsd.
1. Теперь нам надо перевести их из бинарного вида в текстовый исходник. Сделать это можно с помощью Dslcomp.exe, лежащего всё там же, в папке с Lingvo, задействовав его недокументированные возможности. Прямое назначение этого инструмента - преобразовывать текстовые исходники словарей (dsl) в бинарные словари лингвы (lsd), но после небольшого хака мы будем использовать его по обратному назначению Wink Для этого нам понадобится шестнадцатеричный редактор (далее HEX). Вы можете использовать любой доступный, я использовал vim (если вы тоже его используете, обратите внимание на опции Перевести в/из HEX).
Цитата:
Берем Dslcomp.exe от девятки или десятки ME (ER не проверял).
Правим, для 9.0
000482BA: 01 00
Для 10.0
0005A9DD: 01 00
Для 11.0 (ER)
0004E8E1: 84 32

Запускаем, выбираем LSD, и ставим переключатель в "DSL (Исходные тексты)".
Словари от семерки и восьмерки вроде берут обе версии, а вот 9 и 10 - только своя

На примере десятки - открываем Dslcomp.exe в HEX'e, идём по адресу (offset) 0005A9DD, находим в строке число 01 и заменяем на 00. Сохраняем. Теперь открываем любой lsd в только что переделанном Dslcomp.exe и сохраняем как dsl. Это и есть текстовый исходник словаря лингвы.
2. Но он в совершенно чуждой нам кодировке. Открываем его в блокноте, и сохраняем как ASCII (будет ругаться, ну и пусть ругается, мы знаем, что делаем). Получаем тот же dsl, но уже нормально читаемый.
3. Берём Qdsl2zdt из следующего поста, любезно собранную и доработанную coldfire. Запускается она из коммандной строки, примерно так:
Код:
Qdsl2zdt.exe UniversalIR.dsl UniversalIR.txt

На выходе имеем файл в виде текстового исходника словаря Dict.
4. Теперь всё готово, чтобы преобразовать текст в словарь. Идём сюда, забираем makezd и используем по назначению:
Код:
makezd.exe UniversalIR.txt UniversalIR.zd

Словарь готов, заливаем в покет и пользуемся, потом очень благодарим автора Dict Very Happy Потому что он молодец.

update:

Добавление озвучки:

1) Для начала нужно распотрошить лингвовский соундпак SoundE.dat на отдельные wav файлы
для этого нужна прога Lingvo_SoundExtractor http://ifolder.ru/2286308

2) Жмем их в ogg любой удобной программой, ~32кбит/сек нормально получится.
Харвестр порекомендовал CDex 1.51 с замененными vorbis.dll vorbisenc.dll, ogg.dll из последей беты 1.70 beta 2 (которая сама по себе тормозит и глючит, там бешенная утечка памяти)

3) Жмем с помощью makezpak в один файл полученные ogg

4) в конфиге qdsl2zdt добавляем правило
["\\[s\\](.*)\\[\\/s\\]", "<wav>\\1</wav>", "regexp", true],

5) qdsl2zdt конвертим LingvoUniversalER.dsl (переведенный предварительно в utf-8 )

6) ну и makezd

15 273 озвученных слова
название zpak должно быть такое же как и у словаря
версия Dict не меньше 1.6 beta 10.

PS.
Вообще говоря если поковырять SoundE.dat в hex-редакторе, то можно понять что там озвучка уже в ogg, но похоже одним большим файлом со ссылками (время звучания?? хз, не разбирался) на каждое слово. Эту озвучку можно выципить hex-редактором (ищем первый тег OggS и копируем до конца файла в новый файл), получается один большой ogg на 4 с лишним часа, который спокойно играется любым плеером.
Пытливые умы могут поковырять дальше, на предмет можно ли получить отдельные ogg на каждое слово, без Lingvo_SoundExtractor и потери качества от перекодирования в wav и обратно в ogg.

PS.ps.
Есть озвучка из свободных источников, от проекта StarDict там озвучено больше слов и дикторы получше говорят, качество звучания неплохое не смотря на 11КГц wav. Я ее подцепил к Англо-русско-английскому словарю общей лексики (dict.pocketz.ru).
Кто хочет, может объединить эту озвучку с лингвовской.


Последний раз редактировалось: PhoeniX (Вс Дек 17, 2006 11:19 am), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
coldfire
автор Dict


Зарегистрирован: 18.04.2006
Сообщения: 390

СообщениеДобавлено: Вс Дек 17, 2006 9:07 am    Заголовок сообщения: Ответить с цитатой

Qdsl2zdt.exe брать тут http://free-dict.narod.ru/qdsl2zdt.zip, там исходник и исполняемый файл, программу адаптировал к Win (изначально для линукса была), + добавил поддержку utf-8.

поправка к шагу 2 инструкции PhoeniX'а, сохранять dsl можно в utf-8.

Попробовал сконвертировать LingvoUniversalER.lsd все удачно получилось.

после декомпиляции LingvoUniversalER.lsd в LingvoUniversalER.dsl, сохранил его в кодировке utf-8 как LingvoUniversalER_utf8.dsl (это можно сделать в блокноте или notepad++).

далее:
Код:

qdsl2zdt.exe LingvoUniversalER_utf8.dsl LingvoUniversalER.txt

makezd.exe -cp1:65001 -cp2:65001 -lcid:9 LingvoUniversalER.txt LingvoUniversalER.zd


транскрипция к сожалению отображается неверно, видимо там не стандартные юникод символы.

Для тех, кто хочет сам скомпилировать и доработать Qdsl2zdt, программа написана с использованием Qt, для компиляции под MS VC++ нужно сделать следующее:
1) скачать Qt/Windows Open Source Edition http://www.trolltech.com/developer/downloads/qt/windows
2) пропатчить и настроить библиотеку по инструкции http://qtnode.net/wiki/Qt4_with_Visual_Studio
3) там же указано как создать проект с помощью qmake

Спасибо PhoeniX!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Desmond
Иконописец!


Зарегистрирован: 17.04.2006
Сообщения: 49
Откуда: Черкассы, Украина

СообщениеДобавлено: Пн Дек 18, 2006 7:44 am    Заголовок сообщения: Ответить с цитатой

Ребята, вы молодцы!

А по поводу транскрипции, нужно попробовать сделать обычным поиском-заменой. Там regexp прикрутить можно? Символов транскрипции не так уж много, чтобы не составить таблицу соответствий.
_________________
Imate Jam, 1.13 bigstorage
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Antex
Наблюдатель


Зарегистрирован: 26.05.2006
Сообщения: 212
Откуда: Pietari

СообщениеДобавлено: Ср Дек 20, 2006 1:43 am    Заголовок сообщения: Ответить с цитатой

Браво!
Вы действительно отлично поработали.

А насчет транскрипции...
Возможно, будет иметь смысл убрать ее совсем.
Если не удастся "починить".
Чтобы не раздувать излишне исходник.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
PhoeniX
житель


Зарегистрирован: 09.12.2006
Сообщения: 20

СообщениеДобавлено: Ср Дек 20, 2006 5:22 pm    Заголовок сообщения: Ответить с цитатой

Спасибо.
Искать в юникодной таблице, состоящей из 65535 символов, нужную закорючку, на которую нужно заменить тот или иной символ из транскрипции... Проще вырезать.
Ещё одна мысль в голову пришла... Coldfire , насколько полно поддерживается в словаре HTML? Проглотит ли он "HTML Entities"? Если да, то можно заменять и на них. Вроде на транскрипцию их должно хватить, и их не так много. (UPD: проверил - проглатывает на ура)
Так что вот для желающих заняться работёнка. Открываем словарь в лингве, соответствующий dsl в редакторе (удобен для этого опять же Vim, есть по винду. Если навести на непонятный символ курсор, и нажать последовательно кнопочки ga - покажет код символа в 3х системах счисления) - и составляем таблицу соответствия (код символа в восмиричной [Octal] системе - нужный HTML код символа). А потом шлём её мне, Coldfire или постим сюда. А мы добавим пару вызовов QString::replace() в код и транскрипция будет пофиксена. И будет всем щастье.
_________________
Мой техноблог
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
coldfire
автор Dict


Зарегистрирован: 18.04.2006
Сообщения: 390

СообщениеДобавлено: Чт Дек 21, 2006 5:52 am    Заголовок сообщения: Ответить с цитатой

PhoeniX

Dict отображает статью через PocketIE, соответственно все что он умеет по части отображения HTML, Dic отобразит. Исключение картинки, объекты, которые нужно обрабатывать спец. образом.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
PhoeniX
житель


Зарегистрирован: 09.12.2006
Сообщения: 20

СообщениеДобавлено: Чт Дек 21, 2006 2:39 pm    Заголовок сообщения: Ответить с цитатой

coldfire Прекрасное решение. Как в KDE - куча встраиваемых служб и компонентов :)
Ну вот, кто хочет транскрипции (к слову - в итальянских словарях её нет практически, так что она мне не к чему) - составляет таблицу соответствия. Восьмиричный код символа - хтмл сущность.
_________________
Мой техноблог
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alan
Постоялец


Зарегистрирован: 16.04.2006
Сообщения: 1391
Откуда: Odessa

СообщениеДобавлено: Чт Дек 21, 2006 3:14 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Восьмиричный код символа - хтмл сущность


что-то я не могу понять, почему восьмиричній??? Десятичный, шестнадцатиричный - понятно, но причем тут восьмиричка?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
PhoeniX
житель


Зарегистрирован: 09.12.2006
Сообщения: 20

СообщениеДобавлено: Чт Дек 21, 2006 4:31 pm    Заголовок сообщения: Ответить с цитатой

в си они таким образом в строковых переменных записываются. Если мне память не отшибло. По крайней мере в уже выпущенной версии программы они именно так работают (например удаляются лишние переводы каретки и прочие ненужные спецсимволы).
UPD: Туплю... можно и шестнадцатеричные. Щас вот тут посмотрел (чуть выше середины страницы).
_________________
Мой техноблог
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alan
Постоялец


Зарегистрирован: 16.04.2006
Сообщения: 1391
Откуда: Odessa

СообщениеДобавлено: Чт Дек 21, 2006 8:08 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
в си они таким образом в строковых переменных записываются


И что даст такая запись в восьмиричке для хтмл?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
PhoeniX
житель


Зарегистрирован: 09.12.2006
Сообщения: 20

СообщениеДобавлено: Чт Дек 21, 2006 8:12 pm    Заголовок сообщения: Ответить с цитатой

Всё по ссылке. Раздел "2.4.3 Символьные константы"
_________________
Мой техноблог
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BigND07
житель


Зарегистрирован: 28.12.2006
Сообщения: 17

СообщениеДобавлено: Чт Дек 28, 2006 8:08 am    Заголовок сообщения: Лингво 12 Ответить с цитатой

Господа, есть большое желание сконвертировать все ER и RE словари из Лингво 12. Для начала: просветите, как запатчить dslcomp.exe от 12 версии.
И второе: так и не понял для исправления транскрипции есть таблица соответствия или ее еще надо делать?
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
PhoeniX
житель


Зарегистрирован: 09.12.2006
Сообщения: 20

СообщениеДобавлено: Чт Дек 28, 2006 5:19 pm    Заголовок сообщения: Ответить с цитатой

2 BigND07
Судя по всему, умельцы за 12 лингву ещё не взялись, гугль молчит. Могу выложить от десятки, как пропатчить - написано. Стучите в личку.
Таблицы нет.
2 Alan
Видимо, не до конца ясно изложил мысль. Вот пример того, что хотелось бы иметь (коды взяты от фонаря):
Код:
x23 &Sigma;
x24 &Tau;

и так далее, код и соответствующая ему HTML сущность.
_________________
Мой техноблог
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Antex
Наблюдатель


Зарегистрирован: 26.05.2006
Сообщения: 212
Откуда: Pietari

СообщениеДобавлено: Чт Дек 28, 2006 9:06 pm    Заголовок сообщения: Ответить с цитатой

BigND07
12-ая версия лингвы пашет на словарях от 11-ой (и т.д.), т.ч. патчить можно 11-ю версию и голову не забивать. Словари от этого новее не станут.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BigND07
житель


Зарегистрирован: 28.12.2006
Сообщения: 17

СообщениеДобавлено: Пт Дек 29, 2006 6:56 am    Заголовок сообщения: Ответить с цитатой

Antex писал(а):
BigND07
12-ая версия лингвы пашет на словарях от 11-ой (и т.д.), т.ч. патчить можно 11-ю версию и голову не забивать. Словари от этого новее не станут.

Еще раз:
1. У меня нет 11-й версии, есть 12-я непатченная.
2. Dslcomp.exe от 12-й скорее всего словари от 11-й будет декомпилировать (хотя не факт), но нужно декомпилировать словари от 12-й.
3. Судя по рекламе в 12-й версии многие словари обновились, так что смысл есть заморачиваться.
Так что вопрос остается как запатчить декомпайлер от 12-й?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов AlReader -> Dict Часовой пояс: GMT
На страницу 1, 2, 3, 4, 5, 6  След.
Страница 1 из 6

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB