rulex

Форк
0
/
README.ru 
412 строк · 28.9 Кб
1
		     СЛОВАРЬ РУССКИХ ПРОИЗНОШЕНИЙ
2

3
Словарь русских произношений RuLex предназначен в первую очередь для
4
совместного использования с синтезатором речи Ru_tts. После его
5
установки достаточно добавлять в строку вызова Ru_tts ключ
6
"-s /usr/local/share/freespeech/rulex.db" и содержимое словаря будет
7
приниматься во внимание при синтезе речи.
8

9

10
			   Базовые понятия
11

12
Основу пакета составляет лексическая база данных, содержащая
13
информацию о произношении слов русского языка. Она в свою очередь
14
состоит из шести наборов данных: двух словарей (прямого и косвенного) и
15
четырех наборов правил (общие правила, классификаторы приставок и
16
окончаний и корректоры). Для записи русских букв используется
17
кодировка koi8-r.
18

19
Прямой словарь содержит информацию о произношении непосредственно
20
входящих в него слов. Косвенный словарь включает в себя слова в так
21
называемой базовой форме. На основе этой информации строится
22
произношения для всевозможных производных форм. Понятие базовой формы
23
здесь условно и не связано с аналогичными понятиями, принятыми в
24
языкознании.
25

26
Общие правила позволяют определить позицию ударения в словах, где
27
это можно сделать, опираясь исключительно на формальные признаки.
28

29
Классификаторами мы здесь называем правила, сопоставляющие производной
30
форме слова базовую. Сюда относятся две группы правил: классификаторы
31
приставок, выделяющие базовую форму посредством обрезания приставки, и
32
классификаторы окончаний, формирующие базовую форму путем унификации
33
окончания.
34

35
Корректоры - это вспомогательная система правил. Они используются на
36
последнем этапе конструирования произношения для внесения необходимых
37
поправок в ряде специальных случаев.
38

39
Словарь представляет из себя набор строк (записей или словарных
40
статей), состоящих из двух полей: Собственно слово и его
41
произношение. Ударная гласная отмечается знаком "+" непосредственно
42
после нее. Можно использовать также знак "=" для обозначения так
43
называемых слабых ударений там, где это может быть целесообразным,
44
например, в некоторых составных словах. Поля отделены друг от друга
45
одним пробелом. В первом поле допускаются лишь малые буквы русского
46
алфавита. Второе может содержать кроме того знаки "+", "=" и "-". Знак
47
"-" используется для разделения некоторых сложных слов.
48

49
Везде далее в тексте термин "словарь" будет подразумевать именно этот
50
формат представления данных.
51

52
Правила также представлены текстовыми строками, состоящими из одного
53
или двух полей. Первое поле - всегда регулярное выражение,
54
определяющее область применения правила. Формат и смысл второго поля
55
различен для разных наборов: в общих правилах второе поле отсутствует,
56
в классификаторах приставок и окончаний это префикс или суффикс
57
базовой формы соответственно (если нужен), а в корректорах это
58
строка регулярной замены.
59

60

61
		   Алгоритм генерации произношений
62

63
Полный цикл поиска информации в лексической базе данных и генерации
64
произношения для заданного слова состоит из четырех стадий.
65

66
1) Слово ищется в прямом словаре. Если поиск оказывается
67
   результативным, из словаря извлекается строка произношения и
68
   осуществляется переход к четвертой стадии.
69

70
2) Слово трактуется как производная форма. Последовательно
71
   просматриваются оба набора классификаторов. Регулярное выражение,
72
   содержащееся в первом поле, сопоставляется с исходным словом и,
73
   если соответствие имеет место, строится базовая форма, которая и
74
   отыскивается в косвенном словаре. Этот процесс продолжается либо до
75
   первого успешного поиска, либо до исчерпания системы
76
   классификаторов. В случае успешного поиска, строка произношения для
77
   исходного слова строится подобно тому, как это сделано в словаре
78
   для базовой формы, после чего осуществляется переход к четвертой
79
   стадии. Базовая форма строится путем замены в исходном слове
80
   подстроки, соответствующей регулярному выражению, содержащемуся в
81
   первом поле, на содержание второго. При этом в случае
82
   классификаторов приставок имеется в виду все регулярное выражение
83
   целиком, в случае же классификаторов окончаний - лишь вторая его
84
   часть, лежащая правее области сопоставления первого подвыражения,
85
   заключенного в скобки.
86

87
3) К слову применяются общие правила. Система правил просматривается
88
   последовательно. Регулярное выражение сопоставляется с исходным
89
   словом и, если обнаружено соответствие, в слово вставляется символ
