| Перенос словарей из ABBYY Lingvo в Stardict |
| 08.05.2006 00:30 | |||
|
18:55 Свершилось!!! Наконец-то можно полностью отказаться от работы с ABBYY Lingvo в эмуляторе под Linux'ом и полностью перейти на использование Stardict со словарями из Lingvo. ПрологПочти ровно через год после написания сей статьи в мои руки попала 12-я лингва.Всё написанное ниже применимо и к ней. Словари так же без проблем декомпилируются, а потом конвертируются в формат стардикта. Так что дерзайте, ищите в Сети нужные для замены байтики в dslcomp.exe и вперёд! ВступлениеПосле того, как я узнал о том, что словари Lingvo можно декомпилировать в исходные тексты, я загорелся желанием написать конвертер для преобразования их в формат StarDict'а. У меня всё не было времени взяться за это. На эти майские праздники время таки появилось. Я наконец-то закончил один из своих больший проектов и решил взяться за конвертер вплотную. Ещё больше меня подстёгивало то, что в мои руки наконец-то попал ABBYY Lingvo 11 Multilingual, в котором были украинские(!) словари. Это было как раз то, о чём я так слёзно просил по телефону у девушки из АБИ, любезно позвонившей мне аж из самой Москвы, дабы провести что-то вроде опроса или анкетирования. И хотя один так же немаленький проект по переводу на украинский я уже закончил, не прибегая к услугам Lingvo, возможность использовать эти словари в будущем меня ох как подстёгивала.Однако, каково же было моё удивление, когда я узнал о том, что оказывается конвертер dsl2stardict уже существует! Итого, вместо того, чтобы неопределённо долго писать свой собственный конвертер, я взял уже готовый и, практически ничего не меняя в нём, получил нужный результат. Согласитесь, это более, чем приятно :) Я понимаю, что нарушу авторские права компании АБИ, если выложу конвертированные словари для общего доступа, поэтому не ожидайте найти их здесь. Однако из-за того, что обещанные симпатишные девушки из киевского офиса украинского подразделения компании АБИ так и не заглянули ко мне в гости :), я немного обиделся и решил написать подробную инструкцию о том, как можно самостоятельно добиться нормальной работы StarDict со словарами из ABBYY Lingvo . Итак, равно как и в предыдущих двух статьях, для начала я перечислю список необходимых инструментов:
Первые два пункта есть на оригинальных компакт-дисках или их образах (версия 11ML вышла на двух CD и ниже будет описана работа именно с ней). Общая схема довольно проста:
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... :) В случае приобретения лицензионной версии продукта для достижения относительно нормальной его работы в эмуляторе под линухом вам скорее всего придётся прибегнуть к одному из этих способов. Боюсь, что официальные способы активации могут не сработать. Как всегда спасибо рубордовскому форуму за предоставленные байтики :) А также компании "Русский щит" за хороший промоушн продуктов АБИ.
|
|||
| Обновлено 09.11.2008 03:18 |

