[ ]
MyTTS (форум) » Программы, использующие синтез речи в Windows » другие программы » Picobook TTS Offline (Программа на python 3, не использующая SAPI)
Picobook TTS Offline
flegontДата: Пятница, 02.12.2022, 21:14 | Сообщение #121
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline

Цитата
https://cloud.mail.ru/public/BoVX/nsMxf3fVa


Покамест не сравнение, а ориентир.
Словарные замены в сборке Tonio_k (и в моей тоже) выполняет Demagog, он же - источник интерфейса, и средство доступа к интерпретатору Python. Посмотрим, как Demagog справится с этим текстом.

Текст: взят по упомянутой ссылке, размер: 11 мб. Знаков (с пробелами): 11862033 = 296,55 авторских листов.

Ноутбук MSI Katana
Загружаем текст в любое окно Demagog, версия 411 x32 из сборки Tonio_k
Словарь расстановки ударений из той же сборки: 95.NEW_Орфоэпия(phoneme).dic 2.9 миллиона правил; в Настройках выбран хеш-алгоритм. Нажимаем кнопочку "Измененнный текст"

В окне 0 - Статистика имеем:

# Текст "Release-that-Witch_Освободите-эту-Ведьму.txt" измененный по "95.NEW_Орфоэпия(phoneme).dic" (0:00:33)

ReleasethatWitch, освобод+Ите эту в+Едьму ф+Айл был сгенерирован про+Ектом ранобехаб орг.
Не для комерческого исп+Ользования, Том 1
глав+А 1. С сег+Одняшнего дня я насл+Едный принц.,Ченг Ян поч+Увствовал, что ктото зв+Ал его. в+Аше выс+Очество, прош+У, пр+Оснитесь… Он отверн+Улся, но голоса, кот+Орые он сл+Ышал, не исч+Езли. на с+Амом д+Еле они, наобор+От, ст+Али д+Аже гр+Омче. зат+Ем он поч+Увствовал, что ктото остор+Ожно

и т.д. и т.п.

Затраты времени на обработку этого большого текста большим словарем  указаны в скобках в заголовочной строке результата
Ноль часов, ноль минут, тридцать три секунды.
А  в сборке это всё происходит автоматически, потом весь текст уже с проставленными ударениями передается питон-скрипту на озвучку. Ну, уж озвучивать 11 мб сборка будет дооооолго... но ведь нас интересовало только время работы словаря. Оно - вполне удовлетворительное.


Сообщение отредактировал flegont - Пятница, 02.12.2022, 21:17
 
Pin240Дата: Пятница, 02.12.2022, 21:56 | Сообщение #122
Группа: Пользователи
Сообщений: 104
Статус: Offline
Цитата flegont ()
вполне удовлетворительное.

Это пипец как  шустро)

*что какая то фигня при поправке текста цитаты ломаются


Сообщение отредактировал Pin240 - Пятница, 02.12.2022, 22:55
 
AdminДата: Пятница, 02.12.2022, 22:31 | Сообщение #123
Группа: Администраторы
Сообщений: 140
Статус: Offline
Цитата Pin240 ()
при поправке текста цитаты ломаются
используйте режим bb кода, все тэги будут видны и будет понятно что и где ломается.
Прикрепления: 0604356.png (54.9 Kb) · 8033318.png (56.0 Kb)
 
Pin240Дата: Пятница, 02.12.2022, 22:57 | Сообщение #124
Группа: Пользователи
Сообщений: 104
Статус: Offline
Цитата Admin ()
режим bb кода.
Сразу и не поймешь...

Цитата flegont ()
Затраты времени на обработку этого большого текста большим словарем
 Вот бы попытаться перенести ваш способ на питон biggrin

Как хэши делать знаю, но пока не знаю как это со словарем замен подружить да и вообще как его нужно будет строить...


Сообщение отредактировал Pin240 - Пятница, 02.12.2022, 22:58
 
tonio_kДата: Пятница, 02.12.2022, 23:16 | Сообщение #125
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитата Pin240 ()
Вот бы попытаться перенести ваш способ на питон
я пробовал на lua через ассоциативные таблицы создавать словарные замены. Работает относительно быстро, но проблема в регистре - lua регистрозависим. Отсюда двойная работа с текстом: нужно делать зеркало текста в нижнем регистре, и замены делать по зеркалу, вставляя замены в оригинале. В итоге, модуль функции работы словаря на Lua в моём исполнении
интересна но ощутимо медленнее чем исполнение в Демагоге. Поэтому, как интересное решение - да, как полезное - нет (ну может, в неких частных случаях)
 