90
   "+", отмечающий позицию ударения, непосредственно вслед за областью
91
   сопоставления первого подвыражения, заключенного в скобки. Процесс
92
   продолжается до первого удачного сопоставления или до исчерпания
93
   набора правил. Если подходящего правила найти не удается, процесс
94
   считается безрезультатным и бесславно завершается.
95

96
4) Окончательная коррекция строки произношения. Система корректоров
97
   просматривается последовательно. Регулярное выражение, содержащееся
98
   в первом поле, сопоставляется с полученной на предыдущих этапах
99
   строкой произношения. В случае соответствия выполняется регулярная
100
   замена в соответствии с содержимым второго поля. Цифрами в строке
101
   замены обозначаются области сопоставления соответствующих
102
   подвыражений.
103

104

105
			Компиляция и установка
106

107
Исходные тексты всех описанных наборов данных составляют основное
108
содержание подкаталога data. Там же лежит и тестовый словарь,
109
включающий в себя более 400 тысяч слов.
110

111
Чтобы использовать лексическую базу данных, ее необходимо
112
скомпилировать. Так как данный проект использует средства GNU Autotools,
113
прежде всего его нужно сконфигурировать командами:
114

115
autoreconf -ifs
116
./configure
117

118
После чего создание лексической базы выполняется командой:
119

120
make db
121

122
В результате этих действий в подкаталоге data будет создан файл
123
lexicon, содержащий скомпилированную базу данных. Ее можно установить
124
командой:
125

126
make install-db
127

128
А команда
129

130
make install
131

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

135
Разумеется, для выполнения установки необходимы права
136
суперпользователя.
137

138
Перекомпилировать утилиту поддержки можно командой:
139

140
make lexholder
141

142

143
Замечание 1. Чтобы файл базы данных, изготовленный утилитой
144
Lexholder-ru, воспринимался синтезатором Ru_tts, обе программы должны
145
использовать одни и те же библиотеки поддержки баз данных. Версии тоже
146
имеют значение. Вообще говоря, логично ожидать, что файл,
147
изготовленный при помощи библиотеки более старой версии будет читаться
148
процедурами той же библиотеки более новой версии, но это вполне может
149
оказаться и не так. Для динамически скомпилированных исполняемых
150
файлов точную информацию об используемых библиотеках можно получить
151
при помощи команды "ldd".
152

153
Замечание 2. В версиях RuLex начиная с 2.0 используется новый формат
154
лексической базы данных. Синтезатор Ru_tts версий ниже 2.0 с ним
155
работать не будет.
156

157
Замечание 3. При удалении записей из лексической базы данных
158
дисковое пространство не освобождается. Более того, при добавлении
159
новых записей размер базы может неоправданно возрастать. Более
160
компактного представления базы после множественных модификаций можно
161
добиться путем полного ее пересоздания.
162

163

164
			  Утилита поддержки
165

166
Утилита lexholder-ru позволяет модифицировать, удалять и добавлять
167
записи в лексической базе данных из командной строки или скрипта.
168
Она позволяет также извлекать из базы данные во внешнем
169
представлении.
170

171
Формат вызова:
172

173
lexholder-ru [options] <DB_path>
174

175
Параметр <DB_path> - обязательный. Он должен указывать путь к
176
лексической базе данных. При пополнении базы новые данные читаются из
177
потока стандартного ввода. При извлечении данных результаты выводятся
178
в поток стандартного вывода. Однако при помощи ключа "-f" можно
179
указать файл, который будет использоваться вместо стандартных потоков
180
ввода и вывода.
181

182
Для удобства рассмотрения все ключи, воспринимаемые утилитой
183
lexholder-ru в командной строке, логично разбить на несколько групп по
184
принципу их функционального назначения.
185

186
К первой группе относятся ключи, определяющие действие. В командной
187
строке может присутствовать не более одного из них: лишь одна операция
188
выполняется за один вызов. Если никаких действий в командной строке
189
явно не указано, программа читает новые записи из потока стандартного
190
ввода или файла, указанного ключом "-f", и вносит их в базу данных.
191

192
-h -- Краткая справка об использовании программы.
193

194
Все остальное содержимое командной строки полностью игнорируется. Это
195
единственный случай, когда указание пути к базе данных не требуется.
196

197
-l -- Вывод содержимого базы в исходном формате.
198

199
Эта операция требует явного указания набора данных при помощи одного
200
из ключей "-X", "-M", "-G", "-L", "-P" или "-C".
201

202
-s <word> -- Поиск информации о произношении слова <word>.
203