Комментарии
I am relatively new in Linux, right now I'm using Ubuntu 7.04 and I still need to learn lots. I really need to decompile the Lingvo dictionaries. I have Lingvo 12 ML, and there the Dslcomp.exe seems to be different from the one from 11 version :-(
Cause when I open is in mc and follow your instructions, the data are different. For example only 2 numbers correspond to the address you give. May be I do smth wrong? Search on ru.board didn't help either, I might be inattentive though. Please help me, I really need those dsl's.
Best Regards, Katya
У меня 12-й лингво. К сожалению, файл Dslcomp немного отличается от того, который описан на форуме (12 версии). Может быть вы можете его посмотреть или дать ссылочку на рабочий dslcomp.exe?
я не гугл
Dslcomp у меня (лицензионный) есть. Но он слегка отличается от тех, которые описаны в статье и на форуме.
Просто если вы поясните в чём суть патча или поделитесь своей версией 12-го dslcomp, то я смогу решить проблему, думаю.
Под WINE не работают ни словарь, ни компилятор (патченый компилятор, к слову, нашёлся). В итоге пришлось городить дурацкий огород с временной установкой вин2000 под VirtualBox для декомпиляции словарей...
Впрочем, дальше всё легко. Разве что StarDict удивил - разве сложно было организовать подключение пользовательски х словарей в юзерленде? Или я чего-то не понял, или это задача "root only".
Можно положить словарики в ~/.stardict/dic/
Думается, что оно должно выглядеть так:
sed -r \'s/\\[s\\].+\\.wav\\[\\/s\\]//\'
Код:
sed -r 's/\[s\].+\.wav\[\/s\]//'sed -r 's/\[s\].+\.wav\[\/s\]//'
главное - сама идея конвертирования словарей
34A50: 75 -> EB
....
372FC: CC CC CC CC -> 75 0A C6 44
37300: CC CC CC CC CC CC CC CC -> 24 28 01 E9 BF 01 00 00
37308: CC CC CC CC CC CC CC CC -> 83 FF 02 75 0A C6 44 24
37310: CC CC CC CC CC CC CC CC -> 28 01 E9 B0 01 00 00 C6
37318: CC CC CC CC CC CC CC CC -> 44 24 28 00 E9 A6 01 00
37320: 00
....
374C2: 0F 94 44 24 28 -> E9 35 FE FF FF
....
7281D: 8B C7 -> 33 C0
У меня lingvo 12 (английская версия) и сигнатуры 8B C7 по адресу 7281D нет (7281D: 8B C7 -> 33 C0) :sad: Остальные совпадают. Но при запуске Dslcomp вываливается с ошибкой.
Нет ли у тебя сигнатур для английской версии или, если не в лом, пришли пропатченный Dslcomp.exe на адрес ssvv[собак]free mail.ru
AJ: я сказал, что файлов здесь никаких не будет
---------------
00034A50: EB 75
000372FC: 75 CC
000372FD: 0A CC
000372FE: C6 CC
000372FF: 44 CC
00037300: 24 CC
00037301: 28 CC
00037302: 01 CC
00037303: E9 CC
00037304: BF CC
00037305: 01 CC
00037306: 00 CC
00037307: 00 CC
00037308: 83 CC
00037309: FF CC
0003730A: 02 CC
0003730B: 75 CC
0003730C: 0A CC
0003730D: C6 CC
0003730E: 44 CC
0003730F: 24 CC
00037310: 28 CC
00037311: 01 CC
00037312: E9 CC
00037313: B0 CC
00037314: 01 CC
00037315: 00 CC
00037316: 00 CC
00037317: C6 CC
00037318: 44 CC
00037319: 24 CC
0003731A: 28 CC
0003731B: 00 CC
0003731C: E9 CC
0003731D: A6 CC
0003731E: 01 CC
0003731F: 00 CC
00037320: 00 CC
000374C2: E9 0F
000374C3: 35 94
000374C4: FE 44
000374C5: FF 24
000374C6: FF 28
0007281D: 33 8B
0007281E: C0 C7
---------------
Я сам так сделал - работате. НО НЕТ ФОРМ СЛОВ! То есть, например для английского не будет возможности посмотреть формы прошедшего времени, причастия и т.п. А в испанском языке (он-то мне как раз и нужен) - вообще как в русском слово изменяется по лицам. И вот эти замечательные возможности словарей Lingvo у меня куда-то деваются при конвертации. Кто-нибудь знает как с этим бороться?
для испанского ответ простой - goldendict с включенной википедией: будет показывать все испанские склонения (похоже, что они почему-то берутся из английского wiktionary)
также в goldendict-е можно подключить словари из www.wordreference.com как online-словари
1. Выбрать Edit > Dictionaries > Sources > Websites -> Add.
2. Указать имя и URL:
wordreference.com/.../...
3. Выставить птичку и нажать OK.
Если кто будет готов помочь пишите на nurty
В чем может быть ошибка?
Или уже может быть где-то есть готовый deb-пакет? Уже гуглил, но не нашел, а сам скомпилить не могу.
Команда ./confugure проходит отлично, а после make вылетают ошибки.
но в общих чертах так
$cd [результирующая директория]
$cmake [исходная директория]
$make
$make install
Насчет makedict я бы не сказал что все просто.
В репозитории его нормальные люди не положат так как софтина сама по себе сырая, на выкладывание бинариков на sf.net автор забил конкретно
. Про сборку "С этим всё просто" я бы не сказал, нетривиально как то.
Слава богу нашел rpm ку вот тут. sisyphus.ru/srpm/makedict
Спасибо автору програмы за отличный сеанс камасутры и кучу потраченного зря времени!
Features
The latest release has the following features:
* Use of WebKit for an accurate articles' representation, complete with all formatting, colors, images and links.
* Support of multiple dictionary file formats, namely:
o Babylon .BGL files, complete with images and resources
o StarDict .ifo/.dict./.idx/.syn dictionaries
o Dictd .index/.dict(.dz) dictionary files
o ABBYY Lingvo .dsl source files, together with abbreviations. The files can be optionally compressed with dictzip. Dictionary resources can be packed together into a .zip file.
o ABBYY Lingvo .lsa/.dat audio archives. Those can be indexed separately, or be referred to from .dsl files.
* Support for Wikipedia, Wiktionary, or any other MediaWiki-based sites to perform lookups in.
* Ability to use arbitrary websites as dictionaries via templated Url patterns.
* Hunspell-based morphology system, used for word stemming and spelling suggestions.
* Ability to index arbitrary directories with audio files for pronunciation lookups.
* Full Unicode case, diacritics, punctuation and whitespace folding. This means the ability to type in words without any accents, correct case, punctuation or spaces (e.g. typing 'Grussen' would yield 'grüßen' in German dictionaries).
* Scan popup functionality. A small window pops up with the translation of a word chosen from another application.
* Support for global hotkeys. You can spawn the program window at any point, or directly translate a word from the clipboard.
* Tabbed browsing in a modern Qt 4 interface.
* Free software: GNU GPLv3+ license.
Lingvo 12 (сборка 12.0.0.422) ...
Как это можно произвести на ХР?
Я правильно понял, прога makedict только для linux'a?
Спасибо заранее...
Всё описанное выполнялось в линуксе, как это повторить на XP я не знаю. Гугл вам в помощь.