New user registration is currently disabled due to spam abuse / Регистрация новых пользователей в настоящее время приостановлена из-за злоупотреблений спаммерами

Оптимизация размера DSL-словарей

Всё по словарям

Оптимизация размера DSL-словарей

Postby Novikov » Tue Feb 07, 2012 6:01 am

Не секрет, что в интернете можно достать лучшие словари английского языка, причем даже с озвучкой и иллюстрациями. Среди них особо выделю словари издательств Longman и Oxford. Так вот, практически у всех DSL-словарей такого объема можно срезать пару сотен мегабайт.

Начну с того, что доступно относительно неопытному пользователю.

1. Самое простое действие -- это перевести кодировку из UTL-16LE в UTF-8, что сокращает размеры файлов практически вдвое (минус 100 мегабайт в случае с Oxford Advanced Learner's Dictionary 8th ed.) Lingvo такие файлы не переварит, а GoldenDict отлично с ними работает. Я рекомендую делать это в редакторе EditPad Lite 7, отлично показавшем себя при работе с большими файлами и, на мой взгляд, лучше и быстрее всех работающем с регулярными выражениями. Затем можно сжать DSL-файл DictZip'ом.

Дальнейшие действия потребуют навыков квалифицированного пользователя.

2. DSL-файлы нередко поддаются существенной оптимизации. В частности, можно удалять повторяющиеся пробельные символы, пробелы в конце строк, DSL-комментарии вида {{something}}, закрывающие теги [/m]. Кроме того, нередко встречаются словари с повторяющимися по несколько раз карточками (мне попадались такие, где одна карточка повторялась 3-4 раза).

Дальнейшая оптимизация возможна за счет удаления ненужных или неоптимальных тегов, но требует тщательного тестирования. Например, можно выкидывать теги , обрамляющие маркеры. В одном файле могут быть сотни тысяч маркеров, на каждом можно сэкономить 6 байт.

Большинство манипуляций я проводил регулярными выражениями либо в редакторе EditPad 7, либо запуская на локальной машине PHP, которому отвел не менее 2 гигабайт оперативной памяти (в частности, оптимизирующий DSL скрипт требует в 4,78 раз больше памяти, чем весит файл словаря).

3. Во многих словарях есть таблицы, выложенные в формате JPG. С таблицами неправильных глаголов я сделал следующее: сперва конвертировал в png с сокращением цветовой палитры до 4, удалением фона и обрезанием до границ таблички. Это делается через пакетную обработку в "Фотошопе". Затем получившиеся PNG-файлы скармливаются программе PNG Gauntlet, которая удаляет всю ненужную информацию. В результате таблицы стали не только занимать в 20-30 раз меньше места, но и выиграли в качестве! JPG можно пропустить через jpegtran.

Если нет желания разбираться с пакетной обработкой файлов в "Фотошопе" и бороться с его глюками -- можно просто сконвертировать JPG'и с табличками в PNG, который пропустить через PNG Gauntlet.

4. В таких словарях звуковые файлы, как правило, представлены в формате RIFF-WAV. WAV-файл -- это просто контейнер, в который "зашит" MP3. В начале и в конце сам MP3 обрамляется дополнительными чанками RIFF'а. Кроме того, в конце файла есть примерно 0,5 секунд тишины, которую можно вырезать, просто откусив у файла примерно 450 байт с конца. В результате на каждом из 118 тысяч звуковых файлов удалось выиграть примерно по 600 байт.

После таких манипуляций размер DSL-словаря сократился с 200 до примерно 90 мегабайт (а впереди еще сжатие DictZip'ом), размер архива с картинками и звуками -- с 584 до 364 мегабайт. Важно не забыть поменять в коде DSL-словаря разрешения файлов, чей формат вы заменили.
Novikov
 
Posts: 164
Joined: Mon Jan 23, 2012 8:29 pm

Re: Оптимизация размера DSL-словарей

Postby Novikov » Tue Feb 07, 2012 3:46 pm

Кстати, DictZip'ом словари сожмутся немножко сильнее, если символы табуляции в начале строк заменить на пробелы. И еще важная деталь: частенько в коде словарей попадаются неотображаемые символы или "альтернативные" пробелы, например, с HEX-кодом A0. Вот все это надо заменить на нормальные пробелы с кодом 20, после чего пройтись регуляркой и вычистить повторяющиеся пробелы и пробелы в концах строк.

Здесь 10 килобайт, там 10 килобайт -- так и набирается и на экономию места, и на улучшение производительности.
Novikov
 
Posts: 164
Joined: Mon Jan 23, 2012 8:29 pm

Re: Оптимизация размера DSL-словарей

Postby ikm » Tue Feb 07, 2012 8:41 pm

У неразрывного пробела в dsl своя собственная семантика - в частности, он может использоваться для создания заголовка, начинающегося с пробела. Крайне не рекомендую заменять их на обычные.
ikm
Автор GoldenDict
 
Posts: 1595
Joined: Wed Feb 04, 2009 10:40 am

Re: Оптимизация размера DSL-словарей

Postby Novikov » Tue Feb 07, 2012 8:43 pm

А GD все равно не подключает словари, где есть такой пробел :)
Novikov
 
Posts: 164
Joined: Mon Jan 23, 2012 8:29 pm

Re: Оптимизация размера DSL-словарей

Postby ramix » Mon Jun 04, 2012 10:32 pm

Novikov wrote:А GD все равно не подключает словари, где есть такой пробел :)


У меня подключает безо всяких проблем.
ramix
 
Posts: 27
Joined: Fri Mar 09, 2012 12:16 pm

Re: Оптимизация размера DSL-словарей

Postby zitan2extra » Mon Jul 23, 2012 12:55 pm

Novikov, а ты можешь где-нибудь выложить свои оптимизированные словари? Самому возиться лень, хочется уже готового.
zitan2extra
 
Posts: 2
Joined: Mon Jul 23, 2012 12:51 pm

Re: Оптимизация размера DSL-словарей

Postby zitan2extra » Tue Sep 25, 2012 7:43 am

Novikov, ну как? Есть прогресс?
zitan2extra
 
Posts: 2
Joined: Mon Jul 23, 2012 12:51 pm

Re: Оптимизация размера DSL-словарей

Postby dg333 » Wed Sep 26, 2012 7:00 am

Самое простое действие -- это перевести кодировку из UTL-16LE в UTF-8


По крайней мере в Windows 7 GoldenDict не понял словарь после перевода в UTF-8. Оказалось, требуется UTF-8+BOM.
dg333
 
Posts: 117
Joined: Fri Jun 05, 2009 9:50 am

Re: Оптимизация размера DSL-словарей

Postby ikm » Wed Sep 26, 2012 7:03 am

Да - так как вариант с UTF-8 не является для DSL стандартом, GD определяет, что используется UTF-8, по присутствующему в начале файла BOM.
ikm
Автор GoldenDict
 
Posts: 1595
Joined: Wed Feb 04, 2009 10:40 am

Re: Оптимизация размера DSL-словарей

Postby Fedral144 » Sat Dec 13, 2014 4:53 am

Имеется несколько словарей в lsd формате, но под Linux +Stardict/Goldendict они бесполезны, 642-747 pdf а найти рабочий DSLCompiler от Лингвы, чтобы перегнать их в читаемый формат не удалось (если кто ткнёт мордой, будет неплохо).
Fedral144
 
Posts: 1
Joined: Sat Dec 13, 2014 4:51 am

Next

Return to Словари

Who is online

Users browsing this forum: No registered users and 11 guests