204
В случае успешного поиска строка произношения для заданного слова
205
выводится в поток стандартного вывода или в файл, указанный ключом
206
"-f", и программа возвращает код успешного завершения. Если для
207
данного слова никакой информации в базе данных не нашлось, то в
208
качестве строки произношения возвращается само слово, записанное
209
малыми буквами, и программа завершается с ненулевым кодом
210
возврата. Если в командной строке присутствует ключ "-q", строка
211
произношения не генерируется, но о результатах поиска можно судить по
212
коду завершения программы.
213

214
-b <word> -- Поиск возможных базовых форм для слова <word>.
215

216
Заданное слово трактуется как производная форма и, если ключ "-q" не
217
упомянут в командной строке, конструируются и выводятся все возможные
218
варианты для данного слова, которые могут быть использованы в
219
косвенном словаре, вместе с номерами соответствующих
220
классификаторов окончаний. Классификаторы приставок при этом не
221
используются. Программа завершается успешно, если заданное слово
222
удается трактовать как производную форму. Ключ "-q" подавляет вывод
223
информации. В этом случае о результатах выполнения операции можно
224
судить по коду завершения программы.
225

226
-t <file> -- Проверка лексической базы данных по тестовому словарю.
227

228
Текстовый файл, указываемый в качестве параметра, должен содержать
229
тестовый словарь в формате, описанном выше. Программа сравнивает
230
указанные в тестовом словаре произношения с получаемыми из лексической
231
базы данных и выводит в поток стандартного вывода или в файл, заданный
232
ключом "-f", записи, для которых было обнаружено несоответствие. Если
233
в качестве параметра этого ключа указать "-", тестовый словарь будет
234
читаться из потока стандартного ввода.
235

236
-d <key> -- Удаление из базы данных записи с заданным ключом.
237

238
Эта операция требует явного указания набора данных при помощи одного
239
из ключей "-X", "-M", "-G", "-L", "-P" или "-C". Для правил в качестве
240
ключа используется их порядковый номер в наборе.
241

242
-D -- Удаление набора данных.
243

244
Набор данных необходимо явно указать при помощи одного из ключей "-X",
245
"-M", "-G", "-L", "-P" или "-C". Удаляется полностью все содержимое
246
выбранного набора данных.
247

248
-c -- Очистка базы данных от лишней информации.
249

250
Из базы данных удаляются записи, не оказывающие никакого влияния на
251
результаты полного поиска. Этот процесс затрагивает только словари. Из
252
прямого словаря удаляются записи, дублирующие информацию, которая
253
может быть получена на основании косвенного словаря или системы
254
общих правил. Из косвенного словаря удаляются записи, не являющиеся
255
на самом деле базовыми формами в соответствии с системой
256
классификаторов окончаний. При помощи ключей "-X" и "-M" можно выбрать
257
лишь один из этих словарей, который будет задействован в
258
процессе. Если посредством ключа "-M" выбран словарь базовых форм, из
259
него удаляются также вхождения, которые предположительно могут быть
260
получены путем присоединения известных приставок. В общем случае столь
261
интенсивная очистка является избыточной и приводит к утрате ряда
262
полезных вхождений.
263

264

265
Следующая группа ключей посвящена выбору набора данных. Ключи этой
266
группы являются взаимоисключающими. Они влияют на выполнение операций
267
вставки, удаления и извлечения содержимого базы данных. При удалении и
268
извлечении содержимого набор данных должен быть указан
269
явно. Добавление словарных статей можно выполнять без явного указания
270
словаря. В этом случае новая запись помещается в косвенный словарь,
271
если ее удается трактовать как базовую форму, в противном случае - в
272
прямой словарь. Для правил же необходимо всегда явно указывать
273
набор.
274

275
-X -- Прямой словарь.
276

277
-M -- Косвенный словарь.
278

279
-G -- Общие правила.
280

281
-L -- Классификаторы окончаний.
282

283
-P -- Классификаторы приставок.
284

285
-C -- Корректоры.
286

287

288
следующая группа ключей управляет процессом поиска информации в
289
лексической базе данных, позволяя включать в него лишь те или иные
290
явно заданные стадии. По умолчанию, то есть при отсутствии ключей этой
291
группы в командной строке, выполняется полный цикл, как в Ru_tts. Эти
292
ключи влияют на действия, выполняемые программой при тестировании
293
лексической базы данных и поиске информации в ней.
294

295
-x -- Просматривается прямой словарь.
296

297
-m -- Слово трактуется как производная форма.
298

299
-g -- Используются общие правила.
300

301

302
Следующая группа содержит всего один ключ, определяющий действия,
303
выполняемые программой при вставке новых данных в базу.
304

