Балаболка TTS

Программа "Балаболка" предназначена для воспроизведения звуков человеческого голоса с использованием любого речевого синтезатора, установленного на компьютере.

Модератор: balabolka

Ответить
Аватара пользователя
IgorItkin
Интересующийся

Балаболка TTS

#401

Сообщение IgorItkin »

Hi, maybe this was already asked. I am using a voice from Cere Voice. There is long pause at the comma ",". Is there a way to shorten the pause without deleting the the comma in the dictionary? I mean, there should be a pause but it should be shorter. Is this possible?

Thank you!

Аватара пользователя
good_cat
Администратор

Балаболка TTS

#402

Сообщение good_cat »

The language of communication on the forum is Russian. You can use Google Translate if needed.

Язык общения на форуме - русский. При необходимости вы можете использовать Google Translate.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#403

Сообщение balabolka »

IgorItkin писал(а):
06 авг 2020 18:19
I am using a voice from Cere Voice. There is long pause at the comma ",".
1. Файл настроек голоса CereVoice.

Если нужно изменить паузу после запятой именно для голосов от компании CereProc, то, насколько я помню, можно просто отредактировать файл настроек PBREAK.TXT внутри установленного голоса. (Раньше этого было достаточно; что касается последних версий их голосов - надо проверять.)

Файл PBREAK.TXT лежал здесь (для английских голосов):
c:\Program Files (x86)\CereProc\<voice_name>\veng_db\en\norm\
Внимание! Прежде чем редактировать файл, сохраните его копию во временной папке!
В файле PBREAK.TXT прописаны паузы после и до знаков препинания, в том числе и для запятой:

Код: Выделить всё

,	3     0.200 0	     0.000
Замените значение "0.200" (в секундах) на другое и сохраните файл. Перезапустите "Балаболку", и Вы услышите, что паузы после запятой изменились.

2. Окно настроек программы для чтения вслух.

Каких-либо специальных настроек для увеличения пауз после запятых в программе "Балаболка" нет (и я пока не собираюсь добавлять такую возможность). Рекомендую использовать программу "TextAloud": там есть такой раздел в окне настроек.

3. Правило для коррекции произношения.

В "Балаболке" можно использовать словарь для коррекции произношения, чтобы изменить паузу после запятой. Надо добавить правило, которое в тексте будет заменять символ "," на тег паузы:

Код: Выделить всё

<silence msec="100"/>
Не очень элегантный способ, но позволит добиться нужного результата.

Аватара пользователя
IgorItkin
Интересующийся

Балаболка TTS

#404

Сообщение IgorItkin »

Спасибо, 3. Шаг работает. Сожалению в первом шаги pbreak не существует. А можно паузу поставить только на определенный голос?

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#405

Сообщение balabolka »

IgorItkin писал(а):
06 авг 2020 22:29
А можно паузу поставить только на определенный голос?
Нет, такая возможность в "Балаболке" недоступна.

Увы, в текущей версии голосов CereProc отдельных файлов конфигурации больше нет. Раньше омографы, аббревиатуры, паузы, правила чтения дробей, римских чисел, дат и т.д. - всё это было доступно для редактирования, всё лежало в папке голоса в виде текстовых файлов или исходников на Python. Теперь есть лишь один огромный файл с расширением .VOICE. Это база данных собственного формата CereVoice.

Однако, изменить длительность паузы после запятой можно и сейчас. В конце этого огромного файла указаны смещения для наборов данных, и там есть значение смещения для раздела PBREAK.
Например: TPOBJ_PBREAK:DEFAULT = 1817451. :nasyalnika:

Если в двоичном редакторе перейти по этому смещению, можно найти всё те же знаки препинания, что были в старом файле PBREAK.TXT, а рядом с ними - порядковые номера ячеек, где хранятся значения пауз для каждого знака (в миллисекундах). Таблица значений идет следом за списком знаков препинания. Если знать, что знаки препинания идут в таком порядке:

Код: Выделить всё

