Словари ударений

Оглавление

Словари ударений

Общие сведения

Правила автозамены

Регулярные выражения

Склонение числительных

Алгоритм обработки

Этапы обработки:

 

 

Общие сведения

Обработка словарями предназначена для исправления неправильного произношения голосовым движком некоторых слов. В первую очередь работа со словарями в KooBAudio "заточена" под голосовой движок "Nicolai".

Для того, чтобы движок делал ударение на определенную гласную в слове, используется символ <. Например: "радиочастота<", "радиочасто<тный"

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

Допускается использование двух ударений - короткого и обычного в одном слове, например "ра>диочастота<", но не двух или более ударений одинакового типа (в этом случае будет использован последний символ ударения, а оставшиеся проигнорированы)

Правила автозамены

Для автоматической замены в тексте KooBAudio использует файлы словарей формата *.dic, в которых содержатся правила автозамены вида

радиочастота=радиочастота<
радиочастотн*=радиочасто<тн
*передающ*=передаю<щ
*яющийся=я<ющийся

...

В левой части правила расположен шаблон и управляющие символы, определяющие дополнительные условия соответствия для него. В правой - результат замены. Разделителем является последний знак равенства (т.е. использование знака "=" в графе "результат" не допускается)

Поддерживаются следующие типы правил (упрощенный синтаксис)

Правило                                                     

Соответствие в строке (подчеркнуто)

простые правила для отдельного слова:   
кот=КОТ                                                    

КОТ     котел             скот   скотч.

cлово целиком, или начало слова:           
кот*=КОТ                                                   

КОТ     КОТел             скот   скотч.

Слово целиком, или окончание слова:       
*кот=КОТ                                                   

КОТ     котел             сКОТ   скотч.

Слово целиком, или часть слова:               
*кот*=КОТ                                                 

КОТ     КОТел             сКОТ   сКОТч.

начало слова:                                         
кот&=КОТ                                                  

Кот     КОТел             скот   скотч.

окончание слова:                                        
&кот=КОТ                                                  

Кот     котел             сКОТ   сКОТч.

часть в середине слова                          
&кот&=КОТ                                                

Кот     котел             скот   сКОТч.

начало или часть в середине слова:                      
*кот&=КОТ                                                

Кот     КОТел             скот   сКОТч.

окончание или часть в середине слова:     
&кот*=КОТ                                                

Кот     котел             сКОТ   сКОТч.

Символ $ в начале шаблона включает режим сравнения с учетом регистра*:
$Кото<т                                                 

Ко<т   кот     кОт     КОТ

 

Регулярные выражения

Более широкие возможности для определения особых условий соответствия предоставляют регулярные выражения, которые так же поддерживаются в словарях. Шаблон правила в этом случае должен начинаться с символа "#", который при этом НЕ является частью самого регулярного выражения*

Правило                                                     

Соответствие в строке (подчеркнуто)

#(?i)(?<=рыжий |полосатый от\b=КОТ

Серый кот, рыжий КОТ, черный кот, полосатый КОТ.

 