305
-r -- Режим замены.
306

307
При вставке словарных данных новые словарные статьи заменяют уже
308
существующие с идентичным ключевым полем. По умолчанию такие словарные
309
статьи просто игнорируются. При вставке правил режим замены означает
310
полную замену указанной системы правил. По умолчанию новые правила
311
дописываются в конец набора.
312

313

314
Последняя группа включает в себя ключи, влияющие на поведение
315
программы в целом.
316

317
-f <file> -- Использовать <file> вместо стандартного ввода или вывода.
318

319
-q -- Подавление вывода.
320

321
Этот ключ подавляет вывод результатов поиска и замечаний о
322
записях-дубликатах при вставке.
323

324
-v -- Вывод дополнительной информации.
325

326
Печатается отчет о выполняемых действиях и некоторая статистическая
327
информация.
328

329

330

331
А теперь немного истории.
332

333
Этот словарь, собственно, возник изначально как реализация моей мечты
334
вставить расстановку ударений в Ru_tts. Поиски подходящего словаря
335
ударений в интернете к успеху, увы, не привели. Но тут я вдруг
336
вспомнил, что свободно распространяемый в электронном виде
337
англо-русский словарь Мюллера в одном из своих вариантов содержал
338
расстановку ударений во всех русских словах. Я извлек этот материал и
339
получил немногим более 60000 вхождений. Это было уже что-то, хотя, как
340
оказалось, не слишком густо. Тем не менее, жизнеспособность идеи уже
341
можно было как-то оценить.
342

343
А дальше начался длительный процесс доводки. Ряд слов пришлось
344
исключить, так как ударение в них зависит от контекста, например,
345
"окна", "слова" и тому подобное. Далее оказалось, что ударениями здесь
346
дело отнюдь не ограничивается. Например, такая штука, как "счастливый
347
мужчина". Вылез и еще целый ряд тонкостей.
348

349
Разумеется, я вполне отдаю себе отчет в том, что и сейчас все это
350
весьма далеко от желанного совершенства, но все же уже, пожалуй, можно
351
вынести на суд широкой общественности. По крайней мере, то, как Ru_tts
352
работает с использованием этого словаря, мне нравится заметно больше,
353
чем то, что было до того.
354

355

356
Теперь же я хочу выразить глубочайшую благодарность тем, кто не
357
поленился расставить ударения в словаре Мюллера, а также склонить
358
голову в благодарном поклоне Иванову Геннадию Григорьевичу и своей
359
сестренке Татьяне, которые на начальном этапе самоотверженно взяли на
360
себя львиную долю самой черновой технической работы по корректировке и
361
пополнению словаря.
362

363
Не могу так же не выразить глубокую признательность Сергею Флейтину за
364
новые слова и замечания и, разумеется, Дмитрию Падучих, который не
365
только прислал мне немало новых слов, но и разработал некий механизм,
366
позволяющий несколько автоматизировать процесс их генерации, который я
367
тоже включаю в состав данного дистрибутива. Вот пояснения Дмитрия к
368
этому механизму:
369

370
Я написал небольшую моду для Emacs, чтобы редактировать словари
371
произношений. Главной её особенностью является то, что можно
372
"перемножать" кусочки слов. То есть, находясь в этой моде, можно
373
вызвать буфер, ввести там выражение, например:
374

375
ба+лк | а и е у ой е и ам ами ах
376

377
а Emacs затем вставит в буфер словаря:
378

379
балка ба+лка
380
балкам ба+лкам
381
балками ба+лками
382
балках ба+лках
383
балке ба+лке
384
балки ба+лки
385
балкой ба+лкой
386
балку ба+лку
387

388
Ещё один пример:
389

390
вы* по | нё+с пё+р | . ся
391

392
вынес вы+нес
393
вынесся вы+несся
394
выпер вы+пер
395
выперся вы+перся
396
понес понё+с
397
понесся понё+сся
398
попер попё+р
399
поперся попё+рся
400

401
Чтобы установить, скопируйте rulex.el в директорию, которая есть в
402
load-path, и скомпилируйте его там.
403
Затем в ~/.emacs можно ещё добавить:
404

405
(autoload 'rlex-mode "rulex" nil 'interactive)
406
(add-to-list 'auto-mode-alist '("\\.rle?x\\'" . rlex-mode))
407

408
чтобы файлы с расширением .rlex и .rlx открывались в rlex-mode.
409
____________________________________________________________
410

411

412
Порецкий Игорь, Санкт-Петербург, <poretsky@mlbox.ru>
413

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.