Словари Формата Dic
Многие часто сталкиваются с необходимостью проверки орфографии на нескольких языках одновременно, однако далеко не все существующие программы позволяют производить такую проверку, предлагая пользователю переключаться с одного языка на другой, что довольно неудобно и отнимает массу времени. Не желая мириться с подобным неудобством для программ, использующих Hunspell словари (FireFox, Seamonkey, Miranda и др.) было принято решение создать автоматическую графическую утилиту для склейки нескольких языков, с возможностью дальнейшего использования полученных словарей.
История создания Пару строк об истории создания. Идея зародилась еще в 2008 году, когда мной был скомпилирован комплексный Русско–Английский словарик для FireFox.
Он был размещен на ftp сайте Mozilla. Так же была тема на форуме. С того момента прошло немало времени, но буквально недавно я почти одновременно получил несколько писем от интересующихся людей, которые просили дать что-то более свежее. Нежели рассылать готовые обновления я решил доработать GUI утилиту, которая позволила бы пользователям самостоятельно собрать несколько словарей воедино. В тот момент утилита была написана «для себя» на Delphi, который использовался мной на работе, однако назвать это кроссплатформенным решением нельзя. Конечно, сейчас можно использовать последние версии Embarcadero RAD Studio для создания кроссплатформенных решений, тем не менее я решил остановиться на реализации автоматической утилиты средствами Java.
Задача Утилита в минимальной её реализации должна уметь 1. Загружать словари из следующих наиболее распространенных форматов — несжатый вид.dic и.aff — ZIP архив (.zip) — XPInstall формат (.xpi) — Расширения OpenOffice (.oxt) 2. Давать возможность выбора словарей для склейки 3. Давать возможность изменения имени полученных словарей и описания 4. Выгружать в форматах — несжатый вид.dic и.aff — ZIP архив (.zip) — XPInstall формат (.xpi) Реализация Прежде чем приступить к созданию программы, необходимо было изучить формат словарей, чтобы иметь возможность их загрузить и склеить. Информацию по Hunspell можно найти тут Описание формата или в русском переводе Вкратце, для проверки орфографии Hunspell требуется два файла.
Скачивание и установка бесплатных словарей в формате *.dic. При помощи компьютера откройте сайт www.pocketbook-int.com и выбери- те нужный язык. В разделе «Поддержка» выберите модель Вашего устройства. На открывшейся странице под заголовком «Словари» выберите и скачай.
Первый файл — словарь, содержащий слова (.dic), второй — файл аффиксов (.aff), который определяет значения специальных меток (флагов) в словаре. Флаги назначаются для слов в файле словаря, а определяются в файле аффиксов. Учитывая формат и структуру файлов основная задача состояла в том, чтобы помимо простой склейки файлов словарей не нарушить соответствие аффиксов для разных словарей. Для именования флагов в файле аффиксов существует три подхода 1. По умолчанию – каждый аффикс именуется одной буквой (с учетом реестра) или цифрой. Long — каждый аффикс именуется двумя буквами или буквой с цифрой.
Number – каждый аффикс имеет значение от 1 до 65000. Поскольку в большинстве случаев (те словари с которыми я сталкивался) файл аффиксов содержал только по несколько десятков разных флагов аффиксов, то авторам словарей можно было использовать первый подход с одной буквой, однако он явно не подходил для склейки нескольких файлов по причине большого количества разных аффиксов, поэтому было принято решение в результирующих файлах использовать цифровое именование.
Минус, конечно, есть – некоторое увеличение размера файлов, но я считаю это не критично. Так же все файлы словарей часто были в разных кодировках, поэтому для унификации был выбрана общая результирующая кодировка UTF-8. В остальном особых обозримых проблем не было. Программа загружает словари, склеивает их, игнорируя дубликаты слов, в результате отбрасывает неиспользованные флаги аффиксов.
В рамках данной статьи я не буду вдаваться в реализацию отдельных процедур, поскольку для желающих я разместил исходный код тут. Там так же есть скрипт для ANT сборщика. Как работать На текущий момент я протестировал работу утилиты под Ubuntu и ОС Windows 7 с указанными в задаче на реализацию типами исходных файлов.
Для работы требуется. Качаем HunspellMerge.jar и файл запуска для вашей ОС Linux или Windows. Для Linux не забываем проставить права на запуск файла. Так же возможен запуск с использованием Java Webstart — файл запуска находится. Для работы требуется иметь набор исходных файлов, которые по умолчанию могут быть размещены в подпапке dictionaries рабочей папки утилиты. Дополнительные словари можно скачать по ссылкам размещенным тут После запуска утилиты или выбора новой исходной папки словарей, они будут отображены в списке словарей. Пользователю нужно только выделить (удерживая Ctrl или Shift) несколько словарей, выбрать папку назначения, указать название языка и если выгрузка будет в формате XPInstall, то поправить описание словаря.
Использование результатов работы FireFox Формат вывода (XPInstall) Просто копируем путь файла или перетягиваем файл в адресную строку браузера. Нажимаем ввод и устанавливаем расширение.
Miranda / MirandaNG Формат вывода (Dictionary) Копируем файлы (.aff,.dic) в папку Dictionaries в каталоге с программой. Перезапускаем Miranda. Планы Поскольку утилита была написана за пару-тройку вечеров, то особого времени уделить тестированию и поддержке расширенных инструкций файла аффиксов не было. Это есть в планах на доработку, однако, некоторые инструкции для одного языка могут идти в разрез с такими же инструкциями для другого, поэтому пока поддерживается три типа основных флагов – суффиксы (SFX), префиксы (PFX), замена (REP). Добавить русский язык для интерфейса.
Операционная Система
Так же неплохо было бы написать документацию и облагородить страничку на GoogleCode. Заключение Очень хотелось бы услышать в каких еще программах работают подобные склеенные словари. Осознаю, что программа не лишена недостатков, поэтому буду рад услышать пожелания и предложения по усовершенствованию утилиты. Ноутбук hp delphi d40 драйвера. Спасибо за интерес. UPD Как выяснилось есть польза даже от простой склейки словарей одного языка, загруженных, с разных ресурсов или имеющих разное направление, например, технические, экономические. Метки:.
Добавить метки Пометьте публикацию своими метками Метки лучше разделять запятой. Например: программирование, алгоритмы. Попробовал склеить по максимуму английские и русские словари по ссылкам, программа обрывала работу с сообщением о нехватке памяти. Исключил явные дубликаты и словари с разницей в несколько десятков слов, всё равно не получается. Стал соединять постепенно. Сначала весь американский английский, потом британский, потом оба варианта.
Русский с «е», русский с «ё», русский с «её». Потом соединил «е» и «ё». Но при попытке соединить этот гибрид с изначальными гибридами «её» — опять нехватка памяти (два файла в UTF-8 по 13 и 11 мегабайт каждый). Windows XP, Java 7.0.90.5.
Сообщение в консоли начинается с: j: temp HunspellMergejava -cp HunspellMerge.jar hunspell.merge.HunspellMerge Exception in thread «AWT-EventQueue-0» java.lang.OutOfMemoryError: Java heap spa ce потом идёт длинный список файлов. Свободной памяти в это время ещё мегабайтов семьсот. Ко времени сбоя уже есть папка output с файлом аффиксов. Да, с таким ключом соединяется, спасибо.
Но, к сожалению, есть другая проблема. Словарь аффиксов почему-то от соединения к соединению иногда существенно уменьшается.
Конечный словарь для английского вышел всего на 543 байта, тогда как исходные достигали десятков килобайт. Конечный для русского вышел на 38 килобайт, раз в десять меньше некоторых исходных.
Когда я объединил русский словарь аффиксов с английским, получилось всего семь килобайт. После установки такой словарь начинает помечать как ошибки множество правильных русских словоформ, которые обычный словарь в Firefox не помечает.
Loading: britishenglishdictionaryupdated-1.19.3-fx+sm+tb.xpi / en-GB (ISO-8859-1) Merging 0 affixes Merging 46280 words Done! Loading: enGB-oed.zip / enGB-oed (ISO-8859-1) Merging 0 affixes Merging 46113 words Done! Loading: enGB-pack.zip / enGB (ISO-8859-1) Merging 0 affixes Merging 46146 words Done! Loading: enGBoxt.zip / enGB (UTF-8) Merging 0 affixes Merging 56506 words Done! Checking unused affixes Saving affix file: engb.aff Saving dictionary file: engb.aff Result 0 affixes, 65733 words Work time (min:sec) = 00:02 Output folder: j: temp HunspellMerge output На выходе файл аффиксов из трёх строчек: SET UTF-8 TRY FLAG NUMBER. Да, похоже, ещё можно дорабатывать. Попробовал опять пройтись в таком порядке: en-gb en-us en-gb-us ru-yo ru-ie ru-yoie ru-yoie-yo-ie ru-en Иногда аффиксы нормально соединяются (результирующее число чуть меньше суммы), но иногда опять происходит разительное сокращение (вроде 250+44=18).
Словари В Формате Dic Скачать

