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

в 14:39, , рубрики: diy или сделай сам, goldendict, linux, open source, StarDict, vim

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

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:Sdictsharedociso639.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   1n2n3
b   4\5n6
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 внезапно стал платной, однако в интернет сети все еще можно найти последнюю бесплатную версию программы.

Автор: temujin

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js