Functions used for TTS Dataset Preparation
test_eq(collapse_whitespace(
chr(int("0xfeff", 16)) + # zero width no-break space
chr(int("0x200b", 16)) + # zero width space
chr(int("0x202f", 16)) + # narrow no-break space
chr(int("0x2060", 16)) + # word joiner
chr(int("0x3000", 16)) + # ideographic space
chr(int("0xa0" , 16)) + # no-break space
"\t\n 1 2 3 4 5 \t\r\n"),
"1 2 3 4 5")
test_eq(lowercase('ПрИвеТ, ЧуВАК!'),
'привет, чувак!')
test_eq(check_no_numbers('Цифры есть 1 12 13.4'), ['1', '12', '13', '4'])
test_eq(check_no_numbers('Цифр нет'), [])
test_eq(purge_dots("Word..."), 'Word.')
test_eq(purge_dots("Word…",), 'Word.')
test_eq(purge_dots("Word...", purgedots=True), 'Word')
test_eq(purge_dots("Word…", purgedots=True), 'Word')
test_eq(purge_dots(" …Word",), ' Word')
test_eq(purge_dots("Word..",), 'Word')
test_eq(purge_dots('Многоточие... Многоточие… … …Многоточие'),
'Многоточие. Многоточие. Многоточие')
test_eq(remove_specials('Скобки у аббревиатур (вайфай) удаляем.'),'Скобки у аббревиатур вайфай удаляем.')
test_eq(remove_specials('Метки времени 01:12 или 01.01, (01:12) или (01.01) удаляем.'),
'Метки времени или , или удаляем.')
test_eq(remove_specials('Ой!. Ага?. / Стоп.'), 'Ой! Ага? Стоп.')
test_eq(remove_specials('*США* _Френсис_'), 'США Френсис')
test_eq(
expand_abbreviations('Привет Джон, т.е. Иван. Т.к. русский. И т.д. И т.п.'),
'Привет Джон, то есть Иван. так как русский. и так далее. и тому подобное.')
test_eq(unify_dash_hyphen(
chr(int("2212",16))+ # minus sign
chr(int("2012",16))+ # figure dash
chr(int("2010",16))+ # hyphen
chr(int("2011",16))),# non-breaking hyphen
(" "+chr(int("2013",16))+" ")*2+chr(int("2d",16))*2)
test_eq(unify_dash_hyphen('Я '+chr(int("2013",16))+ 'Джейми Кейлер'),'Я – Джейми Кейлер')
test_eq(unify_dash_hyphen('Я' +chr(int("2013",16))+ 'Джейми Кейлер'),'Я – Джейми Кейлер')
test_eq(collapse_whitespace(unify_dash_hyphen('Я' +chr(int("2013",16))+' Джейми Кейлер')),'Я – Джейми Кейлер')
test_eq(rm_quot_marks('"\'«»‘’‚‛“”„‟‹›❮❯❛❜❝❞❟❠'),'')
texts_equal("что-ли а", "что-то и", verbose=False)
texts_equal("что-ли а", "что-то и", verbose=True)
test_eq(texts_equal("1234", "12345", verbose = False), (False, "1234", "12345"))
#test_stdout(lambda: test_eq(texts_equal("1234", "12345", verbose = True), False), "Not equal length")
test_eq(texts_equal("все", "всё", ignore_e = True, verbose = False), (True, "все", "всё"))
test_eq(texts_equal("все", "всё", ignore_e = False, verbose = False), (False, "всЕ", "всЁ"))
#test_stdout(lambda: texts_equal("все", "всё", ignore_e = False, verbose = True), "всЕ != всЁ")
test_eq(texts_equal("слово ещё одно", "слово ещё одно"), (True,"слово ещё одно", "слово ещё одно"))
test_eq(basic_cleaner(
'Привет Джон, т.е. Иван, т.к. русский. И т.д. и т.п.'),
'привет джон, т.е. иван, т.к. русский. и т.д. и т.п.')
test_eq(russian_cleaner(
'Привет «Джон», т.е. Иван, т.к. русский... И т.д. и т.п. Ой!. Ага?. / "Стоп"..'),
'Привет Джон, то есть Иван, так как русский. и так далее. и тому подобное. Ой! Ага? Стоп')
from razdel import sentenize
fname = '/home/condor/git/cyrillica/b-ish.txt'
with open(fname) as f:
text = f.read()
text
text = russian_cleaner(text)
text
for s in sentenize(russian_cleaner(text)):
print(s.text)
print(f'Char\tDec\tHex\tPrintable?')
for i,c in enumerate(sorted(set(text))):
print(f'{c}\t{ord(c)}\t{hex(ord(c))}\t{c.isprintable()}')
print(f'Char\tDec\tHex\tPrintable?')
for i,c in enumerate(sorted(set(russian_cleaner2(text)))):
print(f'{c}\t{ord(c)}\t{hex(ord(c))}\t{c.isprintable()}')
print(f'Char\tDec\tHex\tPrintable?')
for i,c in enumerate(sorted( set(text).difference(set(russian_cleaner2(text))))):
print(f'{c}\t{ord(c)}\t{hex(ord(c))}\t{c.isprintable()}')
assert check_no_numbers(russian_cleaner(text))== []
text = '''Восклицательное предложение! А это какое? Инициалы -- не повод разрывать. Правда, А.С. Пушкин? -- Разумеется, голубчик. (Скобки оставляем.)'''
for _ in sentenize(text):
print(_.text)