Одной из самых полезных программ на ПК и смартфоне в моем понимании является электронный словарь. В те стародавние времена, когда я учил иностранный язык, каждое слово приходилось искать в бумажном словаре. Эту тривиальную операцию я проделывал сотни раз, а некоторые зловредные слова приходилось смотреть снова и снова, так как я успевал забыть их значение. Как это было обидно! То ли дело сейчас, вжух и перевод перед глазами на экране монитора. История поиска, на случай, если искомое слово не перешло из области кратковременной памяти в долгосрочную.
Давайте своими силами создадим электронный словарь для программ 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.
На выходе программа создает следующие файлы, наподобие древнего Dict.
- somedict.ifo
- somedict.idx либо somedict.idx.gz
- somedict.dict либо somedict.dict.dz
- somedict.syn (optional)
Файлы копируются в каталог /ysr/share/stardict/dic
и на этом все.
P. S. Для мобильной платформы Android программа GoldenDict внезапно стал платной, однако в интернет сети все еще можно найти последнюю бесплатную версию программы.