.!?,-()[];:"
пауза для точки, знака восклицания, знака вопроса 400 миллисекунд (0x0190), пауза для запятой и дефиса 200 миллисекунд (0x00C8), то в редакторе можно быстро отыскать нужные значения и исправить их.

Код: Выделить всё

90 01 00 00 90 01 00 00 90 01 00 00 C8 00 00 00 C8 00 00 00
Если изменить "C8 00" на "64 00", пауза после запятой будет не 200 миллисекунд, а 100.
Внимание! Прежде чем редактировать файл .VOICE, сохраните его копию во временной папке.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#406

Сообщение balabolka »

IgorItkin
For CereVoice the default length of pause at a comma is 200 milliseconds (hexadecimal value = C8). If you want to change this value, it is necessary to modify one byte in a voice file.
  1. Copy the .VOICE file to a temporary folder (always make a backup before updating).
  2. Open the .VOICE file in the hex editor (for example, freeware hex editor XVI32).
  3. Find the hex string in the file:
    90 01 00 00 90 01 00 00 90 01 00 00 C8 00 00 00 C8 00 00 00
  4. Modify the bold value to decrease a pause after commas (for example, "64" = 100 milliseconds).
  5. Save changes, exit the hex editor and restart Balabolka.

Аватара пользователя
IgorItkin
Интересующийся

Балаболка TTS

#407

Сообщение IgorItkin »

Спасибо большое за помощь. Я попробую и сообщу. :thank:

Аватара пользователя
IgorItkin
Интересующийся

Балаболка TTS

#408

Сообщение IgorItkin »

Я пытался найти эту строчку с помощью XVI32, но он пишет hex string not found. Я нашёл PBREAK:DEFAULT=2074020. Что мне нужно сделать?
hex.png
hex.png (464.07 КБ) 2378 просмотров

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#409

Сообщение balabolka »

IgorItkin
Какое имя файла, в котором Вы выполняете поиск? Может быть, что-то изменилось в 6-ой версии речевого движка.

Используйте пункт главного меню "Address|Goto", укажите десятичное (decimal) значение "2074020". Перейдите к разделу PBREAK.
pbreak.png
pbreak.png (64.06 КБ) 2369 просмотров

Аватара пользователя
IgorItkin
Интересующийся

Балаболка TTS

#410

Сообщение IgorItkin »

‎я очень извиняюсь но как то до меня не доходит что мне надо теперь делать. У меня не какова опыта нету с hex Editor. Я сделал последний шаг с go to и нахожусь теперь здесь.
Вложения
what now.png
what now.png (573.34 КБ) 2332 просмотра

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#411

Сообщение balabolka »

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

Ожидание: разработчики для каждого голоса подбирают значения пауз с точностью до миллисекунды, консультируются с лингвистами, проводят прослушивания аудиозаписей с участием профессиональных дикторов.
Реальность: для английского языка пауза после точки 400 мс, для немецкого 600 мс. Почему? По кочану.


На скриншоте отметил те ячейки, в которых хранятся значения пауз для знаков препинания. Символы идут в таком порядке:

Код: Выделить всё

.!?,-()[];:"
По четыре байта на каждый символ. Точка - 600 мс (58 02), затем значение для восклицательного знака, вопросительного знака, запятой (64). Ткните курсором мышки в ячейку со значением "64" и напечатайте свои два символа (например, "32"; это 50 мс). Всё, сохраните изменения и закройте редактор.
pause_alex.png
pause_alex.png (603.17 КБ) 2331 просмотр

Аватара пользователя
IgorItkin
Интересующийся

Балаболка TTS

#412

Сообщение IgorItkin »

Я сделал что вы сказали, но изменения нету.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#413

Сообщение balabolka »

IgorItkin писал(а):
09 авг 2020 15:45
Я сделал что вы сказали, но изменения нету.
Хм, странно. И что, вообще никаких изменений - если поменять значение в большую сторону, например? Вы убрали из словарей все правила, которые удаляют или заменяют запятую (или отключили словари в "Балаболке")?

