Yurii Paniv commited on
Commit
bf4037f
1 Parent(s): ed1082e

Fix transliterator

Browse files
.coveragerc ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ [run]
2
+ omit =
3
+ # omit anything in a tests directory
4
+ */tests/*
converter.py DELETED
@@ -1,63 +0,0 @@
1
- def to_cyrillic(text):
2
- pass
3
-
4
-
5
- def to_latin(text):
6
- text = text.lower()
7
- cyrillic_mapping = {
8
- "а": "a",
9
- "б": "b",
10
- "в": "v",
11
- "г": "g",
12
- "гъ": "ğ",
13
- "д": "d",
14
- "е": "e",
15
- "ё": "ö",
16
- "ж": "",
17
- "з": "z",
18
- "и": "i",
19
- "й": "y",
20
- "к": "k",
21
- "къ": "q",
22
- "л": "l",
23
- "м": "m",
24
- "н": "n",
25
- "нъ": "ñ",
26
- "о": "o",
27
- "п": "p",
28
- "р": "r",
29
- "с": "s",
30
- "т": "t",
31
- "у": "u",
32
- "ф": "f",
33
- "х": "h",
34
- "ц": "",
35
- "ч": "ç",
36
- "дж": "c",
37
- "ш": "ş",
38
- "щ": "",
39
- "ъ": "",
40
- "ы": "ı",
41
- "ь": "",
42
- "э": "e",
43
- "ю": "ü",
44
- "я": "ya",
45
- "ку": "kü", # non-letter replacements starts here
46
- "узю": "üzü",
47
- "ур": "ür",
48
- "ля": "lâ",
49
- "уту": "utu",
50
- "ие": "iye",
51
- "ко": "kö",
52
- "мю": "mü",
53
- "ол": "öl",
54
- "къу": "qu",
55
- "cю": "sü",
56
- "ёкъ": "yoq",
57
- "юв": "yuv",
58
- "уз": "üz",
59
- }
60
-
61
- for key in sorted(cyrillic_mapping.keys(), key=lambda x: len(x), reverse=True):
62
- text = text.replace(key, cyrillic_mapping[key])
63
- return text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
crh_transliterator/cyr_to_lat.py CHANGED
@@ -11,7 +11,7 @@ mappings = [
11
  # борнен
12
  ["борнен", "bornen"],
13
  # бугунь
14
- ["([\s\"'\(\)\-.,:;!?>\]])бугун", "\1bugün"],
15
  # бузкесен
16
  ["бузкесен", "buzkesen"],
17
  # буксир
@@ -38,7 +38,7 @@ mappings = [
38
  # формы глагола буюмек
39
  ["бую([гдйлмнпрстчшc])(и)", "büyü\1\2"],
40
  # буюп
41
- ["([\s\"'\(\)\-.,:;!?>\]])буюп([\s\"'.,:;!?\)\-\[<])", "\1büyüp\2"],
42
  # буют
43
  ["буют([^ыа])", "büyüt\1"],
44
  # гонъюль
@@ -74,11 +74,11 @@ mappings = [
74
  ["койдеки([\s\"'.,:;!?\)\-\[<])", "köydeki\1"],
75
  ["койден([\s\"'.,:;!?\)\-\[<])", "köyden\1"],
76
  ["койлю", "köylü"],
77
- ["([\s\"'\(\)\-.,:;!?>\]])кою", "\1köyü"],
78
  # ком-кок
79
- ["([\s\"'\(\)\-.,:;!?>\]])ком-кок", "\1köm-kök"],
80
  # кок
81
- ["([\s\"'\(\)\-.,:;!?>\]])кок([^еёюяЕЁЮЯ])", "\1kök\2"],
82
  # кокос
83
  ["кокос", "kokos"],
84
  # коллега и однокоренные
@@ -143,7 +143,7 @@ mappings = [
143
  # копия
144
  ["копия", "kopiya"],
145
  # коп
146
- ["([\s\"'\(\)\-.,:;!?>\]])коп([^еёюяЕЁЮЯ])", "\1köp\2"],
147
  # корея
148
  ["корея", "koreya"],
149
  # корректор, корреспондент
@@ -163,7 +163,7 @@ mappings = [
163
  # коше
164
  ["коше", "köşe"],
165
  # куе
166
- ["([\s\"'\(\)\-.,:;!?>\]])куе", "\1küye"],
167
  # кулинар
168
  ["кулинар", "kulinar"],
169
  # кульминация
@@ -173,12 +173,12 @@ mappings = [
173
  # культура
174
  ["культура", "kultura"],
175
  # курьк
176
- ["([\s\"'\(\)\-.,:;!?>\]])курк([\s\"'.,:;!?\)\-\[<])", "\1kürk\2"],
177
- ["([\s\"'\(\)\-.,:;!?>\]])куркке", "\1kürkke"],
178
- ["([\s\"'\(\)\-.,:;!?>\]])куркни", "\1kürkni"],
179
- ["([\s\"'\(\)\-.,:;!?>\]])куркте", "\1kürkte"],
180
- ["([\s\"'\(\)\-.,:;!?>\]])куркчи", "\1kürkçi"],
181
- ["([\s\"'\(\)\-.,:;!?>\]])куркчю", "\1kürkçü"],
182
  # курсив
183
  ["курсив", "kursiv"],
184
  # кушкулемек и однокоренные
@@ -203,7 +203,7 @@ mappings = [
203
  # нумюне
204
  ["нумюне", "nümüne"],
205
  # ог
206
- ['(["\s(-])ог([^ъ])', "\1öг\2"],
207
  # одеколон
208
  ["одеколон", "odekolon"],
209
  # океан
@@ -221,7 +221,7 @@ mappings = [
221
  ["опция", "optsiya"],
222
  ["опци", "optsi"],
223
  # орден и ордер
224
- ["([\s\"'\(\)\-.,:;!?>\]])орде([нр])", "\1orde\2"],
225
  # оригинал
226
  ["оригинал", "original"],
227
  # ориентир
@@ -247,11 +247,11 @@ mappings = [
247
  # ультра
248
  ["ультра", "ultra"],
249
  # уника
250
- ["([\s\"'\(\)\-.,:;!?>\]])уник", "\1unik"],
251
  # универcаль, универмаг, университет
252
  ["универ", "univer"],
253
  # унтер
254
- ["([\s\"'\(\)\-.,:;!?>\]])унтер", "\1unter"],
255
  # урьян
256
  ["урьян", "uryan"],
257
  # джонк
@@ -269,62 +269,62 @@ mappings = [
269
  ["шунен", "şunen"],
270
  ["шуннен", "şunnen"],
271
  # юз
272
- ["([\s\"'\(\)\-.,:;!?>\]])юз([\s\"'.,:;!?\)\-\[<])", "\1yüz\2"],
273
  # юзбашы
274
- ["([\s\"'\(\)\-.,:;!?>\]])юзбашы", "\1yüzbaşı"],
275
  # юзйыллыкъ
276
- ["([\s\"'\(\)\-.,:;!?>\]])юзйыл", "\1yüzyıl"],
277
  # юк
278
- ["([\s\"'\(\)\-.,:;!?>\]])юк([^ъ])", "\1yüк\2"],
279
  # юрип
280
- ["([\s\"'\(\)\-.,:;!?>\]])юрип", "\1yürip"],
281
  # 3-юнджи, 4-юнджи
282
- ["([34])-юнджи", "\1-ünci"],
283
  # некоторые глагольные фо��мы на -ама, -алма
284
  # букама, букалма
285
- ["([\s\"'\(\)\-.,:;!?>\]])букама", "\1bükama"],
286
- ["([\s\"'\(\)\-.,:;!?>\]])букалма", "\1bükalma"],
287
  # комама, комалма
288
- ["([\s\"'\(\)\-.,:;!?>\]])комама", "\1kömama"],
289
- ["([\s\"'\(\)\-.,:;!?>\]])комалма", "\1kömalma"],
290
  # корама, коралма
291
- ["([\s\"'\(\)\-.,:;!?>\]])корама", "\1körama"],
292
- ["([\s\"'\(\)\-.,:;!?>\]])коралма", "\1köralma"],
293
  # кочама, кочалма
294
- ["([\s\"'\(\)\-.,:;!?>\]])кочама", "\1köçama"],
295
- ["([\s\"'\(\)\-.,:;!?>\]])кочалма", "\1köçalma"],
296
  # куяма, куялма
297
- ["([\s\"'\(\)\-.,:;!?>\]])куяма", "\1küyama"],
298
- ["([\s\"'\(\)\-.,:;!?>\]])куялма", "\1küyalma"],
299
  # кулама, кулалма
300
- # [ "([\s\"'\(\)\-.,:;!?>\]])кулама", "\1külama" ],
301
- # [ "([\s\"'\(\)\-.,:;!?>\]])кулалма", "\1külalma" ],
302
  # кусама, кусалма
303
- ["([\s\"'\(\)\-.,:;!?>\]])кусама", "\1küsama"],
304
- ["([\s\"'\(\)\-.,:;!?>\]])кусалма", "\1küsalma"],
305
  # кутама, куталма
306
- ["([\s\"'\(\)\-.,:;!?>\]])кутама", "\1kütama"],
307
- ["([\s\"'\(\)\-.,:;!?>\]])куталма", "\1kütalma"],
308
  # опама, опалма
309
- ["([\s\"'\(\)\-.,:;!?>\]])опама", "\1öpama"],
310
- ["([\s\"'\(\)\-.,:;!?>\]])опалма", "\1öpalma"],
311
  # осама, осалма
312
- ["([\s\"'\(\)\-.,:;!?>\]])осама", "\1ösama"],
313
- ["([\s\"'\(\)\-.,:;!?>\]])осалма", "\1ösalma"],
314
  # отама, оталма
315
- # [ "([\s\"'\(\)\-.,:;!?>\]])отама", "\1ötama" ],
316
- ["([\s\"'\(\)\-.,:;!?>\]])оталма", "\1ötalma"],
317
  # узама, узалма
318
- # [ "([\s\"'\(\)\-.,:;!?>\]])узама", "\1üzama" ],
319
- ["([\s\"'\(\)\-.,:;!?>\]])узалма", "\1üzalma"],
320
  # утама, уталма
321
- ["([\s\"'\(\)\-.,:;!?>\]])утама", "\1ütama"],
322
- ["([\s\"'\(\)\-.,:;!?>\]])уталма", "\1ütalma"],
323
  # Имена собственные
324
  ["аджыумер", "acıümer"],
325
  ["аджыусеин", "acıüsein"],
326
  ["боливия", "boliviya"],
327
- ["([\s\"'\(\)\-.,:;!?>\]])ишунь", "\1işün"],
328
  ["корбекул", "körbekül"],
329
  ["корьбекул", "körbekül"],
330
  ["куркулет", "kürkület"],
@@ -345,14 +345,14 @@ mappings = [
345
  ["юртер", "yurter"],
346
  ["ющенко", "yuşçenko"],
347
  # -ьон
348
- ["([^\s])ьон", "\1yon"],
349
  # Я
350
  [
351
  "([\s\"'\(\)\-.,:;!?>\]])Я([\s\"'.,:;!?\)\-\[<])",
352
- "\1Ya\2",
353
  ], # TODO: check why there is no case for small letters
354
  # Ё
355
- ["([\s\"'\(\)\-.,:;!?>\]])Ё([\s\"'.,:;!?\)\-\[<])", "\1Yo\2"],
356
  # йе
357
  ["йе", "yye"],
358
  # йя
@@ -363,26 +363,26 @@ mappings = [
363
  ["нъ", "ñ"],
364
  ["дж", "c"],
365
  # 2. o', u' первый заход - ё и ю после согласных
366
- ["([бвгджзйклмнпрстфхцчшщñcБВГДЖЗЙКЛМНПРСТФХЦЧШЩÑC])ю", "\1ü"],
367
- ["([бвгджзйклмнпрстфхцчшщñcБВГДЖЗЙКЛМНПРСТФХЦЧШЩÑC])ё", "\1ö"],
368
  # 3. o', u' второй заход
369
  # буква u'
370
  # ю
371
  [
372
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёюАЫОУЕИЁЮ])ю([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеюэü])',
373
- "\1yü\2\3\4",
374
  ],
375
  [
376
  '([\s"\'\(\)\-.,:;!?>\]"АЫОУЕИЁЮ])Ю([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ЬЕЮЭÜ])',
377
- "\1YÜ\2\3\4",
378
  ],
379
  [
380
  '([\s"\'\(\)\-.,:;!?>\]"(аыоуеиёюАЫОУЕИЁЮ])ю([бвгджзйклмнпрстфхцчшщcñ])([ьеюэü])',
381
- "\1yü\2\3",
382
  ],
383
  [
384
  '([\s"\'\(\)\-.,:;!?>\]"(АЫОУЕИЁЮ])Ю([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ЬЕЮЭÜ])',
385
- "\1YÜ\2\3",
386
  ],
387
  ["ю([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеюэü])", "yü\1\2\3"],
388
  ["ю([бвгджзйклмнпрстфхцчшщcñ])([ьеюэü])", "yü\1\2"],
@@ -391,163 +391,163 @@ mappings = [
391
  # строчная у
392
  [
393
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПCШ])у([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
394
- "\1\2ü\3\4\5",
395
  ],
396
  [
397
  "([\s\"'\(\)\-.,:;!?>\]])у([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
398
- "\1ü\2\3\4",
399
  ],
400
  [
401
  "([\s\"'\(\)\-.,:;!?>\]])ую([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
402
- "\1üyü\2\3\4",
403
  ],
404
  # заглавная У
405
  [
406
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])У([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
407
- "\1\2Ü\3\4\5",
408
  ],
409
  [
410
  "([\s\"'\(\)\-.,:;!?>\]])У([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
411
- "\1Ü\2\3\4",
412
  ],
413
  [
414
  "([\s\"'\(\)\-.,:;!?>\]])Ую([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
415
- "\1Üyü\2\3\4",
416
  ],
417
  [
418
  "([\s\"'\(\)\-.,:;!?>\]])УЮ([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
419
- "\1ÜYÜ\2\3\4",
420
  ],
421
  # после у или ую одна согласная
422
  # строчная у
423
  [
424
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])у([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])",
425
- "\1\2ü\3\4",
426
  ],
427
- ["([\s\"'\(\)\-.,:;!?>\]])у([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])", "\1ü\2\3"],
428
- ["([\s\"'\(\)\-.,:;!?>\]])ую([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])", "\1üyü\2\3"],
429
  # заглавная У
430
  [
431
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])У([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
432
- "\1\2Ü\3\4",
433
  ],
434
  [
435
  "([\s\"'\(\)\-.,:;!?>\]])У([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
436
- "\1Ü\2\3",
437
  ],
438
  [
439
  "([\s\"'\(\)\-.,:;!?>\]])Ую([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
440
- "\1Üyü\2\3",
441
  ],
442
  [
443
  "([\s\"'\(\)\-.,:;!?>\]])УЮ([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
444
- "\1ÜYÜ\2\3",
445
  ],
446
  # ещё один заход (не помню уже точно для чего он, но для чего-то нужен)
447
  [
448
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])у([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])",
449
- "\1\2ü\3\4",
450
  ],
451
- ["([\s\"'\(\)\-.,:;!?>\]])у([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])", "\1ü\2\3"],
452
  [
453
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])У([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
454
- "\1\2Ü\3\4",
455
  ],
456
  [
457
  "([\s\"'\(\)\-.,:;!?>\]])У([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
458
- "\1Ü\2\3",
459
  ],
460
  # арабские слова на муи- муэ-
461
- ["([\s\"'\(\)\-.,:;!?>\]])му([иэ])", "\1mü\2"],
462
  # буква o'
463
  # ё
464
  [
465
  "([\s\"'\(\)\-.,:;!?>\]])ё([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеюü])",
466
- "\1yö\2\3\4",
467
  ],
468
  [
469
  "([\s\"'\(\)\-.,:;!?>\]])Ё([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеюü])",
470
- "\1Yö\2\3\4",
471
  ],
472
  [
473
  "([\s\"'\(\)\-.,:;!?>\]])Ё([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ЬЕЮÜ])",
474
- "\1YÖ\2\3\4",
475
  ],
476
- ["([\s\"'\(\)\-.,:;!?>\]])ё([бвгджзйклмнпрстфхцчшщcñ])([ьеёюэü])", "\1yö\2\3"],
477
  # о
478
  # после о две согласных
479
  [
480
  "([\s\"'\(\)\-.,:;!?>\]])([бгкшcБГКШC])о([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
481
- "\1\2ö\3\4\5",
482
  ],
483
  [
484
  "([\s\"'\(\)\-.,:;!?>\]])о([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
485
- "\1ö\2\3\4",
486
  ],
487
  [
488
  "([\s\"'\(\)\-.,:;!?>\]])([-\s\"'(бгкшcБГКШC])О([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
489
- "\1\2Ö\3\4\5",
490
  ],
491
  # после о одна согласная
492
  [
493
  "([\s\"'\(\)\-.,:;!?>\]])О([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
494
- "\1Ö\2\3\4",
495
  ],
496
  [
497
  "([\s\"'\(\)\-.,:;!?>\]])([-\s\"'(бгкшcБГКШC])о([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
498
- "\1\2ö\3\4",
499
  ],
500
- ["([\s\"'\(\)\-.,:;!?>\]])о([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])", "\1ö\2\3"],
501
  [
502
  "([\s\"'\(\)\-.,:;!?>\]])([-\s\"'(бгкшcБГКШC])О([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
503
- "\1\2Ö\3\4",
504
  ],
505
  [
506
  "([\s\"'\(\)\-.,:;!?>\]])О([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
507
- "\1Ö\2\3",
508
  ],
509
  # 4. o', u' третий заход
510
- ["([бвгджзйклмнпрстфхцчшщcñ])ю", "\1ü"],
511
- ["([бвгджзйклмнпрстфхцчшщcñ])ё", "\1ö"],
512
  # 5. o', u' четвёртый заход
513
- ["([ьеёюэöü])ю", "\1yü"],
514
  # 6. буквы е и я
515
  # случаи е -> ye и я -> ya
516
- ['([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöüeАЫОУЕИЁЭЮЯЬЪÖÜE(])е', "\1ye"],
517
  [
518
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöüeАЫОУЕИЁЭЮЯЬЪÖÜE(])Е([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQCĞÑÜÖ\s"\'.,:;!?\)\-\[<])',
519
- "\1YE\2",
520
  ],
521
  [
522
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöÜeАЫОЯУЕИЁЭЮЯЬЪÖÜE(])Е([абвгдеёжзийклмнопрстуфхцчшщъыьэюяqcğñüö])',
523
- "\1Ye\2",
524
  ],
525
- ['([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪE(])я', "\1ya"],
526
  [
527
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪE(])Я([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQCĞÑÜÖ\s"\'.,:;!?\)\-\[<])',
528
- "\1YA\2",
529
  ],
530
  [
531
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪE(])Я([абвгдеёжзийклмнопрстуфхцчшщъыьэюяqcğñüö])',
532
- "\1Ya\2",
533
  ],
534
- ['([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöüaeАЫОУЕИЁЭЮЯЬЪÖÜAE(])е', "\1ye"],
535
  [
536
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöüaeАЫОУЕИЁЭЮЯЬЪÖÜAE(])Е([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQCĞÑÜÖ\s"\'.,:;!?\)\-\[<])',
537
- "\1YE\2",
538
  ],
539
  [
540
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöÜaeАЫОУЕИЁЭЮЯЬЪÖÜAE(])Е([абвгдеёжзийклмнопрстуфхцчшщъыьэюяqcğñüö])',
541
- "\1Ye\2",
542
  ],
543
- ['([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъaeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪAE(])я', "\1ya"],
544
  [
545
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъaeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪAE(])Я([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQCĞÑÜÖ\s"\'.,:;!?\)\-\[<])',
546
- "\1YA\2",
547
  ],
548
  [
549
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъaeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪAE(])Я([абвгдеёжзийклмнопрстуфхцчшщъыьэюяqcğñüö])',
550
- "\1Ya\2",
551
  ],
552
  # остальные вхождения е и я
553
  ["е", "e"],
 
11
  # борнен
12
  ["борнен", "bornen"],
13
  # бугунь
14
+ ["([\s\"'\(\)\-.,:;!?>\]])бугун", r"\1bugün"],
15
  # бузкесен
16
  ["бузкесен", "buzkesen"],
17
  # буксир
 
38
  # формы глагола буюмек
39
  ["бую([гдйлмнпрстчшc])(и)", "büyü\1\2"],
40
  # буюп
41
+ ["([\s\"'\(\)\-.,:;!?>\]])буюп([\s\"'.,:;!?\)\-\[<])", r"\1büyüp\2"],
42
  # буют
43
  ["буют([^ыа])", "büyüt\1"],
44
  # гонъюль
 
74
  ["койдеки([\s\"'.,:;!?\)\-\[<])", "köydeki\1"],
75
  ["койден([\s\"'.,:;!?\)\-\[<])", "köyden\1"],
76
  ["койлю", "köylü"],
77
+ ["([\s\"'\(\)\-.,:;!?>\]])кою", r"\1köyü"],
78
  # ком-кок
79
+ ["([\s\"'\(\)\-.,:;!?>\]])ком-кок", r"\1köm-kök"],
80
  # кок
81
+ ["([\s\"'\(\)\-.,:;!?>\]])кок([^еёюяЕЁЮЯ])", r"\1kök\2"],
82
  # кокос
83
  ["кокос", "kokos"],
84
  # коллега и однокоренные
 
143
  # копия
144
  ["копия", "kopiya"],
145
  # коп
146
+ ["([\s\"'\(\)\-.,:;!?>\]])коп([^еёюяЕЁЮЯ])", r"\1köp\2"],
147
  # корея
148
  ["корея", "koreya"],
149
  # корректор, корреспондент
 
163
  # коше
164
  ["коше", "köşe"],
165
  # куе
166
+ ["([\s\"'\(\)\-.,:;!?>\]])куе", r"\1küye"],
167
  # кулинар
168
  ["кулинар", "kulinar"],
169
  # кульминация
 
173
  # культура
174
  ["культура", "kultura"],
175
  # курьк
176
+ ["([\s\"'\(\)\-.,:;!?>\]])курк([\s\"'.,:;!?\)\-\[<])", r"\1kürk\2"],
177
+ ["([\s\"'\(\)\-.,:;!?>\]])куркке", r"\1kürkke"],
178
+ ["([\s\"'\(\)\-.,:;!?>\]])куркни", r"\1kürkni"],
179
+ ["([\s\"'\(\)\-.,:;!?>\]])куркте", r"\1kürkte"],
180
+ ["([\s\"'\(\)\-.,:;!?>\]])куркчи", r"\1kürkçi"],
181
+ ["([\s\"'\(\)\-.,:;!?>\]])куркчю", r"\1kürkçü"],
182
  # курсив
183
  ["курсив", "kursiv"],
184
  # кушкулемек и однокоренные
 
203
  # нумюне
204
  ["нумюне", "nümüne"],
205
  # ог
206
+ ['(["\s(-])ог([^ъ])', r"\1öг\2"],
207
  # одеколон
208
  ["одеколон", "odekolon"],
209
  # океан
 
221
  ["опция", "optsiya"],
222
  ["опци", "optsi"],
223
  # орден и ордер
224
+ ["([\s\"'\(\)\-.,:;!?>\]])орде([нр])", r"\1orde\2"],
225
  # оригинал
226
  ["оригинал", "original"],
227
  # ориентир
 
247
  # ультра
248
  ["ультра", "ultra"],
249
  # уника
250
+ ["([\s\"'\(\)\-.,:;!?>\]])уник", r"\1unik"],
251
  # универcаль, универмаг, университет
252
  ["универ", "univer"],
253
  # унтер
254
+ ["([\s\"'\(\)\-.,:;!?>\]])унтер", r"\1unter"],
255
  # урьян
256
  ["урьян", "uryan"],
257
  # джонк
 
269
  ["шунен", "şunen"],
270
  ["шуннен", "şunnen"],
271
  # юз
272
+ ["([\s\"'\(\)\-.,:;!?>\]])юз([\s\"'.,:;!?\)\-\[<])", r"\1yüz\2"],
273
  # юзбашы
274
+ ["([\s\"'\(\)\-.,:;!?>\]])юзбашы", r"\1yüzbaşı"],
275
  # юзйыллыкъ
276
+ ["([\s\"'\(\)\-.,:;!?>\]])юзйыл", r"\1yüzyıl"],
277
  # юк
278
+ ["([\s\"'\(\)\-.,:;!?>\]])юк([^ъ])", r"\1yüк\2"],
279
  # юрип
280
+ ["([\s\"'\(\)\-.,:;!?>\]])юрип", r"\1yürip"],
281
  # 3-юнджи, 4-юнджи
282
+ ["([34])-юнджи", r"\1-ünci"],
283
  # некоторые глагольные фо��мы на -ама, -алма
284
  # букама, букалма
285
+ ["([\s\"'\(\)\-.,:;!?>\]])букама", r"\1bükama"],
286
+ ["([\s\"'\(\)\-.,:;!?>\]])букалма", r"\1bükalma"],
287
  # комама, комалма
288
+ ["([\s\"'\(\)\-.,:;!?>\]])комама", r"\1kömama"],
289
+ ["([\s\"'\(\)\-.,:;!?>\]])комалма", r"\1kömalma"],
290
  # корама, коралма
291
+ ["([\s\"'\(\)\-.,:;!?>\]])корама", r"\1körama"],
292
+ ["([\s\"'\(\)\-.,:;!?>\]])коралма", r"\1köralma"],
293
  # кочама, кочалма
294
+ ["([\s\"'\(\)\-.,:;!?>\]])кочама", r"\1köçama"],
295
+ ["([\s\"'\(\)\-.,:;!?>\]])кочалма", r"\1köçalma"],
296
  # куяма, куялма
297
+ ["([\s\"'\(\)\-.,:;!?>\]])куяма", r"\1küyama"],
298
+ ["([\s\"'\(\)\-.,:;!?>\]])куялма", r"\1küyalma"],
299
  # кулама, кулалма
300
+ # [ "([\s\"'\(\)\-.,:;!?>\]])кулама", r"\1külama" ],
301
+ # [ "([\s\"'\(\)\-.,:;!?>\]])кулалма", r"\1külalma" ],
302
  # кусама, кусалма
303
+ ["([\s\"'\(\)\-.,:;!?>\]])кусама", r"\1küsama"],
304
+ ["([\s\"'\(\)\-.,:;!?>\]])кусалма", r"\1küsalma"],
305
  # кутама, куталма
306
+ ["([\s\"'\(\)\-.,:;!?>\]])кутама", r"\1kütama"],
307
+ ["([\s\"'\(\)\-.,:;!?>\]])куталма", r"\1kütalma"],
308
  # опама, опалма
309
+ ["([\s\"'\(\)\-.,:;!?>\]])опама", r"\1öpama"],
310
+ ["([\s\"'\(\)\-.,:;!?>\]])опалма", r"\1öpalma"],
311
  # осама, осалма
312
+ ["([\s\"'\(\)\-.,:;!?>\]])осама", r"\1ösama"],
313
+ ["([\s\"'\(\)\-.,:;!?>\]])осалма", r"\1ösalma"],
314
  # отама, оталма
315
+ # [ "([\s\"'\(\)\-.,:;!?>\]])отама", r"\1ötama" ],
316
+ ["([\s\"'\(\)\-.,:;!?>\]])оталма", r"\1ötalma"],
317
  # узама, узалма
318
+ # [ "([\s\"'\(\)\-.,:;!?>\]])узама", r"\1üzama" ],
319
+ ["([\s\"'\(\)\-.,:;!?>\]])узалма", r"\1üzalma"],
320
  # утама, уталма
321
+ ["([\s\"'\(\)\-.,:;!?>\]])утама", r"\1ütama"],
322
+ ["([\s\"'\(\)\-.,:;!?>\]])уталма", r"\1ütalma"],
323
  # Имена собственные
324
  ["аджыумер", "acıümer"],
325
  ["аджыусеин", "acıüsein"],
326
  ["боливия", "boliviya"],
327
+ ["([\s\"'\(\)\-.,:;!?>\]])ишунь", r"\1işün"],
328
  ["корбекул", "körbekül"],
329
  ["корьбекул", "körbekül"],
330
  ["куркулет", "kürkület"],
 
345
  ["юртер", "yurter"],
346
  ["ющенко", "yuşçenko"],
347
  # -ьон
348
+ ["([^\s])ьон", r"\1yon"],
349
  # Я
350
  [
351
  "([\s\"'\(\)\-.,:;!?>\]])Я([\s\"'.,:;!?\)\-\[<])",
352
+ r"\1Ya\2",
353
  ], # TODO: check why there is no case for small letters
354
  # Ё
355
+ ["([\s\"'\(\)\-.,:;!?>\]])Ё([\s\"'.,:;!?\)\-\[<])", r"\1Yo\2"],
356
  # йе
357
  ["йе", "yye"],
358
  # йя
 
363
  ["нъ", "ñ"],
364
  ["дж", "c"],
365
  # 2. o', u' первый заход - ё и ю после согласных
366
+ [r"([бвгджзйклмнпрстфхцчшщñcБВГДЖЗЙКЛМНПРСТФХЦЧШЩÑC])ю", r"\1ü"],
367
+ [r"([бвгджзйклмнпрстфхцчшщñcБВГДЖЗЙКЛМНПРСТФХЦЧШЩÑC])ё", r"\1ö"],
368
  # 3. o', u' второй заход
369
  # буква u'
370
  # ю
371
  [
372
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёюАЫОУЕИЁЮ])ю([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеюэü])',
373
+ r"\1yü\2\3\4",
374
  ],
375
  [
376
  '([\s"\'\(\)\-.,:;!?>\]"АЫОУЕИЁЮ])Ю([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ЬЕЮЭÜ])',
377
+ r"\1YÜ\2\3\4",
378
  ],
379
  [
380
  '([\s"\'\(\)\-.,:;!?>\]"(аыоуеиёюАЫОУЕИЁЮ])ю([бвгджзйклмнпрстфхцчшщcñ])([ьеюэü])',
381
+ r"\1yü\2\3",
382
  ],
383
  [
384
  '([\s"\'\(\)\-.,:;!?>\]"(АЫОУЕИЁЮ])Ю([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ЬЕЮЭÜ])',
385
+ r"\1YÜ\2\3",
386
  ],
387
  ["ю([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеюэü])", "yü\1\2\3"],
388
  ["ю([бвгджзйклмнпрстфхцчшщcñ])([ьеюэü])", "yü\1\2"],
 
391
  # строчная у
392
  [
393
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПCШ])у([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
394
+ r"\1\2ü\3\4\5",
395
  ],
396
  [
397
  "([\s\"'\(\)\-.,:;!?>\]])у([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
398
+ r"\1ü\2\3\4",
399
  ],
400
  [
401
  "([\s\"'\(\)\-.,:;!?>\]])ую([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
402
+ r"\1üyü\2\3\4",
403
  ],
404
  # заглавная У
405
  [
406
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])У([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
407
+ r"\1\2Ü\3\4\5",
408
  ],
409
  [
410
  "([\s\"'\(\)\-.,:;!?>\]])У([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
411
+ r"\1Ü\2\3\4",
412
  ],
413
  [
414
  "([\s\"'\(\)\-.,:;!?>\]])Ую([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
415
+ r"\1Üyü\2\3\4",
416
  ],
417
  [
418
  "([\s\"'\(\)\-.,:;!?>\]])УЮ([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
419
+ r"\1ÜYÜ\2\3\4",
420
  ],
421
  # после у или ую одна согласная
422
  # строчная у
423
  [
424
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])у([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])",
425
+ r"\1\2ü\3\4",
426
  ],
427
+ ["([\s\"'\(\)\-.,:;!?>\]])у([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])", r"\1ü\2\3"],
428
+ ["([\s\"'\(\)\-.,:;!?>\]])ую([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])", r"\1üyü\2\3"],
429
  # заглавная У
430
  [
431
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])У([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
432
+ r"\1\2Ü\3\4",
433
  ],
434
  [
435
  "([\s\"'\(\)\-.,:;!?>\]])У([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
436
+ r"\1Ü\2\3",
437
  ],
438
  [
439
  "([\s\"'\(\)\-.,:;!?>\]])Ую([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
440
+ r"\1Üyü\2\3",
441
  ],
442
  [
443
  "([\s\"'\(\)\-.,:;!?>\]])УЮ([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
444
+ r"\1ÜYÜ\2\3",
445
  ],
446
  # ещё один заход (не помню уже точно для чего он, но для чего-то нужен)
447
  [
448
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])у([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])",
449
+ r"\1\2ü\3\4",
450
  ],
451
+ ["([\s\"'\(\)\-.,:;!?>\]])у([бвгджзйклмнпрстфхцчшщycñ])([ьеёиюэü])", r"\1ü\2\3"],
452
  [
453
  "([\s\"'\(\)\-.,:;!?>\]])([бгкмпшcБГКМПШC])У([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
454
+ r"\1\2Ü\3\4",
455
  ],
456
  [
457
  "([\s\"'\(\)\-.,:;!?>\]])У([бвгджзйклмнпрстфхцчшщcñyБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюüэЬЕЁИЮЭÜ])",
458
+ r"\1Ü\2\3",
459
  ],
460
  # арабские слова на муи- муэ-
461
+ ["([\s\"'\(\)\-.,:;!?>\]])му([иэ])", r"\1mü\2"],
462
  # буква o'
463
  # ё
464
  [
465
  "([\s\"'\(\)\-.,:;!?>\]])ё([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеюü])",
466
+ r"\1yö\2\3\4",
467
  ],
468
  [
469
  "([\s\"'\(\)\-.,:;!?>\]])Ё([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеюü])",
470
+ r"\1Yö\2\3\4",
471
  ],
472
  [
473
  "([\s\"'\(\)\-.,:;!?>\]])Ё([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ЬЕЮÜ])",
474
+ r"\1YÖ\2\3\4",
475
  ],
476
+ ["([\s\"'\(\)\-.,:;!?>\]])ё([бвгджзйклмнпрстфхцчшщcñ])([ьеёюэü])", r"\1yö\2\3"],
477
  # о
478
  # после о две согласных
479
  [
480
  "([\s\"'\(\)\-.,:;!?>\]])([бгкшcБГКШC])о([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
481
+ r"\1\2ö\3\4\5",
482
  ],
483
  [
484
  "([\s\"'\(\)\-.,:;!?>\]])о([бвгджзйклмнпрстфхцчшщcñ])([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
485
+ r"\1ö\2\3\4",
486
  ],
487
  [
488
  "([\s\"'\(\)\-.,:;!?>\]])([-\s\"'(бгкшcБГКШC])О([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
489
+ r"\1\2Ö\3\4\5",
490
  ],
491
  # после о одна согласная
492
  [
493
  "([\s\"'\(\)\-.,:;!?>\]])О([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
494
+ r"\1Ö\2\3\4",
495
  ],
496
  [
497
  "([\s\"'\(\)\-.,:;!?>\]])([-\s\"'(бгкшcБГКШC])о([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])",
498
+ r"\1\2ö\3\4",
499
  ],
500
+ ["([\s\"'\(\)\-.,:;!?>\]])о([бвгджзйклмнпрстфхцчшщcñ])([ьеёиюэü])", r"\1ö\2\3"],
501
  [
502
  "([\s\"'\(\)\-.,:;!?>\]])([-\s\"'(бгкшcБГКШC])О([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
503
+ r"\1\2Ö\3\4",
504
  ],
505
  [
506
  "([\s\"'\(\)\-.,:;!?>\]])О([бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ])([ьеёиюэüЬЕЁИЮЭÜ])",
507
+ r"\1Ö\2\3",
508
  ],
509
  # 4. o', u' третий заход
510
+ ["([бвгджзйклмнпрстфхцчшщcñ])ю", r"\1ü"],
511
+ ["([бвгджзйклмнпрстфхцчшщcñ])ё", r"\1ö"],
512
  # 5. o', u' четвёртый заход
513
+ ["([ьеёюэöü])ю", r"\1yü"],
514
  # 6. буквы е и я
515
  # случаи е -> ye и я -> ya
516
+ ['([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöüeАЫОУЕИЁЭЮЯЬЪÖÜE(])е', r"\1ye"],
517
  [
518
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöüeАЫОУЕИЁЭЮЯЬЪÖÜE(])Е([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQCĞÑÜÖ\s"\'.,:;!?\)\-\[<])',
519
+ r"\1YE\2",
520
  ],
521
  [
522
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöÜeАЫОЯУЕИЁЭЮЯЬЪÖÜE(])Е([абвгдеёжзийклмнопрстуфхцчшщъыьэюяqcğñüö])',
523
+ r"\1Ye\2",
524
  ],
525
+ ['([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪE(])я', r"\1ya"],
526
  [
527
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪE(])Я([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQCĞÑÜÖ\s"\'.,:;!?\)\-\[<])',
528
+ r"\1YA\2",
529
  ],
530
  [
531
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪE(])Я([абвгдеёжзийклмнопрстуфхцчшщъыьэюяqcğñüö])',
532
+ r"\1Ya\2",
533
  ],
534
+ ['([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöüaeАЫОУЕИЁЭЮЯЬЪÖÜAE(])е', r"\1ye"],
535
  [
536
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöüaeАЫОУЕИЁЭЮЯЬЪÖÜAE(])Е([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQCĞÑÜÖ\s"\'.,:;!?\)\-\[<])',
537
+ r"\1YE\2",
538
  ],
539
  [
540
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяьъöÜaeАЫОУЕИЁЭЮЯЬЪÖÜAE(])Е([абвгдеёжзийклмнопрстуфхцчшщъыьэюяqcğñüö])',
541
+ r"\1Ye\2",
542
  ],
543
+ ['([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъaeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪAE(])я', r"\1ya"],
544
  [
545
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъaeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪAE(])Я([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQCĞÑÜÖ\s"\'.,:;!?\)\-\[<])',
546
+ r"\1YA\2",
547
  ],
548
  [
549
  '([\s"\'\(\)\-.,:;!?>\]"аыоуеиёэюяöÜñqğьъaeАЫОУЕИЁЭЮЯÖÜÑQĞЬЪAE(])Я([абвгдеёжзийклмнопрстуфхцчшщъыьэюяqcğñüö])',
550
+ r"\1Ya\2",
551
  ],
552
  # остальные вхождения е и я
553
  ["е", "e"],
tests/test_converter.py CHANGED
@@ -1,24 +1,7 @@
1
- import converter
2
  from crh_transliterator.transliterator import transliterate
3
  from tabulate import tabulate
4
 
5
 
6
- def test_latin_converter():
7
- cases = _read_test_cases()
8
- failed = []
9
- for case in cases:
10
- if converter.to_latin(case[1]).lower() != case[0].lower():
11
- failed.append(
12
- (case[1].lower(), converter.to_latin(case[1]).lower(), case[0].lower())
13
- )
14
- if len(failed) > 0:
15
- failed_rows = "\n".join([str(item) for item in failed])
16
- raise Exception(
17
- f"Failed {len(failed)}/{len(cases)} ({round((len(failed)/len(cases))*100,2)}%) cases.\n"
18
- + tabulate(failed, headers=["Original", "Converted", "Ground truth"])
19
- )
20
-
21
-
22
  def test_transliterator():
23
  cases = _read_test_cases()
24
  failed = []
 
 
1
  from crh_transliterator.transliterator import transliterate
2
  from tabulate import tabulate
3
 
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  def test_transliterator():
6
  cases = _read_test_cases()
7
  failed = []