Перенос словарей из ABBYY Lingvo в Stardict
18:55
Свершилось!!!
Наконец-то можно полностью отказаться от работы с ABBYY Lingvo в эмуляторе под Linux’ом и полностью перейти на использование Stardict со словарями из Lingvo.
Пролог
Почти ровно через год после написания сей статьи в мои руки попала 12-я лингва.
Всё написанное ниже применимо и к ней. Словари так же без проблем декомпилируются, а потом конвертируются в формат стардикта. Так что дерзайте, ищите в Сети нужные для замены байтики в dslcomp.exe и вперёд!
Вступление
После того, как я узнал о том, что словари Lingvo можно декомпилировать в исходные тексты, я загорелся желанием написать конвертер для преобразования их в формат StarDict‘а. У меня всё не было времени взяться за это. На эти майские праздники время таки появилось. Я наконец-то закончил один из своих больший проектов и решил взяться за конвертер вплотную. Ещё больше меня подстёгивало то, что в мои руки наконец-то попал ABBYY Lingvo 11 Multilingual, в котором были украинские(!) словари. Это было как раз то, о чём я так слёзно просил по телефону у девушки из АБИ, любезно позвонившей мне аж из самой Москвы, дабы провести что-то вроде опроса или анкетирования. И хотя один так же немаленький проект по переводу на украинский я уже закончил, не прибегая к услугам Lingvo, возможность использовать эти словари в будущем меня ох как подстёгивала.
Однако, каково же было моё удивление, когда я узнал о том, что оказывается конвертер dsl2stardict уже существует! Итого, вместо того, чтобы неопределённо долго писать свой собственный конвертер, я взял уже готовый и, практически ничего не меняя в нём, получил нужный результат.
Согласитесь, это более, чем приятно :)
Я понимаю, что нарушу авторские права компании АБИ, если выложу конвертированные словари для общего доступа, поэтому не ожидайте найти их здесь. Однако из-за того, что обещанные симпатишные девушки из киевского офиса украинского подразделения компании АБИ так и не заглянули ко мне в гости :), я немного обиделся и решил написать подробную инструкцию о том, как можно самостоятельно добиться нормальной работы StarDict со словарами из ABBYY Lingvo .
Итак, равно как и в предыдущих двух статьях, для начала я перечислю список необходимых инструментов:
- словари Lingvo в формате .lsd
- компилятор словарей DslComp.exe с необходимыми библиотеками
(Awl.dll, FineObj.dll, LangInfoUnicode.dll, Lingvo0.dll, msvcr71.dll) - эмулятор wine
- makedict в исходных текстах + софт, необходимый для его сборки
- собственно, сам stardict с утилитой dictzip
Первые два пункта есть на оригинальных компакт-дисках или их образах (версия 11ML вышла на двух CD и ниже будет описана работа именно с ней).
Общая схема довольно проста:
- конвертируем lsd в dsl (dslcomp.exe)
- собираем makedict (make)
- преобразовываем словари из формата dsl в формат stardict (makedict)
- пользуемся :)
В каждом из пунктов есть свою нюансы, о которых будет рассказано ниже.
1. Для начала нам понадобится пропатчить екзешник. Собственно, это и есть нарушение копирайтов. Подробности о том, как это сделать в линухе, смотрите в первой статье.
Вот байты, которые нужно исправить (DslComp.exe ML 11.0.0.486, 1 115 072 байта):
0003C22F: 27->68
0003C298: CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC->83C6048D4424145650E82B68FCFFEBA7
00050881: 84->32
00053CE2: 01->00
Запускаем компилятор wine DslComp.exe и преобразовываем нужные нам словари в формат DSL.
Теперь нам понадобится немного подправить полученные исходники некоторых словарей, удалив в них ссылки на wav-файлы. Это нужно выполнить по той причине, что из-за отстутствия оных stardict показывает пустые карточки там, где есть звук. Лично мне «аудиосопровождение» абсолютно не нужно, поэтому я смело удалил эти ссылки.
Выполняется данная операция серией следущих простых команд (которые, слегка подшаманив, можно объединить в универсальный скрипт):
iconv -f utf16 -t utf8 LingvoUniversalER.dsl | \ sed -r s/\\[s\].+\.wav\\[\\/s\]// >LingvoUniversalER.dsl.utf8 iconv -f utf8 -t utf16 LingvoUniversalER.dsl.utf8 > LingvoUniversalER.dsl rm -f LingvoUniversalER.dsl.utf8
На подбирание нужного регулярного выражения я потратил пару часов.
Если у iconv‘а возникнут проблемы с некоторыми символами, воспользуйтесь опцией -c.
Следует отметить, что существует возможность выдрать wav’ы из файла со звуком, однако, как я уже говорил, лично мне это не надо было. К тому же понятия не имею о том, как stardict работает со звуком. Если есть у кого желание поковыряться – велкам. У меня же время ограничено.
2. С этим всё просто.
Идём на сайт XDXF – XML Dictionary Exchange Format, скачиваем makedict-0.2beta1.tar.bz2, распаковываем, configure, make и в подкаталоге src получаем исполняемый файл makedict.
Предварительно потребуется установить компилятор gcc-c++ со всеми необходимыми зависимостями.
3. Конвертируем словари командой типа:
makedict -i dsl -o stardict LingvoUniversalER.dsl
На выходе получаем три файла:
LingvoUniversalER.dict – собственно, словарь.
LingvoUniversalER.idx – индекс.
LingvoUniversalER.ifo – описание.
Словарь можно сжать утилитой dictzip, чтобы уменьшить размер словаря. В результате получим файл с расширением .dict.dz.
Индекс тоже можно сжать обычным gzip‘ом.
Файл описания можно подредактировать на своё усмотрение, предварительно ознакомившись с форматом словарей stardict, дабы не наломать дров. Хотя полученный файл можно сразу смело использовать.
Все три файла кладутся в каталог /usr/share/stardict/dic
4. Запускаем stardict и вперёд :)
Если он был запущен, перезапустите его.
Вот, что получилось у меня:
jack@home: ~ 13:42:08$ ls -lh /usr/share/stardict/dic итого 49M -rw-r--r-- 1 jack jack 821K Июн 29 03:28 AccountingER.dict.dz -rw-r--r-- 1 jack jack 64K Июн 29 03:26 AccountingER.idx.gz -rw-r--r-- 1 jack jack 368 Июн 29 03:28 AccountingER.ifo -rw-r--r-- 1 jack jack 4,5M Май 25 2006 AmericanaER.dict.dz -rw-r--r-- 1 jack jack 267K Май 25 2006 AmericanaER.idx.gz -rw-r--r-- 1 jack jack 334 Май 25 2006 AmericanaER.ifo -rw-r--r-- 1 jack jack 1,2M Май 7 2006 ComputersER.dict.dz -rw-r--r-- 1 jack jack 132K Май 7 2006 ComputersER.idx.gz -rw-r--r-- 1 jack jack 368 Май 7 2006 ComputersER.ifo -rw-r--r-- 1 jack jack 454K Авг 29 20:49 EngineeringRE.dict.dz -rw-r--r-- 1 jack jack 506K Авг 29 20:46 EngineeringRE.idx.gz -rw-r--r-- 1 jack jack 364 Авг 29 20:50 EngineeringRE.ifo -rw-r--r-- 1 jack jack 985K Июн 29 03:11 FinancialManagementER.dict.dz -rw-r--r-- 1 jack jack 78K Июн 29 02:59 FinancialManagementER.idx.gz -rw-r--r-- 1 jack jack 375 Июн 29 03:11 FinancialManagementER.ifo -rw-r--r-- 1 jack jack 1,4M Июн 29 03:15 FinancialMarketsER.dict.dz -rw-r--r-- 1 jack jack 125K Июн 29 03:00 FinancialMarketsER.idx.gz -rw-r--r-- 1 jack jack 373 Июн 29 03:15 FinancialMarketsER.ifo -rw-r--r-- 1 jack jack 922K Май 8 2006 LawER.dict.dz -rw-r--r-- 1 jack jack 281K Май 8 2006 LawER.idx.gz -rw-r--r-- 1 jack jack 331 Май 8 2006 LawER.ifo -rw-r--r-- 1 jack jack 1,4M Май 7 2006 LingvoComputerER.dict.dz -rw-r--r-- 1 jack jack 463K Май 7 2006 LingvoComputerER.idx.gz -rw-r--r-- 1 jack jack 388 Май 7 2006 LingvoComputerER.ifo -rw-r--r-- 1 jack jack 8,3M Май 23 2006 LingvoUniversalER.dict.dz -rw-r--r-- 1 jack jack 908K Май 23 2006 LingvoUniversalER.idx.gz -rw-r--r-- 1 jack jack 325 Май 7 2006 LingvoUniversalER.ifo -rw-r--r-- 1 jack jack 2,4M Май 8 2006 LingvoUniversalRE.dict.dz -rw-r--r-- 1 jack jack 850K Май 8 2006 LingvoUniversalRE.idx.gz -rw-r--r-- 1 jack jack 324 Май 8 2006 LingvoUniversalRE.ifo -rw-r--r-- 1 jack jack 1,5M Авг 29 20:48 ManagementER.dict.dz -rw-r--r-- 1 jack jack 101K Июн 29 03:00 ManagementER.idx.gz -rw-r--r-- 1 jack jack 379 Авг 30 13:16 ManagementER.ifo -rw-r--r-- 1 jack jack 1,3M Июн 29 03:07 MarketingER.dict.dz -rw-r--r-- 1 jack jack 123K Июн 29 03:00 MarketingER.idx.gz -rw-r--r-- 1 jack jack 371 Июн 29 03:06 MarketingER.ifo -rw-r--r-- 1 jack jack 1,3M Авг 30 13:22 OilAndGasER.dict.dz -rw-r--r-- 1 jack jack 501K Авг 30 13:20 OilAndGasER.idx.gz -rw-r--r-- 1 jack jack 329 Авг 30 13:21 OilAndGasER.ifo -rw-r--r-- 1 jack jack 292K Май 8 2006 PatentsER.dict.dz -rw-r--r-- 1 jack jack 120K Май 8 2006 PatentsER.idx.gz -rw-r--r-- 1 jack jack 330 Май 8 2006 PatentsER.ifo -rw-r--r-- 1 jack jack 4,2M Май 8 2006 PolytechnicalER.dict.dz -rw-r--r-- 1 jack jack 1,8M Май 8 2006 PolytechnicalER.idx.gz -rw-r--r-- 1 jack jack 344 Май 8 2006 PolytechnicalER.ifo -rw-r--r-- 1 jack jack 1,3M Авг 22 17:59 PolytechnicalRE.dict.dz -rw-r--r-- 1 jack jack 1,5M Авг 22 17:57 PolytechnicalRE.idx.gz -rw-r--r-- 1 jack jack 357 Авг 22 17:59 PolytechnicalRE.ifo -rw-r--r-- 1 jack jack 666K Май 8 2006 TelecomsER.dict.dz -rw-r--r-- 1 jack jack 328K Май 8 2006 TelecomsER.idx.gz -rw-r--r-- 1 jack jack 336 Май 8 2006 TelecomsER.ifo -rw-r--r-- 1 jack jack 1,7M Авг 31 13:21 UniversalEU.dict.dz -rw-r--r-- 1 jack jack 374K Авг 31 13:20 UniversalEU.idx.gz -rw-r--r-- 1 jack jack 320 Авг 31 00:21 UniversalEU.ifo -rw-r--r-- 1 jack jack 1,3M Авг 31 13:48 UniversalRU.dict.dz -rw-r--r-- 1 jack jack 495K Авг 31 13:47 UniversalRU.idx.gz -rw-r--r-- 1 jack jack 348 Авг 31 13:48 UniversalRU.ifo -rw-r--r-- 1 jack jack 1,8M Авг 31 13:22 UniversalUE.dict.dz -rw-r--r-- 1 jack jack 491K Авг 31 13:21 UniversalUE.idx.gz -rw-r--r-- 1 jack jack 343 Авг 31 00:23 UniversalUE.ifo -rw-r--r-- 1 jack jack 1,1M Авг 31 13:49 UniversalUR.dict.dz -rw-r--r-- 1 jack jack 475K Авг 31 13:48 UniversalUR.idx.gz -rw-r--r-- 1 jack jack 397 Авг 31 13:49 UniversalUR.ifo
Плюс скриншот главного окна:

Как видите есть проблемы с транскрипцией. После декомпиляции словарей даже в оригинальной кодировке UTF16 там всё равно такая вот каша. Как это побороть, я пока не знаю.
Updated: Согласно ЛОРу в новой версии xdxf это уже исправлено.
Заключение
В результате я наконец-то смог избавиться от работы с эмулятором, сэкономив дисковое пространство и повысив производительность своего труда засчёт отсутствия глюков Lingvo под CrossOver Office.
Данная статья не является идеальной. Многие вещи можно автоматизировать. Я привёл лишь общие направления для дальнейшей работы. Аналогичным образом можно выдрать словари из предыдущих версий Lingvo и использовать их в Linux в личных целях.
Убедительная просьба ко всем не распространять преобразованные таким образом словари в паблике. Нравится продукт – купите его, а уж потом делайте с ним, что позволит лицензия (хотя изменение нескольких байтов в компиляторе словарей всё же нарушает его; поверьте мне, я хорошо изучил лицензионное соглашение перед тем, как взялся за написание этой статьи).
Также не забываем, что ABBYY Lingvo претендует на звание не просто электронного словаря, а нечто большего (поиск по отдельным словам в предложении, система обучения, создание своих словарей и др.) Если вам нужны эти возможности, тогда по-прежнему используйте CrossOver Office Pro от компании CodeWeavers, последняя версия которого (5.0.1) хорошо зарекомендовала себя в плане работы с Lingvo. Описание установки Lingvo 11 в CrossOver Office смотрите в моей второй статье.
Кроме того с выходом Lingvo 11ML появилась возможность не патчить главный файл, а просто активировать программу с помощью удобного активатора, посвящённого тормозам из SSG… :)
В случае приобретения лицензионной версии продукта для достижения относительно нормальной его работы в эмуляторе под линухом вам скорее всего придётся прибегнуть к одному из этих способов. Боюсь, что официальные способы активации могут не сработать.
Как всегда спасибо рубордовскому форуму за предоставленные байтики :)
А также компании «Русский щит» за хороший промоушн продуктов АБИ.

Странно, однако вставляется текст
sed -r ‘s/\[s\].+\.wav\[\/s\]//’