Сколько вариантов голоса у Вас установлено? (Голоса CereVoice можно установить в 3 вариантах.) Какой именно файл указан в этом ключе системного реестра (параметр VoiceFile):

Код: Выделить всё

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens\CereVoice Alex 6.0.0\Attributes
Может быть, надо внести изменения в другой вариант файла .VOICE (тот, который указан в системном реестре).

Какое значение Вы установили для паузы после запятой? Исходное значение 100 мс (64) - сама по себе маленькая величина. Надо использовать паузу 10 мс (0A) или меньше, тогда разница сразу будет заметна на слух.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#414

Сообщение balabolka »

Проверил файл cerevoice_alex_6.0.0_48k_standard.voice: значение для паузы после запятой находится по адресу 2074463 (четыре байта, 64 00 00 00). Менял значения, сохранял файл - длина паузы каждый раз меняется.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#415

Сообщение balabolka »

IgorItkin
Получил ответ от службы поддержки CereProc: для изменения настроек пауз после и до знаков препинания можно использовать файл user_pbreak.txt в той же папке, где находится файл .VOICE.

Вот пример файла с паузами для английского языка (это тот же файл, что был в старых версиях голосов; поменялось только имя). Если требуется изменить только длину паузы после запятой, удалите строки с другими символами и оставьте строку с запятой.
Вложения
user_pbreak.zip
(386 байт) 48 скачиваний

Аватара пользователя
wasyaka
V.I.P.

Балаболка TTS

#416

Сообщение wasyaka »

balabolka писал(а):
12 авг 2018 15:21
API-ключ для сервиса "Яндекс.Переводчик" был убран, так как 15 августа 2020 года "Яндекс" закрыл бесплатный доступ к этому сервису. Теперь сервис перевода входит в состав "Яндекс.Облака", и он платный (450 руб. за перевод мегабайта текста). Добавлять поддержку платного сервиса я пока не собираюсь
Всё хорошо - идём ко дну?
Yandex SpeechKit - приближается к этому?
(Ваше мнение)?
Пы СЫ
Яндекс Переводчик в Яндексе у меня денег не просит...:smile3:
Это привязка к местности или...?

Аватара пользователя
Dimsok
Интересующийся

Балаболка TTS

#417

Сообщение Dimsok »

При переводе текста в аудио не получается сделать это только с одной главой (хотя только напротив неё ставится галочка). Так и задумано?
Возможно ли добавления опции: в настройках аудио указать аудио файл, который звучал бы в приглушённом виде и зацикленном состоянии на фоне?
В старых версиях в пункте "сервис" имелась опция "повторить текст". Можно это вернуть? Возможно использовать словарь, но...
В настройке своих программ для импорта текста не работает переменная temp? С тессерактом без этого не выходит (файл текста по умолчанию txt), поэтому одним %Output% обойтись не получается, и приходится задавать команду:cmd /c ""C:\Program Files\DjVuLibre\ddjvu2.exe" -showpage -format=tif %Input% "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif" && "c:\Program Files\SubtitleEdit\Tesseract302\tesseract 3.05" --tessdata-dir "c:\Program Files\SubtitleEdit\Tesseract302\tessdata" "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif" -l eng+rus "c:\DOCUME~1\Dimsok\Local Settings\Temp\balabolka" %Output% && del "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif". Так что было бы неплохо, если бы была возможность задать временную папку более лаконично.
В той же настройке импорта хотелось бы иметь возможность задавать больше одного расширения для одной команды. И возможность быстро их отключать и включать (галочки?) для всех, а не только для тех расширений, которые Балаболка поддерживает по умолчанию.
При извлечении текста (тем же Тессерактом) и закрытии и открытии программы, снова приходится ждать, пока случится распознавание. С опцией сохранения извлечённого текста и его открытия при запуске было бы проще.

Аватара пользователя
OlgaLoagSinclair
Интересующийся

Балаболка TTS

#418

Сообщение OlgaLoagSinclair »