На этапе ru-yoie-yo-ie программа зависла, через минут пять максимальной нагрузки процессора пришлось её насильно выключать. (некоторые oxt я раздербанил, чтобы выбрать только нужные варианты английского). Может, пригодится, если вы пройдётесь в том же порядке соединения. Loading: addon-0.4.4.1-sm+tb+fx+fn.xpi / ru (KOI8-R) Merging 25 affixes Merging 146270 words Done! Loading: britishenglishdictionaryupdated-1.19.3-fx+sm+tb.xpi / en-GB (ISO-8859-1) Merging 63 affixes Merging 46280 words Done! Loading: dictruRU-0.3.7.oxt / hyphruRU (KOI8-R) Merging 25 affixes Merging 3875 words Done!
Loading: dictruRU-AOT-0.2.7-ieyo.oxt / russian-aot-ieyo (KOI8-R) Merging 364 affixes Merging 379323 words Done! Loading: dictruRU-rk-ieyo-0.4.2.oxt / russian-rk-ieyo (KOI8-R) Merging 11 affixes Merging 322129 words Done!
Loading: enGB-oed.zip / enGB-oed (ISO-8859-1) Merging 63 affixes Merging 46113 words Done! Loading: enGB-pack.zip / enGB (ISO-8859-1) Merging 61 affixes Merging 46146 words Done! Loading: enGBoxt.zip / enGB (UTF-8) Merging 712 aliases Merging 150 affixes (712 aliases) Merging 56506 words Done! Loading: enUSoxt.zip / enUS (UTF-8) Merging 589 aliases Merging 152 affixes (589 aliases) Merging 52890 words Done! Loading: russianhunspelldictionary-1.0.20120501-sm+fn+fx+tb.xpi / ruRU (UTF-8) Merging 236 affixes Merging 174304 words Done!