Например, можно использовать регулярные выражения для определения написания омографов в контексте:
#(?i)(?<=(откры|отпер|запер|взл[оа]м|ключ|двер|отмыч)[^\r\n\.\!\?]{0,30})замок\b=замо
#(?
i)\bзамок)[^\r\n\.\!\?]{0,30}(?<=(откры|отпер|запер|взл[оа]м|ключ|двер|отмыч)=замо<к

выражения найдут слово "замок" в предложении, в котором ранее или позднее в пределах 30 знаков было употреблено одно из кодовых слов (или часть слова).

*служебные символы $ и # в начале шаблонов не отображаются во встроенном редакторе словарей KooBAudio, вместо них используются графические кнопки - переключатели "Чувствительность к регистру" и "RegEx" под текстовым полем шаблона.

Склонение числительных

Особый вид правил - правила склонения числительных:
Шаблон данных правил представляет из себя регулярное выражение, отдельные группы которого, или же все выражение целиком, соответствует числам в тексте. В графе "произношение" используется особая последовательность (функция) для преобразования найденных чисел в текст, с возможностью склонения:
#(группа, падеж, форма)

Группа = идентификатор группы в регулярном выражении:
$& или $0 для соответствия всему выражению целиком
$1 $2 ... $20 и т.д. для нумерованных групп
${имя_группы} для именованных групп.

Падеж: цифра от 1 до 6, или соответствующая буква [ИРДВТП]

Форма: цифра от 0 до 4

    \падеж

форма\    

Именительный
1,И

Родительный
2, Р

Дательный
3, Д

Винительный
4, В

Творительный
5, Т

Предложный
6, П

0 Простое числительное

один

одного

одному

одного

одним

одном

1 Порядковое числительное мужского рода

первый

первого

первому

первого

первым

первом

2 Порядковое числительное женского рода

первая

первой

первой

первую

первой

первой

3 Порядковое числительное среднего рода

первое

первого

первому

первое

первым

первом

4 Порядковое числительное во множественном числе

первые

первых

первым

первых

первыми

первых

 

Примеры:

#(?i)от (\d+) до (\d+)=от #($1,2,0) до #($2,2,0)
от 2 до 5  --> от двух до пяти

#(?i)\bс ?(?<число1>\d+) по ?(?<число2>\d+) ?(?<месяца>января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)=с #(${число1},Р,3) по #(${число2},И,3) ${месяца}
с 1 по 13 января -> с первого по тринадцатое января

#\d+=#($&,1,0)
123456789  -> сто двадцать три миллиона четыреста пятьдесят шесть тысяч семьсот восемьдесят девять 

 

Алгоритм обработки

Начиная с версии 2.0.11.00, KooBAudio использует трехэтапную обработку словарями: Предварительная обработка, словари ударений, постобработка.

В каждой из трех групп обработки может быть добавлено любое количество отдельных файлов словарей в формате *.dic

Файлы словарей  в каждой группе всегда загружаются в алфавитном порядке, например

"01 омографы.dic", "02 общие.dic", "03 части слова.dic", "имена.dic"

Порядок загрузки файлов, а так же порядок, в котором расположены правила внутри словарей, влияет на конечный результат обработки.

В последовательном алгоритме групп Предварительная обработка и постобработка правила применяются «по цепочке». Проводится поиск и замена по первому правилу, результат обработки передается второму правилу, его результат - третьему и так далее…

В выборочном алгоритме группы «словари ударений» индекс правила определяет его «приоритет» в случае конфликтов и перекрытий. Когда определенный фрагмент в обрабатываемом тексте найден сразу несколькими правилами, будет выбрано одно правило с наименьшим индексом (т.е. расположенное выше в общем списке правил).

 

Этапы обработки:

1 "Предварительная обработка"
Словари в данной группе следует использовать для исправлений в тексте пред обработкой основными словарями ударений: удаление "мусора" - разделителей из множества одинаковых символов, нечитаемых символов, и прочего.
Группа использует последовательный алгоритм поиска и замены "по цепочке".

2 "Словари ударений"
Основная группа. Словари в ней предназначены для расстановки ударений в словах, а так же для склонения числительных.
Алгоритм применения правил является "выборочным":
На первом этапе производится последовательный поиск индексов соответствий для каждого правила. При первом нахождении фрагмент текста (слово, часть слова, или словосочетание) «резервируется» за соответствующим правилом. При соответствии более поздних правил тому же самому фрагменту (частично или полностью), их результат не будет учитываться.
Таким образом, правила, расположенные раньше в порядке загрузки обладают более высоким "приоритетом" в очереди. Это позволяет организовать коллекцию словарей таким образом, что наиболее точные правила (например, регулярные выражения для омографов в контексте), расположенные "выше" всегда будут предпочтительнее менее точных ("обобщенных") правил из словарей в конце списка.
Так же этот метод обработки исключает возможность нежелательных замен «по цепочке», когда результат замены одного правила соответствует шаблону другого правила, идущего после него.
Данный алгоритм включает оптимизацию для "простых" правил из одного слова, позволяющую существенно ускорить обработку при большом количестве правил такого вида.
В случае наличия повторных правил (с одинаковым шаблоном) в пределах всей группы, для обработки будет загружен только один экземпляр, расположенный ранее в общем порядке загрузки.

3 "Постобработка"
Применяется после обработки основными словарями ударений. В данную группу можно перенести словари исключений, в которых правила ссылаются на результат обработки предыдущих правил для исправления некорректно расставленных ударений, таких, как «от во<лны=от волны<»
Так же словари данной группы используются для финальной проверки и "шлифовки" текста: чистка текста от мусора, и "проблемных" фрагментов текста, которые могут вызвать зависание голосового движка, или произносятся им некорректно.