День добрый. И я с просьбой о маленькой (надеюсь) доработке :smile1:
В разделе "Преобразовать субтитры" на закладке "Настройки" есть галочка "Автоматически увеличивать скорость...". Так вот, можно ее снимать при выборе голоса, отличного от текущего? Или (если установлена) ставить значение максимальной скорости, равное текущему значению обычной скорости для этого голоса? Так было бы даже лучше.
В идеале, конечно, добавить настройку максимальной скорости в список сохраняемых настроек профиля голоса :boy_blushed:

А то настройка эта на второй закладке, не особо видна... вечно забываю ее настраивать.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#419

Сообщение balabolka »

OlgaLoagSinclair писал(а):
02 окт 2020 09:49
В разделе "Преобразовать субтитры" на закладке "Настройки" есть галочка "Автоматически увеличивать скорость...".
Хорошо, буду сохранять эту настройку для каждого голоса отдельно. Спасибо за идею (не знал, что есть такая проблема).

Для голосов SAPI 4 настройка не используется.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#420

Сообщение balabolka »

Dimsok писал(а):
02 окт 2020 09:25
При переводе текста в аудио не получается сделать это только с одной главой (хотя только напротив неё ставится галочка). Так и задумано?
Да, весь текст целиком преобразуется в звуковые файлы. "Галочки" влияют лишь на способ разбиения текст на части.

Если нужно сохранить как звуковой файл только одну главу, могу посоветовать скопировать текст главы и вставить как новую вкладку в текстовом редакторе программы. Другого способа в "Балаболке" нет.
Dimsok писал(а):
02 окт 2020 09:25
Возможно ли добавления опции: в настройках аудио указать аудио файл, который звучал бы в приглушённом виде и зацикленном состоянии на фоне?
Нет, пока не планирую добавлять такую опцию. Используйте утилиты вроде FFmpeg или SoX для обработки звуковых файлов, созданных в "Балаболке".
Необходимо запустить утилиту FFmpeg, например, с такими параметрами в командной строке (пишу по памяти, поэтому перед использованием надо проверить в документации):

Код: Выделить всё

ffmpeg -i speech.mp3 -filter_complex "amovie=background.wav:loop=999,volume=0.1[s];[0][s]amix=duration=shortest" output.mp3
Можно использовать подобную командную строку как внешний аудиокодек и прописать его в настройках "Балаболки" (можно оформить как BAT-файл, например).

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#421

Сообщение balabolka »

Dimsok писал(а):
02 окт 2020 09:25
В настройке своих программ для импорта текста не работает переменная temp?
В моей программе нет такой переменной. Не уверен, что есть необходимость добавлять ее поддержку: ничто не мешает пользователю создать папку для временных файлов с коротким путем. Всегда меняю в операционной системе значение этой переменной среды на более короткий путь. Это удобно во многих случаях. В любом случае, обещаю подумать над добавлением этой переменной в программу (это несложно реализовать).

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#422

Сообщение balabolka »

Dimsok писал(а):
02 окт 2020 09:25
В той же настройке импорта хотелось бы иметь возможность задавать больше одного расширения для одной команды. И возможность быстро их отключать и включать (галочки?) для всех, а не только для тех расширений, которые Балаболка поддерживает по умолчанию.
Не знаю, спорное предложение. Есть много пользователей (в том числе слабовидящих), которым будет сложно разобраться с этими настройками. Обещаю подумать еще над Вашей идеей.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#423

Сообщение balabolka »

Dimsok писал(а):
02 окт 2020 09:25
При извлечении текста (тем же Тессерактом) и закрытии и открытии программы, снова приходится ждать, пока случится распознавание. С опцией сохранения извлечённого текста и его открытия при запуске было бы проще.
Такова концепция моей программы. "Балаболка" каждый раз заново извлекает текст из файла.

Есть программы, которые извлекают текст из документа и сохраняют как новый текстовый файл рядом со старым файлом.

Есть программы, которые извлекают текст и записывают его в глобальное хранилище (вместе с дополнительной информацией - например, когда и из какого документа извлечен текст).