flegontДата: Суббота, 03.12.2022, 00:37 | Сообщение #126
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Я делал хеш- алгоритм, как и всего Демагога на Дельфи.
И не уверен, что на интерпретируемых языках, типа питона, луа и т.п. это возможно повторить.
Питон медленнее в 50..100 раз.

Но сам принцип ХА прост.
Пусть словарь - это текстовый файл, состоящий из строе - правил вида:
слово=замена
И количество строк в словаре N

Создаем массив строк h, первоначально они все пустые, размер h пусть будет 3*N
Точнее, ближайшее к этому простое число! Пусть это будет M
Пробегаем в цикле по словарю, и для каждого правила считаем хеш -это будет z - целое число от 0 до M-1
Я использую PJWhash - хеш-функцию Вайнбергера для строк.
Если h [z]пусто, то h [z]= 'слово=значение'
Иначе проверяем, свободно ли h[z+1] и т.д.
Когда цикл по словарю закончен, хеш таблица - заполнена.

Замены в тексте по словарю.
Превращаем текст в массив слов w, по разделителям: пробел, перевод строки, табуляция.
В цикле по w вычисляем хеш очередного слова w, пусть это будет некое число.
Проверяем h[z]. Если пусто, то для этого слова нет правила в хеш-таблице, переходим к следующему слову.
Если не пусто, проверяем, совпадает ли 1е слово в правиле h [z]cо словом w

Если да, то правило для этого слова найдено, производим замену по этому правилу.
Иначе проверяем правило h[z+1] и т.д.
Когда цикл по массиву слов закончен - все замены сделаны. Слепляем массив слов обратно в единый текст.

Тут я опускаю детали: символы перевода строки надо тоже запоминать в массиве слов, как особые "слова", чтобы при конкатенации массива слов восстановить по ним переводы строк т.е деление текста на абзацы. Кроме того, слова в тексте м.б. окружены скобками, кавычками и др.знаками препинания, при составлении х-т и при проверке слов по х-т надо этот мусор как-то игнорировать. А еще: учитывать при заменах регистр букв или нет.

Но общий принцип понятен.

На оф.сайте Демагога есть глава "3. Нормальные герои или повесть об алгоритме словарныз замен". Там рассказ и о моих попытках научить ХА понимать правила со звездочками. Хотя тут уже быстродействие сильно падает.

Изначально хеш-алгоритм, входящий в состав Демагога, я сделал доступным встроенному интерпретатору Lua. Lua просто вызывает соответствующую функцию Дельфи. А с недавних пор, в Демагог64 открыл доступ этой же функции интерпретатору Python.  Вот и весь секрет. Это не луа и не питон - быстрые. Это дельфи - быстрый, на котором написан Демагог.


Сообщение отредактировал flegont - Суббота, 03.12.2022, 10:30
 
Pin240Дата: Воскресенье, 04.12.2022, 21:02 | Сообщение #127
Группа: Пользователи
Сообщений: 104
Статус: Offline
Цитата flegont ()
дельфи - быстрый, на котором написан Демагог.

Почему то когда увидел скорость в 33 сек - так и подумал что это не С\С++ smile
 
flegontДата: Понедельник, 05.12.2022, 22:38 | Сообщение #128
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Ну, тут зависит от того, как к проблеме подойти, знатоки C++ говорят, что всегда могут написать прогу, аналогичную к-либо дельфийской и будет работать в полтора раза быстрее. Не знаю, не видел  smile 
Зато о питоне за сегодняшний вечер мое мнение заметно улучшилось.
Подробности завтра, а предварительный результат показан ниже.

Ноут: MSI Katana
Текст: Release-that-Witch_Освободите-эту-Ведьму.txt
Словарь ударений: 95.NEW_Орфоэпия(phoneme).dic
Прога: тестовый питон-скрипт из 67 строк

# Python>Test HA.txt

Время, сек 9.2

ReleasethatWitch, Освободите эту Ведьму Файл был сгенерирован про+Ектом ранобехаб орг. Не для комерческого исп+Ользования, Том 1 Глава 1. С сег+Одняшнего дня я насл+Едный принц.,Ченг Ян поч+Увствовал, что ктото зв+Ал его. Ваше Высочество, прош+У, пр+Оснитесь… Он отверн+Улся, но голоса, кот+Орые он сл+Ышал, не исч+Езли. На самом д+Еле они, наобор+От, ст+Али д+Аже гр+Омче. Затем он поч+Увствовал, что ктото остор+Ожно д+Ёргает его за рук+Ав. Ваше Высочество, мой насл+Едный пр+Инц! Ченг Ян р+Езко откр+Ыл глаза. Хорошо знак+Омая ему обстан+Овка исч+Езла, раб+Очего стола нигд+Е не б+Ыло, и прив+Ычные перегор+Одки, спл+Ошь ус+Еянные почт+Овыми адресами пропали. Их замен+Ил стр+Анный пейз+Аж, кр+Углая общ+Ественная пл+Ощадь, кот+Орая со вс+Ех сторон был+А окружен+А маленькими кирп+Ичными д+Омиками, и в+Иселица, кот+Орая был+А устан+Овлена в самом ц+Ентре пл+Ощади. Сам он сид+Ел за стол+Ом по друг+Ую сторону от в+Иселицы. Вместо уд+Обного 
...
(и т.д и т.п.)
...
валась она. Я верн+Улся, Роланд улыбн+Улся, вход+Я в дом. Путь перед ним простир+Ался вперёд. Независимо от того, как+Ое б+Удущее их ожид+Ает, это был+А соверш+Енно н+Овая стран+Ица. Конец.,
 
