Pull to refresh

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

Reading time5 min
Views14K

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


StarDict


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


Шаг первый: OCR


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


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


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


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


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


Dictd


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


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


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

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


: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

В результате образуются 2 файла: dict-name.index и dict-name.dict. Из них первый очевидно индексный файл, с ним ничего делать не нужно, а второй можно сжать командой dictzip. Данная команда сжимает *.dict файл с помощью утилиты gzip. Сразу же возникает вопрос: а зачем оно тогда нужно, если есть обычный 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.
  • При оцифровке печатного словаря нужно быть готовым не только к ошибкам оцифровки, но и ошибкам в самом печатном словаре. Их там может содержаться немало!
  • Если название статьи пишется заглавными, то возможно следует перевести при оцифровке в нижний регистр. Не все буквы имеют символы в верхнем регистре, собственно не для всех локалей даже есть верхний регистр.

Шаг третий: компиляция словаря


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


Для 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 и на этом все.


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

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 21: ↑21 and ↓0+21
Comments6

Articles