Здесь изложены некоторые сведения о программе, не вошедшие в базовый текст. Они относятся к полной версии программы, кое-что (редактор словарей и т.п.) не будет работать в облегчённой версии, выложенной на github.
Основной словарь yox.dat
, который содержится в архиве с программой, создан на основе словарной базы для скриптов Е. Миньковского и затем существенно дополнен. В настоящий момент он содержит около 140 000 слов, в том числе некоторое количество устаревших, диалектных и просторечных. Кроме того, в состав архива входит маленький примерный словарь регулярных выражений yo_regexpr.dat
, который используется в режиме "Анализ регулярных выражений" (см. подробности ниже). Программа будет работать и без него, однако он, по мысли автора, может повысить скорость ёфикации.
При создании баз слов на "ё" нужно решать две задачи: с одной стороны, учесть все возможные варианты написания (включая, по возможности, устаревшие, просторечные, поэтические), а с другой - не слишком отступить от правил современной русской орфографии. Разумеется, эти задачи в каком-то смысле противоречат друг другу. Кроме того, в словаре могут быть ошибки и лакуны. Поэтому обработанные программой тексты не следует рассматривать как тексты, гарантированно не содержащие ошибок в расстановке "е/ё". Если вы хотите получить текст, близкий к идеалу (вообще говоря, недостижимому) в смысле ёфикации, то включайте опцию "Всегда подтверждать замену" и в сомнительных случаях справляйтесь в словарях - например, на сайте www.gramota.ru (хотя и это не всегда помогает).
Замечу также, что словари, используемые программой, не нужно рассматривать в качестве нормативных. Сомнения в существовании варианта слова с "ё" иногда решались в его пользу (то есть оно заносилось в словарь со знаком "?"). Таким образом, то, что программа предлагает вам выбрать один из вариантов написания, может не означать, что оба они одинаково грамотны!
где
Словарь слов ("основной словарь", или ОС, или просто "словарь") - это упорядоченный по алфавиту (при этом "е" и "ё" считаются неразличимыми) список словарных строк и комментариев. Комментарий - это произвольная строка, начинающаяся с После слова должен стоять знак Начиная с версии 0.95 в программу введён режим "Анализ регулярных выражений" и соответствующий ему
"Словарь регулярных выражений" (СРВ). Каждая его строка построена в соответствии с синтаксисом регулярных выражений (с некоторыми особенностями) и описывает некоторое правило расстановки "е/ё" в тексте.
Назначение данного режима - сократить количество случаев, когда программа обращается с запросом к пользователю. на замену. Неформально можно описать работу режима следующим образом. Если программе нужно сделать запрос, но она находит в СРВ регулярное выражение, соответствующее проверяемому слову в некотором контексте, то запроса она не делает и расставляет "е/ё" в слове так, как это сделано в словаре. Пусть, например, в СРВ имеется регулярное выражение В данный момент с программой поставляется маленький примерный СРВ
СРВ - прямой наследник существовавшего в версиях 0.91-0.936 "Словаря словосочетаний" (СС). Для того, чтобы использовать старый СС как СРВ, следует отредактировать его вручную, заменив: 1) метасимвол
Порядок строк в СРВ может быть любым, но следует иметь в виду, что программа просматривает его с начала, и доходит только до первого выражения, соответствующего конексту. Размер СРВ формально неограничен, однако практика показала, что большие словари замедляют работу программы. Разумно включать в СРВ только выражения, которые встречаются в тексте достаточно часто - например, контексты слов "все"/"всё", "лет"/"лёт", "чем"/"чём" и т.д.
Для анализа возможных странностей режима "Анализ регулярных выражений" ниже приведён формальный алгоритм его работы. Точнее - того, как это должно работать. Напоминаю, что режим отлаживается, так что возможно всякое.
Итак, пусть программа проверят слово Примечание 1: Метасимвол \w в регулярных выражениях соответствует только русским буквам.
Примечание 2: Как следует из описания, частные правила нужно помещать в СРВ перед общими - иначе первые не сработают. Например, выражение Примечание 3: Для изменения переменной Примечание 4: Если в секции Начиная с версии программы 0.935 в ОС допускается использование слов с первой буквой в верхнем регистре. При этом словарь упорядочивается согласно следующему порядку букв: В СРВ допустимы буквы обоих регистров в любой позиции. При этом, в отличие от ОС. если выражение написано с использованием заглавных букв, то ищутся регистрозависимые совпадения (т.е. в тексте ему должна соответствовать строка, написанная с буквами тех же регистров).
Не предполагается, что вы будете часто нуждаться в редакторе словарей, поэтому опишу его очень кратко.
Редактор вызывается нажатием клавиш Ctrl-E. Он состоит из "окна словаря" (вверху или слева) и
"окна (добавляемых) слов" (внизу или справа).
В редакторе вы можете:
Команда "Создать формы слова" может быть полезна при массированной вставке новых слов в словарь.
Она работает, если в рабочем каталоге программы присутствует файл
Владимир Иванов, 2003-2019.
Смысл некоторых пунктов меню
"Редактировать"
"Ёфикация"
"Опции"
<BINARY ...>
и до конца файла;
Смысл информации в статустной строке
При ёфикации в строке под экраном редактора выводится информация
о статистике процесса в формате:
t=t1+t2 A:a=a1+a2 RE:r=r1+r2 REQ:q E:e T:tm S:s
,
t
- полное число проверок слов с "е/ё",
t1
- число t
, в которых была замена,
t2
- число t
, в которых не было замены,
a
- число проверок слов с запросом,
a1
- число a
, в которых была замена,
a2
- число a
, в которых не было замены,
r
- число проверок слов, для которых найдены регулярные выражения,
r1
- число r
, в которых была замена,
r2
- число r
, в которых не было замены,
q=r/(r+a0)
- доля слов (в процентах), в которой СРВ позволил избежать запроса, (имеет смысл меры эффективности СРВ, a0=a
, если не включён режим "Только бесспорные замены"),
e
- число слов с заменой "ё" на "е",
tm
- время работы в режиме ёфикации (сек),
s=t1/s
- скорость работы в режиме ёфикации (замен/сек).
Основной словарь
"#"
, программа её игнорирует. Словарная строка - это слово с буквой "ё", состоящее из букв русского алфавита в кодировке CP-1251 (пробелы и знаки препинания не допускаются), к которому может быть добавлен служебный символ "?"
.
"?"
, если допустимы оба варианта - как с буквой "е" так и с буквой "ё" (в этом случае программа попросит подтверждение при замене буквы "е" на "ё").
Словарь регулярных выражений
"всё \w+ьше лет"
. Программа переводит его во "внутренний формат" - "\bвсё\s+\w+ьше\s+лет\b"
. Тогда в строках текста "все больше лет" и "все меньше лет" "все" замениться на "всё", а "лет" останется без изменения, при этом в выражении "все больше летают, чем ходят пешком" программа запросит замену "все" на "всё" (оно не соответствует строке СРВ). (Подразумевается, что в основном словаре есть строки "всё?"
и "лёт?"
, а WordsBufferLength >= 5
). Более формальные правила обработки строк СРВ описаны ниже.
yo_regexpr.dat
и предполагается, что пользователи по мере необходимости будут заполнять его сами.
"\0"
на "\d+"
и 2) символы, имеющие в регулярных выражениях специальный смысл - "."
, "|"
, "("
, ")"
, "["
, "\"
, "^"
, "{"
, "+"
, "$"
, "*"
, "?"
- на их версии, предварённые знаком "\"
.
Об анализе регулярных выражений из СРВ
W
и должна выдать запрос на выбор между его формами W1
и W2
. Если анализ регулярных выражений включён, то проводится следующая процедура:
C
, состоящая из проверяемого слова W
,
окружённого справа и слева n = WordsBufferLength div 2
"словами" (или меньшим количеством - если слово находится в начале или конце текста). Таким образом, C
в общем случае содержит WordsBufferLength
слов. "Словом", вопреки правилам русской
грамматики, считается последовательность букв (здесь и далее - русских букв), ограниченных
небуквенными символами, включая дефис (например, в строке "он всё-таки тёмно-серый" - пять слов, а в строке "12 негритят" - одно). WordsBufferLength
- внутренняя переменная, которая должна быть нечётной и по умолчанию равна 5.
R
. Если выражений больше нет - переход к 9.
R
переводится во "внутренний формат" (RI
) следующим образом:
"е"
и "ё"
заменяются на "([её])"
;
"Е"
и "Ё"
заменяются на "([ЕЁ])"
;
"\s+"
(соответствует одному и более пробелов)
"-(\r\n){0,1}"
(возможность разрыва после дефиса);
"\b"
(соответствует границе слова).
C
ищется первое выражение, которое a) соответствует RI
, b) имеет непустое пересечение с W
. При поиске совпадения включены модификаторы /m
(многострочная мода) и /s
(точка соответствует и концу строки). Кроме того, если в R
нет букв верхнего регистра, то совпадение ищется в регистро-независимом режиме (модификатор /i
). Если таких выражений нет, повторяется пункт 2.
C'
, путём замены всех подвыражений в C
(то есть подстрок, заключённых в RI
в скобки), которым в R
соответствует "е" или "ё", на соответствующую букву (с сохранением регистра).
C'
выделяется модифицированное слово W'
.
W'
совпадает со словом W1
или W2
- переход к 8. Иначе - переход к 2
W
без запроса меняется на W'
. Конец процедуры.
W1
или W2
. Конец процедуры.
"при всём"
дожно стоять перед "всем"
.
WordsBufferLength
нужно отредактировать файл yo.ini
, добавив в секцию [Yo]
строку WordsBufferLength=x
, где x
- нечётное натуральное число большее 1.
[Yo]
файла yo.ini
есть строка RegExprLog=1
, то все замены по СРВ записываются в файл regexpr.log
.
О регистре слов в словарях
"АаБб...Е(=Ё)е(=ё)...Яя"
. Словарная строка, написанная с использованием заглавной буквы, относится только к словам в тексте, первая буква которых тоже большая. Так, строка "Алёша"
будет относиться только к словам "Алёша", "АЛЕША" и т.д. (но не "алёша"), тогда как строке "алёша"
будут соответствовать любой регистр букв. Программа ищет в ОС сначало слово с заглавной буквой, а если не находит его, то с прописной.
О русских фамилиях
Нормы написания фамилий, вообще говоря, гораздо более размыты, чем в случае нарицательных имён.
Поэтому при дополнениях и изменениях большого словаря, начиная с версии 1.3, русские фамилии и производные от них
почти всегда имеют знак запроса "?"
. Дело в том, что, скажем, фамилии Ж.И. Алфёрова и Е.И. Пугачёва пишутся через "ё", но никто не поручится, что не существуют вариантов написания этих же фамилий через "е". Исключения могут касаться только известных иностранных фамилий (например, "Гёдель") и популярных русских, алтернативное написание которых кажется мне весьма сомнительным (например, "Семёнов"). Если вас не устраивает подобная ситуация, вы всегда можете использовать кнопки "Всегда Е/Ё" в окне запроса.
Редактор словарей
Внимание! Режим "Редактор словарей" протестирован существенно хуже, чем собственно ёфикатор. Если вы будете им
пользоваться, то готовьтесь к глюкам и не забывайте архивировать обрабатываемые словари.
По умолчанию этот режим отключён: чтобы включить его, в файле yo.ini
замените
0
на
1
в строке Editor=0
.
insert.log
, в который заносятся все слова, заносимые из "окна слов" в "окно словаря";
morphs.dat
. Файл описывает правила генерации
косвенных форм слова из основной (существительного или прилагательного именительного падежа единственного
числа, инфинитива глагола). О формате файла не рассказываю - тот, кому понадобится его редактировать,
разберётся сам.
Для генерации форм слова следует:
История изменения программы и словарей
См. здесь.
Известные проблемы