Моя программа ничего не сохраняет на диске: текст, извлеченный из документа, хранится в памяти компьютера и хранится лишь пока запущена программа. Если необходимо записать текст в файл, пользователь самостоятельно должен выполнить это действие.

У каждого подхода есть свои достоинства и недостатки. Спорить здесь бессмысленно; пользователь просто должен выбрать ту программу, которая его больше устраивает. (Возможно, когда-нибудь попробую предоставить выбор пользователям того способа, который им нужен; но пока этого нет в моих планах.)

Аватара пользователя
wasyaka
V.I.P.

Балаболка TTS

#424

Сообщение wasyaka »

► Показать

Аватара пользователя
Dimsok
Интересующийся

Балаболка TTS

#425

Сообщение Dimsok »

v2.15.0.754. При преобразовании в аудио книги с тэгами, созданными с помощью опции прямой речи, через некоторое время работа приостанавливается - неопознанная ошибка. Полностью книгу удалось преобразовать в аудио за три подхода (с возобновлением с той главы, на которой завершилось ошибкой). Пробовал на других книгах, вроде такой проблемы не наблюдается. Возможно оттого, что в книге много раз приходится менять голосовые движки?

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#426

Сообщение balabolka »

Dimsok писал(а):
07 окт 2020 09:37
При преобразовании в аудио книги с тэгами, созданными с помощью опции прямой речи, через некоторое время работа приостанавливается - неопознанная ошибка.
Ищите то место в тексте, где происходит сбой записи. Номер главы книги известен; не думаю, что текст главы большой по размеру. Можно будет понять, что не понравилось речевому движку.

Скорее всего, проблема в незакрытом теге. Программа пишет текст частями, то есть делит текст на "порции" и отправляет каждую порцию в буфер голоса. В свою очередь, теги тоже делят текст на "порции". Если открывающий тег оказался в одной порции текста, а закрывающие тег - в другой, голос выдаст сообщение об ошибке. Надо найти это место в тексте и разобраться, что пошло не так.

Аватара пользователя
Lecron
Обыватель

Балаболка TTS

#427

Сообщение Lecron »

Сразу уточню, это не запрос фичи, а идея возможного развития.

Понемногу ковыряясь с собственным Корректором, заметил что некоторые вещи нельзя решить не только подстановкой, но даже регуляркой. Нужен код для преобразования.
Допустим римские цифры 30-ю правилами на 99+% можно перевести в арабские. Цифры с окончанием (ХХ-й, ХХI-ого) просклонять уже труднее. Возможных окончаний {'х', 'ому', 'ого', 'ый', 'ая', 'ое', 'ему', 'м', 'и', 'го', 'его', 'у', 'ых', 'й', 'ым', 'ми', 'ою', 'е', 'ими', 'ую', 'ые', 'ом', 'ю', 'ыми', 'ой', 'им', 'я', 'ей', 'их', 'му'} ажно 30 штук. Пусть скриптом, но словарь на 900 правил создать можно. Но тут появляются арабские 80-ого, 101-й, 2000-м. А за ними идут цари! Александра III (третьего), Елизавете II (второй), Людовиком VI (шестым).
Скриптом же, с учетом что например для Питона есть PyMorphy2, это решается четырьмя правилами и сравнительно небольшим куском кода.

Код: Выделить всё

\b[А-Я]\w+?\s[IVXLCDMХСМ]+=declension_entity (зная падеж и род, ставим окончание)
[IVXLCDMХСМ]{2,}=roman2digit
[IVXLCDMХСМ]+-[а-я]{1,3}=declension_roman (преобразует с учетом окончания в "третьего")
\d+-[а-я]{1,3}=declension_arabian
При определенной фантазии, можно делать транслитерацию латиницы в русские "звуки" , перевод и фиг еще знает что.

Внедрение скриптовых языков в компилируемые программы, вещь непростая, но и не слишком сложная. После реализации такого АПИ, больше не потребуется изменение программы для внесения многих запросов. Да, пользователю нужны будут знания программирования. Но скорее всего, начнут появляться на форуме(ах) уже готовые плагины/рецепты.

