[ ]
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: flegont  
Сборка Demagog для models SILERO от tonio_k (ПЕРЕНЕСЕНО)
flegontДата: Суббота, 11.01.2025, 18:40 | Сообщение #31
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Продолжение теста (см. сообщение #112)

То же оборудование и те же настройки, что в предыдущем сообщении.

Текст В.Губарев "Путешествие на утреннюю звезду". Знаков (с пробелами): 148717 = 3,72 авторских листов

Время генерации аудио, мин:

1) Picobook: 18
2) Сборка tonio_k (Demagog32x+Python3.7.9): 15
3) Моя сборка (Demagog-x64-Silero): 14

Текст Р.Кирлинг "Отважные мореплаватели". Знаков (с пробелами): 196267 = 6,01 авторских листов

Время генерации аудио, мин:

1) Picobook: 24
2) Сборка tonio_k (Demagog32x+Python3.7.9): 28
3) Моя сборка (Demagog-x64-Silero): 24

Каких-то существенных различий пока не видно.


Сообщение отредактировал flegont - Пятница, 02.12.2022, 18:55
 
flegontДата: Суббота, 11.01.2025, 18:40 | Сообщение #32
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
 
tonio_kДата: Суббота, 11.01.2025, 18:40 | Сообщение #33
Группа: Пользователи
Сообщений: 186
Статус: Offline
Цитата Pin240 ()
Вот бы попытаться перенести ваш способ на питон
я пробовал на lua через ассоциативные таблицы создавать словарные замены. Работает относительно быстро, но проблема в регистре - lua регистрозависим. Отсюда двойная работа с текстом: нужно делать зеркало текста в нижнем регистре, и замены делать по зеркалу, вставляя замены в оригинале. В итоге, модуль функции работы словаря на Lua в моём исполнении
интересна но ощутимо медленнее чем исполнение в Демагоге. Поэтому, как интересное решение - да, как полезное - нет (ну может, в неких частных случаях)
 
flegontДата: Суббота, 11.01.2025, 18:40 | Сообщение #34
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
 
flegontДата: Суббота, 11.01.2025, 18:40 | Сообщение #35
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Дата: Суббота, 11.01.2025, 18:40 | Сообщение #36
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Дата: Суббота, 11.01.2025, 18:41 | Сообщение #37
Группа: Пользователи
Сообщений: 186
Статус: Offline
Красивый код  получился! Даже я (не зная питон) смог его прочитать что он делает  . Первый шаг к созданию полноценного модуля словарных замен на питоне сделан. Осталась самое малое - увеличить его раза эдак в 10 что бы он и звёздочки поддерживал и чувствительность к регистру регулировалась. К стати, как этот скрипт с чувствительностью регистра сейчас? Он ведь ищет с учётом регистра?(Не могу пока тестировать скрипт ПК далеко)
И ещё, меня беспокоит перспектива. Помню, на lua простая замена у меня тоже очень быстро отрабатывала, даже быстрее штатной string.gsub(). Но когда добавил регулировку чувствительности к регистру, попытался поддержку звёзд добавить, то тормоза полезли в геометрической прогрессии с каждым добавлением и дальше искать уже не хотелось. Возможно, криво написал, но все же...


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

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

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


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

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

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

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

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


Сообщение отредактировал flegont - Среда, 07.12.2022, 22:05
 
tonio_kДата: Суббота, 11.01.2025, 18:41 | Сообщение #40
Группа: Пользователи
Сообщений: 186
Статус: Offline
Сборка Demagog для models silero от tonio_k от 2022-12-16

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

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

 Скачать (312Mb)

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

Google Диск

Изменения:



Сообщение отредактировал tonio_k - Пятница, 16.12.2022, 23:39
 
notnickДата: Суббота, 11.01.2025, 18:41 | Сообщение #41
Группа: Пользователи
Сообщений: 35
Статус: Offline
tonio_k, замена для экспорта в wav работает так же?
 
tonio_kДата: Суббота, 11.01.2025, 18:41 | Сообщение #42
Группа: Пользователи
Сообщений: 186
Статус: Offline
Попробуйте, должно работать. Перепишите поверх сборки
 
tonio_kДата: Суббота, 11.01.2025, 18:42 | Сообщение #43
Группа: Пользователи
Сообщений: 186
Статус: Offline
Цитата notnick ()
для экспорта в wav

сделал для записи в аудио wav отдельные скрипты:
40_WAV - ОКНО - ОБРАБОТКА И ЗАПИСЬ КНИГИ В ТЕКУЩЕМ ОКНЕ.lua
41_WAV - ПАКЕТНАЯ ОБРАБОТКА И ЗАПИСЬ КНИГ В ПАПКЕ TEMP.lua

если будет следующая сборка, то они будут в комплекте с таким же наименованием

Принцип тот же. Не смотря на настройки mp3 выгружаться будут только wav

Или склеивать wav тоже нужно?
Прикрепления: 3869053.zip (12.5 Kb)


Сообщение отредактировал tonio_k - Понедельник, 19.12.2022, 00:37
 
notnickДата: Суббота, 11.01.2025, 18:42 | Сообщение #44
Группа: Пользователи
Сообщений: 35
Статус: Offline
Цитата tonio_k ()
Принцип тот же. Не смотря на настройки mp3 выгружаться будут только wavИли склеивать wav тоже нужно?

Спасибо! 
Склеивать не, не надо, потому что для книг оно пока не подходит. Для отдельных абзацев - самое то.
 
notnickДата: Суббота, 11.01.2025, 18:42 | Сообщение #45
Группа: Пользователи
Сообщений: 35
Статус: Offline
Цитата tonio_k ()
Пошаговая инструкция PDF

tonio_k, работает так же нормально,
правда при закрытии стал выскакивать еррорчик: 
Прикрепления: 0341757.jpg (33.7 Kb)
 
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Общение