Loading: ruRU.zip / ruRU (KOI8-R) Merging 24 affixes Merging 128905 words Done! Loading: ruRUye.zip / ruRUie (KOI8-R) Merging 11 affixes Merging 321998 words Done! Loading: ruRUyo.zip / ruRUyo (KOI8-R) Merging 24 affixes Merging 129167 words Done!
Loading: unitedstatesenglishspellchecker-6.0-fx+sm+tb.xpi / en-US (ISO-8859-1) Merging 24 affixes Merging 62119 words Done! Checking unused affixes Saving affix file: enru.aff Saving dictionary file: enru.aff Create XPI: en-ru.xpi Result 1213 affixes, 803396 words Work time (min:sec) = 00:56 Output folder: j: temp HunspellMerge output Спасибо. Погоняю немного этот словарь, если будут проблемы, напишу.
Читалки для PC: Dict, jDict для работы нужно установить jre-6u2-windows-i586-p.exe, так как она написана на java. Хотя это и не обяательно. Читалка для PPC: Dict16b10/3 самая последняя, есть поддержка zpak + жрифт, для поддежки Unicode Файл zpak является необязательным дополнительным пакетом к словарю, может содержать картинки, звуки, стили оформления.
Файл должен лежать рядом с соответствующим.zd. Makezd - программа для создания словарей в формате.zd 4.