Аватара пользователя
tonio_k
V.I.P.

Балаболка TTS

#428

Сообщение tonio_k »

Lecron писал(а):
07 окт 2020 14:04
для Питона есть PyMorphy2
я пользуюсь http://www.aot.ru/demo/morph.html для генерации склонений. А существует локальное решение для ПК? Что бы я ввел слово и тебе программка сгенерировла список слов во всех возможных падежах?

Аватара пользователя
Lecron
Обыватель

Балаболка TTS

#429

Сообщение Lecron »

tonio_k писал(а):
07 окт 2020 14:19
А существует локальное решение для ПК?
Совсем-совсем готовое — не встречал. Но PyMorphy может склонять https://pymorphy2.readthedocs.io/en/0.7/user/guide.html. Всего за 4 строки в консоли

Код: Выделить всё

import pymorphy2
morph = pymorphy2.MorphAnalyzer()
token = morph.parse('ваше_слово')[0]
token.lexeme
Но тут это не поможет. Нужно склонить одно слово по форме другого, добавлением окончания. А предусмотреть все сочетания формообразующего и склоняемого слов... брррр.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#430

Сообщение balabolka »

Lecron писал(а):
07 окт 2020 14:04
Внедрение скриптовых языков в компилируемые программы, вещь непростая, но и не слишком сложная. После реализации такого АПИ, больше не потребуется изменение программы для внесения многих запросов. Да, пользователю нужны будут знания программирования. Но скорее всего, начнут появляться на форуме(ах) уже готовые плагины/рецепты.
Не считаю нужным идти по этому пути развития своей программы (по крайней мере, сейчас).

Есть набор консольных утилит, реализующих основные функции "Балаболки". Поэтому можно писать программы на других языках, используя эти утилиты по мере надобности. В будущем могу добавлять новые функции в консольные программы (или создавать новые утилиты). Это тот подход, на который рекомендую ориентироваться (ну, и мне так проще, разумеется).

Аватара пользователя
Lecron
Обыватель

Балаболка TTS

#431

Сообщение Lecron »

balabolka писал(а):
08 окт 2020 00:13
Поэтому можно писать программы на других языках, используя эти утилиты по мере надобности.
На первый взгляд подход разумный. Но разбить процесс не выйдет.
Чтобы это обработать на стороне, там потребуется повторно реализовать движок загрузки, разбора и применения правил. А так как логика коррекции может потребовать их чередования rex/callable_rex/rex/callable/.... количество проблем с поэтапной обработкой только вырастет. Так что либо прозрачная поддержка callable_rule в rex-движке (без разницы стороннем или вашем), либо никак.

PS. А для использующих ваш bxd-формат c чередующимися rex/dic, задача может стать вовсе трудно разрешимой.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#432

Сообщение balabolka »

Lecron писал(а):
07 окт 2020 14:04
Понемногу ковыряясь с собственным Корректором, заметил что некоторые вещи нельзя решить не только подстановкой, но даже регуляркой. Нужен код для преобразования.
То, что Вам нужно, всё равно не реализовать в рамках "Балаболки" или другой программы для чтения вслух. Придется писать собственный программный код и, скорее всего, использовать собственные форматы хранения данных. Существующие форматы словарей не помогут Вам, а будут только ограничивать возможности Вашего программного кода.

А уже потом то, что будет создано, можно использовать для импорта текста в "Балаболку", как внешнее приложение.
По сути, "Балаболка" выполняет только 4 функции:
  1. Извлекает текст из файла.
  2. Делит текст на части (если необходимо).
  3. Применяет правила коррекции произношения (если необходимо).
  4. Преобразует в звуковые файлы или читает вслух.
Как я понял, Вам требуется, чтобы функция №3 выполнялась несколько раз подряд, с разными настройками.

Аватара пользователя
Lecron
Обыватель

Балаболка TTS

#433

Сообщение Lecron »