flegontДата: Вторник, 06.12.2022, 11:57 | Сообщение #129
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Тест на питоне алгоритма из сообщения #126
Использован тот факт, что в питоне нет надобности конструировать хеш-таблицу, она там есть и называется "тип данных - словарь".
Остается только заполнить его, в соответствии с тектовым файлом словаря *.dic
Подразумевается, что текстовый файл словаря содержит правила, вида слово=замена причем слово - в нижнем регистре; кодировка файлов словаря и текста для правки словарем - ANSI.

# Python>TestHashAlgorithm.py

10%
20%
30%
40%
50%
60%
70%
80%
90%
100% Время, сек: 4.4 

ReleasethatWitch, освобод+Ите эту в+Едьму ф+Айл был сгенерирован про+Ектом ранобехаб орг. 
 Не для комерческого исп+Ользования, Том 1 
 глав+А 1. С сег+Одняшнего дня я насл+Едный принц.,Ченг Ян поч+Увствовал, что ктото зв+Ал его. в+Аше выс+Очество, прош+У, пр+Оснитесь… Он отверн+Улся, но голоса, кот+Орые он сл+Ышал, не исч+Езли. На самом д+Еле они, наобор+От, ст+Али д+Аже гр+Омче. зат+Ем он поч+Увствовал, что ктото остор+Ожно д+Ёргает его за рук+Ав. в+Аше выс+Очество, мой насл+Едный пр+Инц! Ченг Ян р+Езко откр+Ыл глаза. хорош+О знак+Омая ему обстан+Овка исч+Езла, раб+Очего стола нигд+Е не б+Ыло, и прив+Ычные перегор+Одки, спл+Ошь ус+Еянные почт+Овыми адресами пропали. Их замен+Ил стр+Анный
...
...
пож+Аловать дом+Ой, м+Ягко поздор+Овалась она. Я верн+Улся, Роланд улыбн+Улся, вход+Я в дом. п+Уть перед ним простир+Ался вперёд. незав+Исимо от того, как+Ое б+Удущее их ожид+Ает, это был+А соверш+Енно н+Овая стран+Ица. кон+Ец.,
 
tonio_kДата: Вторник, 06.12.2022, 12:48 | Сообщение #130
Группа: Пользователи
Сообщений: 139
Статус: Offline
Красивый код  получился! Даже я (не зная питон) смог его прочитать что он делает  . Первый шаг к созданию полноценного модуля словарных замен на питоне сделан. Осталась самое малое - увеличить его раза эдак в 10 что бы он и звёздочки поддерживал и чувствительность к регистру регулировалась. К стати, как этот скрипт с чувствительностью регистра сейчас? Он ведь ищет с учётом регистра?(Не могу пока тестировать скрипт ПК далеко)
И ещё, меня беспокоит перспектива. Помню, на lua простая замена у меня тоже очень быстро отрабатывала, даже быстрее штатной string.gsub(). Но когда добавил регулировку чувствительности к регистру, попытался поддержку звёзд добавить, то тормоза полезли в геометрической прогрессии с каждым добавлением и дальше искать уже не хотелось. Возможно, криво написал, но все же...


Сообщение отредактировал tonio_k - Вторник, 06.12.2022, 12:49
 
flegontДата: Вторник, 06.12.2022, 14:08 | Сообщение #131
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
str.casefold() приводит к нижнему регистру проверяемое слово, а словарь изначально в нижнем регистре по левым частям правил. Так что, замены в тексте от регистра не зависят. По крайней мере, мне так кажется  smile

Теперь надо обобщить на:
1. Правила, содержащие слева более одного слОва
2. Правила, у которых в левой части словА содержат звездочки справа/слева/с обеих сторон
3. Возможность включать зависимость замен от регистра

Правила с отдельно стоящми * полагаю, поддерживать не надо. Они - самая тормозная часть хеш-алгоритма. Если уж на дельфи тормозит, то на питоне или луа и подавно.


