Цифровой садик - приветственная

Цифровой садик - приветственная | Полный список всего, что тут есть | RSS | Подписаться через follow.it

07.10.2022

словари в emacs - dict и dictem

https://ladycat.wordpress.com/2013/03/13/dict_n_dictem_n_emacs

Словари я люблю, уверена, что их должно быть много, и все ``на кончиках пальцев''. Дабы легко уяснять, что означает конкретное слово, или как это будет на другом языке, или что мне там будет актуально - всё это может быть полезно, обо всём этом не хотелось бы задумываться.

Разумеется, я пробовала разные словари. Как любительнице и пользовательнице Emacs мне приглянулось сочетание dictd+dict+dictem. Это же так естественно - легко обращаться к словарям именно там, где они нужны, там, где я пишу тексты.

Одним емаксом дело не ограничится, кое-что нужно и вокруг.

Установка

Про установку я почти ничего не могу сказать - в моём дебиане всё в репозитории, соответственно

aptitude install dict dictd dictem dictzip dictfmt dictconv 

При этом dictem - пакет emacs, остальное - вокруг.

Ссылки про dictem в интернетах:

Словари - откуда брать

Куда и как класть словари

Место для словарей по умолчанию - /usr/share/dictd/.

Что стоит помнить при обновлении словарей: работающий dictd словари сам не подхватывает. Надо просто перезагрузить или последовать совету из мана: сначала отправьте dictd-у сигнал SIGUSR1, чтобы dictd выгрузил словари из памяти, потом обновите файлы и отправьте dictd-у сигнал SIGHUP, чтобы загрузить их снова.

Можно класть и в другую папку, если её указать в файле /etc/dictd/dictd.order. Причём это должна быть непосредственно та папка, где лежат файлы словарей. Идея сложить всё в подпапки, а указать одну родительскую - не прокатит, придётся добавлять список папок. Только осторожно, это может привести и к тому, что dictd откажется запускаться. От чего зависит - пока не знаю.

Если словарь новый, а не обновление существовавшего, то надо ещё и dictdconfig -w запускать - чтоб ``прописал''. Впрочем, в дебиане при установке из репозитория это делается автоматически.

Просмотр списка баз: cat /var/lib/dictd/db.list

Самый простой вариант поиска - dict слово в командной строке.

Cвойства сервера словарей.

Что касается свойств, интересно вот что:

dict --strats сообщит, какие стратегии поиска можно использовать. У меня это

  • exact - точное совпадение с заголовком словарной статьи.
  • prefix - совпадение префикса, то есть совпадение с началом заголовка.
  • nprefix - Запрос пишется так: skip#count#string, где skip и count - натуральные числа. Тогда результатом будут максимум count совпадений начала заголовка со строкой string, не считая первых skip из них, которые будут пропущены. Это из каждого словаря, который спросили. Предполагалось не для использования вручную, а для тех, кто будет писать какие-то словариковые мордочки.
  • substring - совпадение подстроки где угодно в заголовке.
  • suffix - совпадение суффикса, то есть совпадение с концом заголовка.
  • re - POSIX 1003.2 (``современные'') регекспы. См. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04.
  • regexp - ``старые'' регекспы. См. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03
  • soundex - будет искать подобное по звучанию.
  • lev - найдёт слова, которые отличаются на одну ``правку'' (вставка, удаление или перестановка буквы).
  • word - найдёт совпадение с любым словом заголовка.
  • first - только совпадение с первым словом.
  • last - только совпадение с последним словом.
dict –dbs
скажет, как наши словари зовутся на взгляд dictd. Это нам пригодится. Во-первых, можно прямо из консоли просить ответа лично у знакомого словаря. А во-вторых, мы собирались настроить dictem.

Что касается поиска слов непосредственно из консоли через dict, то советую обратить внимание на ключики

-d dbname или –database dbname
Cпособ обратиться к конкретному словарю, а не просить результаты сразу из всех.
-m или –match
Выдаст только сами совпадения, словарных статей к ним печатать не будет. Удобно, когда хочется узнать, что вы получите по своему запросу, когда ищете по подстрокам или при помощи регулярных выражений.
-s strategy или –strategy strategy
Будет искать заданным способом (из списка, который мы посмотрели выше)
-C или –nocorrect
Не пытаться угадать, что мы могли на самом деле искать, если результатов нет. Когда ключ не указан, предлагается список похожих слов.

Dictem

Теперь про dictem. Что нужно добавить в ваш конфиг emacs, чтоб это счастье заработало.

Во-первых, затребовать сам dictem.

(require 'dictem)

Во-вторых, по желанию, подключить горячие клавиши. Часто используются, имхо, две функции:

; SEARCH - спрашивает слово, словарь искать и способ, показывает найденные словарные статьи.
(global-set-key "\C-cs" 'dictem-run-search)

; DEFINE - спрашивает слово и словарь, показывает найденные словарные статьи.
(global-set-key "\C-cd" 'dictem-run-define)

По умолчанию в обоих случаях ищет слово под курсором, что также уменьшает количество щёлканий по кнопкам :)

Теперь самое приятное - подборки словарей, как бы ``виртуальные словари''. Имена самих словарей берём из списка, полученного по результатам dict --dbs, имена подборок - на ваш вкус. У меня там в основном направления перевода, в том числе типа _lng-other, когда хочу перевести с конкретного языка на любой знакомый, просто чтоб понять, что это. :)

Образец:

(setq dictem-user-databases-alist
'(("_en-ru"  . ("korolew_en-ru" "mueller24" "magus" "sinyagin_general_er" "engcom"))
("_en-en"  . ("foldoc" "gcide" "wn"))
("_ru-ru"  . ("beslov" "ses" "ushakov" "ozhegov" "ozhshv" "brok_and_efr" "rus_syn" "dalf" "bus"))
("_ru-en"  . ("sinyagin_general_re" "idioms" "sokrat_ru-en" "korolew_ru-en"))
("_other"   . ("smiley" "names" "religion" "teo" "ethnographic" "church"))
))

Теперь ``словари'' _en-ru, _en-en, _ru-ru и _other будут в списке словарей, который вам любезно подскажет emacs по клавише Tab, когда вы будете пытаться вспомнить, что у вас там вообще есть, и где же имеет смысл искать это конкретное слово :)

Если у вас уже уймища словарей, и их вы видеть в подсказках вообще не желаете, а хотите видеть исключительно вот такие ``виртуальные'', то ваше счастье с вами:

(setq dictem-use-user-databases-only t)

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

Dictfmt или правим словари

Наиболее родной для dictd формат словаря:

_____ 

заголовок
определение в произвольное количество слов
с произвольной разметкой и прочим выравниванием

_____

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

_____

В такой формат будет сконвертирован словарь командой dictunformat. Из такого формата собирается в словарь командой dictfmt -t или dictfmt -c5 --utf8.

Процесс правки словаря:

  1. dictunzip dictionary.dict.dz в dictionary.dict
  2. dictunformat dictionary.index < dictionary.dict > dictionary.txt
  3. найти в dictionary.txt нужную статью и подправить
  4. dictfmt -t dictionary.txt, возможно и с ещё дополнительными опциями.
  5. dictzip dictionary.dict

Многовато мороки, честно говоря.

Мне пока удобно так. В специальной папке постоянно хранятся текстовые файлы словарей. При необходимости что-то в словаре изменить, можно внести правки в текстовый файл, после чего запустить ``сборку'', которая сгенерит словарь, положит на место и заставит dictd перечитать словари.

Кое-что из мана dictfmt

–allchars
Specifies that all characters should be used for the search, by default only alphabetic, numeric characters and spaces are put to .index file and therefore are used in search. Creates the special entry 00-database-allchars.
–headword-separator sep
sets the headword separator, which allows several words to have the same definition. For example, if ´–headword-separator %%% is given, and the input file contains ´autumn%%%fall', both 'autumn' and 'fall' will be indexed as headwords, with the same definition.
–allchars
Specifies that all characters should be used for the search, by default only alphabetic, numeric characters and spaces are put to .index file and therefore are used in search. Creates the special entry 00-database-allchars.
–index-keep-orig
When –utf-8 is specified headwords are lowercased and non-alphanumeric characters are removed from it before saving to .index file in order to simplify the search. When –index-keep-orig option is used fourth column is created (if necessary) in .index file, and contains an original headword which is returned by MATCH command. This option may be use- ful to prevent converting " AT\&T" to " ATT" or to keep proper nouns with uppercased first letter.
–mime-header mime_header
When client sends OPTION MIME command to the dictd , definitions found in this database are prepended by the specified MIME header. Creates the special entry 00-data-base-mime-header.

Некоторые начальные поля

00-database-info :: Contains the informarion about database which is returned by SHOW INFO command, unless it is specified in the configuration file.

00-database-short Contains the short name of the database which is returned by SHOW DB command, unless it is specified in the configuration file. See dictfmt -s.

00-database-url URL where original dictionary sources were obtained from. See dictfmt -u. This headword is not used by dictd

00-database-utf8 Presents if dictionary is encoded using UTF-8. See dictfmt –utf8

Пример:

_____

00databaseurl
00-database-url
http://mova.org
_____

00databaseshort
00-database-short
English-Belarusian Computer Dictionary
_____

00databaseinfo
00-database-info
This file was converted from the original database on:
     Mon Jan 20 19:15:35 2003


The original data is available from:
http://mova.org

The original data was distributed with the notice shown below.  No
additional restrictions are claimed.  Please redistribute this
changed version under the same conditions and restriction that
apply to the original version.

English-Belarusian Computer Dictionary
Version : (test)
Editor  : Yauhen Radyna <project-b@tut.by>

_____

Для раскрашивания статья пропускается через colorit. Сам colorit прогоняет через указанный препроцессор (по умолчанию m4) по правилам из конфига, и отдаёт в желаемом виде.

Из моего же поста на welinux: http://www.welinux.ru/post/7588/ и https://ladycat.wordpress.com/2013/03/13/dict_n_dictem_n_emacs/, но несколько дополненное.

Dictconv - для конвертирования словарей в dict

Конвертировать словари в формат, понимаемый dict, умеет, например, dictconv.

INPUT_FILE can be

  • Babylon Glossary (.bgl)
  • Freedict dictionary (.tei)
  • Sdictionary dictionary (.dct)
  • StarDict dictionary (.ifo).

OUTPUT_FILE can be

  • DICT dictionary (.index)
  • PlainText dictionary (.dic)
  • StarDict dictionary (.ifo).

Cсылок, маленько не по теме


Если у вас есть мысли, комментарии, предложения или отклики по поводу этой страницы или этого цифрового сада в целом, напишите мне сообщение на agnessa@agnessa.pp.ru. Мне ооочень интересно!

Задонатить.


An IndieWeb Webring 🕸💍