balabolka писал(а):
08 окт 2020 11:39
Как я понял, Вам требуется
Не мне. Вообще! То что пользователи об этом не думают, скорее связано с шаблонами мышления, сформированными существующими решениями.
Так как я пишу на Питоне, такая возможность реализована за 20 строк, из которых половина ушла на обработку исключений отсутствия модуля или функции указанной в словаре.
balabolka писал(а):
08 окт 2020 11:39
Придется писать собственный программный код и, скорее всего, использовать собственные форматы хранения данных.
Код — несомненно. Но задач не так много и будут появляться готовые плагины/модули.
Обратная совместимость немного теряется. Понадобится модификатор для обозначения callable_rex правила. Например @ в начале строки замены (правая часть правила после равно).
balabolka писал(а):
08 окт 2020 11:39
требуется, чтобы функция №3 (Применяет правила коррекции произношения) выполнялась несколько раз подряд, с разными настройками.
Не совсем так, а может и совсем не так.
Требуется чтобы у правила, строка замены была динамической. Генерировалась в зависимости от текста найденного регулярным выражением. Примеры уже приводил. В первую очередь склонение числительных, в зависимости от окончания (ХХ-й — двадцатый, 80-ого — восьмидесятого, 101-й, 2000-м — двухтысячным) или от сопутсвующей словоформы (ХХ века — двадцатого, Александру III — третьему, 10 рублями — десятью).
Пример для царей: \b[А-Я]\w+?\s[IVXLCDMХСМ]+=declension_dynast
Если провести аналогию, когда одна регулярка может заменить несколько десятков dic правил, то здесь, одна вычисляемая регулярка заменяет несколько десятков обычных rex-правил и/или существенно их упрощает.

Аватара пользователя
tonio_k
V.I.P.

Балаболка TTS

#434

Сообщение tonio_k »

Путано немного.
Lecron писал(а):
08 окт 2020 15:46
Пример для царей: \b[А-Я]\w+?\s[IVXLCDMХСМ]+=declension_dynast
это правило вместо Александр I или Павел V превратит обоих в declension_dynast

Скрипты это автоматизация одних и тех же действий. Можно (для примера) выложить цепочку превращений?

Допустим найти в тексте Павел I по маске регулярного выражения, к найденному добавить какой то текст через какой то разделитель, применить к полученному другое регулярное выражение или открыть словарь, найти в нём какие то правила, временно добавить к ним что то и применить модифицированный словарь
Lecron писал(а):
08 окт 2020 15:46
то здесь, одна вычисляемая регулярка заменяет несколько десятков обычных rex-правил и/или существенно их упрощает.
делать автоматические замены в регулярках очень опасное занятие. Тут нужно весь словарь записывать по определенным правилам, что бы автоматические замены не сломали ничего. Можно сделать замены временные на время действия скрипта применить изменённые правила, а сам словарь при этом не сохранять.

Аватара пользователя
Lecron
Обыватель

Балаболка TTS

#435

Сообщение Lecron »

tonio_k писал(а):
08 окт 2020 16:11
это правило вместо Александр I или Павел V превратит обоих в declension_dynast
(понурив голову и шаркая ножкой) Вы бы хоть читали внимательно, а не вырывали из контекста.

declension_dynast это функция, в которую будет передано найденное выражение.
"В гости к Павлу V пришел Александр I."
Правило найдет два вхождения. В первый раз вызовет функцию declension_dynast(Павлу V), которая вернет "Павлу пятому", во второй declension_dynast(Александр I) с результатом "Александр первый".
Результат "В гости к Павлу пятому пришел Александр первый."
tonio_k писал(а):
08 окт 2020 16:11
делать автоматические замены в регулярках очень опасное занятие. Тут нужно весь словарь записывать по определенным правилам, что бы автоматические замены не сломали ничего.
Что может сломать это правило? Оно или найдет "Имя РИМСК" и все хорошо, или не найдет и ничего не будет.
Скорее вы напутаете в череде таких

Код: Выделить всё

(\w+ете|\w+ины|\w+иной|\w+той|\w+ины|\w+лле)\s+([IVXLCDMХСМ]+)([^\w-])=$1 $2-ой$3
(\w+ету|\w+ину|\w+ллу)\s+([IVXLCDMХСМ]+)([^\w-])=$1 $2-ую$3
(\w+на|\w+та|\w+лла)\s+([IVXLCDMХСМ]+)([^\w-])=$1 $2-ая$3
Кмк, упрощение правила и сокращение их количеств, ведет скорее к снижению опасности.

Аватара пользователя
tonio_k
V.I.P.

Балаболка TTS

#436

Сообщение tonio_k »

Lecron писал(а):
08 окт 2020 17:54
а не вырывали из контекста.
так я только контекстно что то знакомое вижу и реагирую не видя пока общей картины и пытаюсь понять через призму своих знаний.

Мы сейчас ветку балаболки засорим пока вы мне будете пытаться объяснить свою задумку.

Давайте сюда переедем

Аватара пользователя
Lecron
Обыватель

Балаболка TTS

#437

Сообщение Lecron »

tonio_k, не настаиваю и не уговариваю. Стояла цель поделится идеей фичи (регулярка с динамической генерацией строки замены) и описать ее пользу. Цель достигнута. Сейчас пошло обсуждение реализации, а не самой идеи. Я это вижу так. (можно скопировать код в online REPL и проверить работу).

Код: Выделить всё

import re

def replace_func(m):
    print('call replace func')
    name, num = m.groups()
    return f'{num} {name}'

text = 'В гости к Павлу V пришел Александр I.'
text = re.sub(r'\b([А-Я]\w+?)\s([IVXLCDMХСМ]+)', replace_func, text)
print(text)
ВСЁ!!! Проще не придумаешь. Такое причесывание текста не нужно? Или предпочитаете удалять гланды через ж? Ну и прекрасно, если все устраивает.

ЗЫ. Обсуждение развития rex-правил в теме про омографы? Оригинально)))

Аватара пользователя
Lecron
Обыватель

Балаболка TTS

#438

Сообщение Lecron »

Не знаю от программы зависит или от движка. Когда встречаются слова с двумя дефисами, Ростов-на-дону, Волан-де-морт и т.д., есть шанс потерять средний слог Ростов-дону, Волан-морт. Кажется происходит, когда этим словом (без финального знака препинания) заканчивается порция текста передаваемая движку. В основном окне такое редкость, а вот при прослушивании Новых имен так всегда.

Аватара пользователя
balabolka
V.I.P.

Балаболка TTS

#439

Сообщение balabolka »

Lecron писал(а):
10 окт 2020 19:03
Когда встречаются слова с двумя дефисами, Ростов-на-дону, Волан-де-морт и т.д., есть шанс потерять средний слог
Какой голос используется? Можно ли записать звуковой файл с таким примером?

Аватара пользователя
Lecron
Обыватель

Балаболка TTS

#440

Сообщение Lecron »

balabolka писал(а):
11 окт 2020 06:53
Какой голос используется? Можно ли записать звуковой файл с таким примером?
double_defice.zip
(43.6 КБ) 10 скачиваний
Текст и звук. Голос Loquendo Olga.
Насколько разумно при прослушивании Имен, отправлять движку финиширующую точку? Получим как-бы предложение из одного слова.

Аватара пользователя
wasyaka
V.I.P.

Балаболка TTS

#441

Сообщение wasyaka »

wasyaka писал(а):
04 окт 2020 20:57
2020-10-04_202818.png (45.82 КБ) 512 просмотров
При вкл словаре hmg- заменяется омограф на выбраный двойной щелчок + ПКМ - удобно

2.png (69.44 КБ) 512 просмотров
при добавлении фразы в словарь (Ctrl+B )в словаре менять ударение приходится вручную,- не удобно

5.png (131.07 КБ) 512 просмотров
а зделать так- двойной щелчок + ПКМ???
Wasyaka больше писать не будет . Удачи!

Ответить

Вернуться в «Балаболка»