Сообщение отредактировал flegont - Вторник, 06.12.2022, 14:18
 
Pin240Дата: Среда, 07.12.2022, 19:19 | Сообщение #132
Группа: Пользователи
Сообщений: 104
Статус: Offline
Цитата flegont ()
тип данных - словарь

Спасибо за скрипт, попытаемся его раскачать) В данный момент, для словаря, стоит модуль FlasText  работает по умолчанию,даже при отключенном модуле ударения, он  может учитывать регистр и несколько слов и даже предложений. Но к нему просто нужен полный словарь ударений.

Раньше я загружал словарь так:

Код
class open_dic:#Загрузка словаря d = {}
try:
  with open('dic.txt', encoding = 'UTF-8') as fd:
   fx = fd.readlines()
   
   for x in fx:
    
    fx = x.split(" = ")
    
    d.update({fx[0].strip(): fx[1].strip()};)
   
   print('\nСловарь Загружен \n')
except:
  print('\nСловарь НЕ НАЙДЕН \n')


Но применял его очень криво:

Код

  for key,value in dic.items():
  
  txt2 = txt2.replace(key, str(dic[key]))


То есть не учитывал конца слова, да и не знал как это делать. Потом и пошли проблемы, когда короткое слово заменяло часть в большом слове. Не поделитесь своим словарем)

А при делении и чистки с начало использовал:
Код

nestr3 = re.sub (r'[^А-Яа-яёA-Za-z\0-9\.{0,3}\<\>\!\+\?\s\/\,]*', u'', txt2)  # Все кроме в [...]
nestr2 = re.sub (r'\?', u'? sss  ', nestr3)
nestr1 = re.sub (r'\!', u'! sss  ', nestr2)


а потом для деления использовал:

Код

theList = re.split (' sss ', txt_sp)


Использовал re.sub так как replace не всегда видел например конец строки а re.sub (r'\n', u'\n sss ', nestr2) работает хорошо
+ только с re.sub так

Код

re.sub (r'\d+', lambda x: num2words (x[0], lang='ru'), txt1)


Сообщение отредактировал Pin240 - Среда, 07.12.2022, 21:36
 
flegontДата: Среда, 07.12.2022, 21:54 | Сообщение #133
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
95.NEW_Орфоэпия(phoneme).dic - это словарь из сборки tonio_k, на нее в этой ветке есть ссылка на скачивание, выше, на стр.4 если правильно помню. В ней содержится самый большой словарь ударений русского языка, какой я когда-либо видел  ok

Я основываю свои наработки на таком формате словарей *.dic:

# пример
$СССР=Сов+етский Со+юз
сама=сам+а
у окна=у окн+а
туник*=тун+ик
*ой волны=ой волн+ы
*чертя*=черт+я

# строка комментария; $ учитывать регистр; * отсутствие границы слова со стороны звездочки
Хеш-алгоритм сказочно быстро работает на правилах вида слово=замена.
Поэтому гиганский словарь ударений так стремительно срабатывает.

На словосочетаниях (без звездочек) - ХА уже несколько медленнее, на правилах со звездочками - еще медленнее.
Вариант со словосочетаниями - на питоне хочу сделать его иначе, чем в Демагоге.
Есть надежда ускорить работу ХА в этом случае.
Посмотрим, оправдается ли она  wink


Сообщение отредактировал flegont - Среда, 07.12.2022, 22:05
 
Pin240Дата: Вторник, 13.12.2022, 18:48 | Сообщение #134
Группа: Пользователи
Сообщений: 104
Статус: Offline
А вот и очередная сборка https://t.me/myttsinfo/978

Спасибо flegont за скрипт и tonio_k за словарь
Из скрипта подчерпунл некоторые моменты и попробую их применить в своем коде.
В следующий раз  прилеплю возможность открывать словари из окна программы и переделать логику работы с txt файлами. Но  это теперь очень не скоро.


Сообщение отредактировал Pin240 - Вторник, 13.12.2022, 18:48
 
tonio_kДата: Пятница, 16.12.2022, 23:35 | Сообщение #135
Группа: Пользователи
Сообщений: 139
Статус: Offline
Сборка Demagog для models silero от tonio_k от 2022-12-16

Сборка полностью портабельная - скачал и сразу можно озвучивать книги

 (219kb) Пошаговая инструкция PDF

 Скачать (312Mb)

Внимание! При распаковке размер папки Demagog занимает 1,2 Gb!

Google Диск

Изменения:



Сообщение отредактировал tonio_k - Пятница, 16.12.2022, 23:39
 
MyTTS (форум) » Программы, использующие синтез речи в Windows » другие программы » Picobook TTS Offline (Программа на python 3, не использующая SAPI)
Поиск:

Общение