Хабрахабр

Цифровой словарь от А до Я

В те стародавние времена, когда я учил иностранный язык, каждое слово приходилось искать в бумажном словаре. Одной из самых полезных программ на ПК и смартфоне в моем понимании является электронный словарь. Как это было обидно! Эту тривиальную операцию я проделывал сотни раз, а некоторые зловредные слова приходилось смотреть снова и снова, так как я успевал забыть их значение. История поиска, на случай, если искомое слово не перешло из области кратковременной памяти в долгосрочную. То ли дело сейчас, вжух и перевод перед глазами на экране монитора.

StarDict

Для этого может понадобится много, или мало человеко-часов, в зависимости от качества исходного материала. Давайте своими силами создадим электронный словарь для программ StarDict / GoldenDict.

Шаг первый: OCR

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

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

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

Существует много форматов электронных словарей, вот их список. Самое время немного поговорить о форматах.

Нас интересуют открытые стандарты и открытое ПО. Все форматы мы здесь разбирать не будем, так как большинство из них проприетарные.

Dictd

Это клиент серверный протокол, использующий TCP порт 2628, определен в RFC 2229. Возникший в эпоху, когда сетевые TCP/IP протоколы беспрепятственно плодились и размножались dictd сейчас представляет лишь археологический интерес.

Исходный файл для словаря форматируется следующим образом.

:статья: объяснение

Например, такой словарик

:catalysis: "increase in the rate of a chemical reaction due to the participation of an additional substance called a catalyst, which is not consumed in the catalyzed reaction and can continue to act repeatedly. " <a href="is.gd/v6a22Q">ref</a>.
:deconstruction:
:rendered: eg. "rendered irrelevant."
:reading: cf. 'reading of'
:minor: a minor reading.

Готовый файл для словаря создается командой dictfmt.

dictfmt --utf8 -s "Длинное имя словаря" -j dict-name < mydict.txt

Из них первый очевидно индексный файл, с ним ничего делать не нужно, а второй можно сжать командой dictzip. В результате образуются 2 файла: dict-name.index и dict-name.dict. Сразу же возникает вопрос: а зачем оно тогда нужно, если есть обычный gzip? Данная команда сжимает *.dict файл с помощью утилиты gzip.

Дело в том, что dictzip использует добавочные байты в заголовке архивного файлы для обеспечения псевдо-произвольного доступа к файлу.

к. Наконец файлы помещаются в профильные каталоги, т. Синтаксис поиска прост, достаточно набрать /usr/lib/dict, перезагружаем службу dictd и вуаля.

dict СЛОВО.

Пробежка по dictd ссылкам напоминает сафари по интернет сети 90-х, жив и еще лягается!

Sdict

Дерзкая попытка Алексея Семенова изменить мир к лучшему с помощью магии Perl в ту пору, когда Microsoft еще не крутил шашни с Linux и сообществом открытого ПО, а основной источник словарей были пиратки ABBYY Lingvo.

Заголовок исходного файла словаря.

<header>
title = Sample 1 test dictionary - dictionary name;
copyright = GNU Public License - copyright information;
version = 0.1 - version;
w_lang = en - language for words;
a_lang = fi - language for articles. For further information
about language codes refer 'C:\Sdict\share\doc\iso639.htm' file;
# charset = ... - use if your source file is not in UTF-8 encoding.
</header>

Тело форматировано следующим образом:

word___article

Проект более не жив, и даже сами словари можно почерпнуть лишь с Машины Времени. Можно качнуть версию для ОС Symbian, если что.

XDXF

Ну все, завязываем с археологией и переходим к словарным форматам и программам годным для использования IRL.

Весь синтаксис формата и примеры можно обозреть тут. XDXF имеет все преимущества и недостатки XML формата, каковым и является.

Скелет словарного файла выгладит следующим образом, состоит из 2-х частей: meta_info и lexicon.

<xdxf ...> <meta_info> Вся информация про словарь: название, автор и пр. </meta_info> <lexicon> <ar>статья 1</ar> <ar>статья 2</ar> <ar>статья 3</ar> <ar>статья 4</ar> ... </lexicon>
</xdxf>

Большим достоинством формата является то, что далее нет надобности ничего конвертировать. Есть огромное количество словарей в этом формате. Программа GoldenDict распознает XDXF файлы наряду с большим количеством других поддерживаемых форматов.

TSV / StarDict

StarDict и клоны его это не столько про формат электронного словаря, сколько про качественное ПО просмотра, конвертации и создания таковых.

Для создания электронного словаря с помощью StarDict достаточно TSV файла, что я и выбрал для цифровой копии армяно-русского словаря.

Тем не менее возможно и кое-какое форматирования и разметка файла словаря, однако не идет ни в какое сравнение с XDXF.

a 1\n2\n3
b 4\\5\n6
c 789

Формат определяет символ переноса строки \n, в том случае, когда статья разбита на параграфы.

После первого шага скорее всего будут десятки, а то и сотни орфографических, грамматических и всяких прочих ошибок, странных символов и прочих артефактов OCR.

Даже сейчас в 2018-м удивительно мало текстовых редакторов и даже офисных пакетов умеют это нехитрое действие выполнять. Особенность словарей в том, что проверка орфографии нужна одновременно по двум языкам.

Если ваш любимый текстовый редактор справляется с этим не хуже, то и славно. Не холивара для, рекомендую обработку теска производить с Vim. С Vim достаточно команды.

:setlocal spell spelllang=en,ru

Далее список граблей. для проверки орфографии по двум словарям, в данном случае русском и английском.

  • Сортировка текста работает абы как для не латинских локалей, особенно плохо там, где написание буквы требует более одного символа, как армянская ու = ո + ւ. Необходимо в таких случаях самостоятельно сортировать список слов с помощью простенького Perl, или иного скрипта.
  • Поиск по шаблону также может работать неожиданно для некоторых локалей, даже если сам текст и консоль в UTF-8.
  • При оцифровке печатного словаря нужно быть готовым не только к ошибкам оцифровки, но и ошибкам в самом печатном словаре. Их там может содержаться немало!
  • Если название статьи пишется заглавными, то возможно следует перевести при оцифровке в нижний регистр. Не все буквы имеют символы в верхнем регистре, собственно не для всех локалей даже есть верхний регистр.

Просто запихнуть файл в папку /usr/share/goldendict, где программа подхватит его. Для формата XDXF, как уже было сказано, этот шаг не требуется.

Для TSV файла, используется утилита stardict-editor, поставляемого с набором инструментов StarDict.

stardict-editor

На выходе программа создает следующие файлы, наподобие древнего Dict.

  1. somedict.ifo
  2. somedict.idx либо somedict.idx.gz
  3. somedict.dict либо somedict.dict.dz
  4. somedict.syn (optional)

Файлы копируются в каталог /ysr/share/stardict/dic и на этом все.

S. P. Для мобильной платформы Android программа GoldenDict внезапно стал платной, однако в интернет сети все еще можно найти последнюю бесплатную версию программы.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть