Скрипты для Demagog
Модератор: flegont
- tonio_k
- V.I.P.
Скрипты для Demagog
Пожелание, а есть возможность добавить что-то вроде показателя прогресса?
Пока висят консольные запросы на Яндекс, создается ощущение, что они ... "висят/зависли"
Например, количество полученных аудиофайов из количества временных текстовых файлов.
(Получено 3 из 263)
Короче, что бы что-то двигалось, при условии, что действительно что-то в плане файлов двигается
Отправлено спустя 5 минут 42 секунды:
Может это сделать как отдельную утилиту (еще одно окно консоли)? Которая вызывается YaTTS после разбития на сериалы и занимается только сравнением содержимого временных файлов. И при их равенстве сама закрывается.
Пока висят консольные запросы на Яндекс, создается ощущение, что они ... "висят/зависли"
Например, количество полученных аудиофайов из количества временных текстовых файлов.
(Получено 3 из 263)
Короче, что бы что-то двигалось, при условии, что действительно что-то в плане файлов двигается
Отправлено спустя 5 минут 42 секунды:
Может это сделать как отдельную утилиту (еще одно окно консоли)? Которая вызывается YaTTS после разбития на сериалы и занимается только сравнением содержимого временных файлов. И при их равенстве сама закрывается.
- wasyaka
- V.I.P.
Скрипты для Demagog
А зделать, чтобы:
Открываем обработанный текст, заглавной буквой ударения, - универсализм - далее или на Макса- Таню или...
подключаем словари для Яндеса и обработка этими словарями с последующей записью одним целым действием?
- tonio_k
- V.I.P.
Скрипты для Demagog
можно по пунктам как вы хотите что бы работало?
Если я правильно понял, в папку dic вы хотите добавить свои словари (rex, dic).
В Демагоге открыть текст, в котором предварительно уже проставили все ударения заглавными буквами (как для Максима).
И теперь нужно, что бы к открытому тексту в Демагоге, Запустить всего один скрипт, который обработал текст вашими подключичными словарями и начал его отправлять на Яндекс и получать mp3?
- wasyaka
- V.I.P.
Скрипты для Demagog
В точку.
После первичной обработки текста словарями добиваю раставляю омографы вручную в Homograph, а после одним действом, если исключить Homograph, то получится - всавил текст -
включил скрипт - получил запись...
- tonio_k
- V.I.P.
Скрипты для Demagog
Пока готовил скрипт под вашу просьбу, всплыла проблема Version 7.29.370 при работе скрипта со словарями. flegont я проблему описал. Скрипт уже готов. Как проблема решится - сразу скину сборку с комментариями для редактирования
- flegont
- V.I.P.
Скрипты для Demagog
Завтра буду разбираться с 370-й, сравню по архиву версий
UPDATE: исправил, версия обновлена до 371
UPDATE: исправил, версия обновлена до 371
- tonio_k
- V.I.P.
Скрипты для Demagog
Решил не дожидаться исправления и сделал сборку на основе предыдущей версии 7.29.369
черновик
Инструкция:
1) Кроме файла СПИСОК СЛОВАРЕЙ.lua содержимое папки \Demagog-Yandex\dic - можно удалить
2) Помещаем свои словари в папку \Demagog-Yandex\dic\
3) Открываем через блокнот (удобнее через Notepad++) \СПИСОК СЛОВАРЕЙ.lua
4) Редактируем только строки начинающиеся с
Код: Выделить всё
WFilter(0,0,dic..
Строки можно сортировать в той последовательности, в которой нужно что бы словари сработали.
Что бы не путаться, можно везде поставить выбор алгоритма применения словаря:
Код: Выделить всё
false) --перебором (галочка убрана)
После редактирования СПИСОК СЛОВАРЕЙ.lua
1) запускаем Демагог
2) Ctrl+F2 - запускаем YaTTS_configure.lua и сохраняем настройки. (сохранённые настройки будут применяться для всех последующих запусков Демагога.)
Теперь сама процедура:
3) Открываем/перетаскиваем/вставляем текст книги в любое окно кроме 0-статистика
4) Ctrl+F2 - запускаем 20_ОКНО ОБРАБОТАТЬ СЛОВАРЯМИ и получить MP3.lua
- выбираем папку куда сохранить mp3
- измененный словарями текст будет сохранен в файл \Demagog-Yandex\temp\0.txt
5) Ждем завершение работы скрипта (по готовности в окне статистики появится лог информация)
6) находим наши MP3 в папке которую ранее выбирали
В случае сбоя и расхождения в файлах от Яндекса:
6) открываем в любом окне Демагога файл \Demagog-Yandex\temp\0.txt
7) Ctrl+F2 - запускаем YaTTS.lua
- balaamster
- Обыватель
- tonio_k
- V.I.P.
Скрипты для Demagog
В lua есть возможность вызвать скрипт в параллельном потоке?
Т.е. идет выполнение скрипта 1.
В скрипте 1 вызывается скрипт 2.
При этом, скрипт 1 работает дальше, а скрипт 2 в это время начинает делать свою задачу.
Т.е. идет выполнение скрипта 1.
В скрипте 1 вызывается скрипт 2.
При этом, скрипт 1 работает дальше, а скрипт 2 в это время начинает делать свою задачу.
- flegont
- V.I.P.
Скрипты для Demagog
Конкретно так - нельзя.
Но в Lua есть понятие "сопрограммы" - coroutine.
Скрипт, в процессе своей работы может создать нужное количество сопрограмм. Каждая сопрограмма может находится в состоянии: выполняется, приостановлена, мертва.
Т.о. скрипт может работать в (псевдо) многозадачном режиме.
Но сопрограммы действуют только внутри виртуальной Lua-машины, и никак не связаны с потоками в операционной системе.
Подробно в этом я пока не разбирался. Надо будет учебник Р. Иерусалимского почитать, и в справочном руководстве Lua 5.3 пошарить. И поискать примеры скриптов с сопрограммами
Но в Lua есть понятие "сопрограммы" - coroutine.
Скрипт, в процессе своей работы может создать нужное количество сопрограмм. Каждая сопрограмма может находится в состоянии: выполняется, приостановлена, мертва.
Т.о. скрипт может работать в (псевдо) многозадачном режиме.
Но сопрограммы действуют только внутри виртуальной Lua-машины, и никак не связаны с потоками в операционной системе.
Подробно в этом я пока не разбирался. Надо будет учебник Р. Иерусалимского почитать, и в справочном руководстве Lua 5.3 пошарить. И поискать примеры скриптов с сопрограммами
- balaamster
- Обыватель
Скрипты для Demagog
Это интересная часть Lua, но, прочитав один раз раздел книги Иерусалимского, так и не разобрался в вопросе. Понял, как можно написать генераторы, подобные генераторам в python, но не более.
Чувствую, что надо ещё раза два прочитать :)
Ещё один способ запустить несколько "потоков" это os.execute()
Но эти "потоки" будут "неконтролируемые".
Код: Выделить всё
os.execute('start "program1" D:\scripts\script_1.bat parameter1 parameterN')
os.execute('start "program1" "D:\scripts\script 2.cmd" parameter1 parameterN')
os.execute('start "program1" D:\scripts\lua53.exe "D:\script 3.lua" parameter1 parameterN')
Но, при таком исполнении, надо будет писать функцию, которая будет по какому-то критерию отслеживать завершение работы этих запущенных параллельно скриптов, если в дальнейшем понадобятся данные, произведённые этими скриптами (чтобы быть уверенным, что скрипт вернул все нужные данные или наоборот завершился с ошибкой).
P.S. lua-скрипт, из третьей строки, запустится в "чистом" lua. Ему будут недоступны внутренние функции из Demagog.
- tonio_k
- V.I.P.
Скрипты для Demagog
я так понимаю это будет чисто в рамках lua без функций типа RexRepl от demagog?os.execute('start "program1" D:\scripts\lua53.exe "D:\script 3.lua" parameter1 parameterN')
Отправлено спустя 21 минуту 54 секунды:
Графическая библиотека Demagog дает возможность получать результаты работы скрипта в наглядной форме, в виде графиков и диаграмм. Для подключения в начале скрипта необходимо указать: require "profiles/grafica"
Вопрос, это одноразовое что то типа ShowMessage только выводит график один раз? или параллельная - может менять отображение графика по мере работы основного скрипта? Это я закидываю удочки на счет альтернативного статус бара в виде необычной круговой диаграммы например.
- flegont
- V.I.P.
Скрипты для Demagog
Graphics demo.lua запустите. Там, по ходу работы скрипта, последовательно меняются изображения, а в конце, перед завершением работы, демонстрируется простенькая анимашка - обратный отсчет.
Так что мысли про графический статусбар и меня посещали.
Надо бы время выбрать, поэкспериментировать...
Так что мысли про графический статусбар и меня посещали.
Надо бы время выбрать, поэкспериментировать...
- flegont
- V.I.P.
Скрипты для Demagog
Простой графический индикатор
Код: Выделить всё
require "profiles/grafica"
-- графический индикатор процесса
-- i изменяется от 1 до imax
function Gauger(i,imax)
Clear()
Area(-100,-100,100,100)
Pen(Red,1)
Brush('FFFFA4')
Ellipse(-80,-80,80,80)
Brush('')
Brush(LightGreen)
Pie(-80,-80,80,80,0,2*math.pi*i/imax)
Render()
end
-- пример использования
Show()
imax = 1000
for i = 1,imax do
Delay(1) -- имитирует процесс неких вычислений внутри цикла
if i % 50 == 0 then -- достаточно 20 кадров по ходу процесса
Gauger(i,imax) -- отображает готовность i-го шага вычислений
end
end
Hide()
- flegont
- V.I.P.
Скрипты для Demagog
Простой графический индикатор 2
Если в предыдущем примере заменить функцию Gauger на приведенную ниже, то получится индикатор, дополнительно отображающий процент выполнения
Если в предыдущем примере заменить функцию Gauger на приведенную ниже, то получится индикатор, дополнительно отображающий процент выполнения
Код: Выделить всё
-- графический индикатор процесса
-- i изменяется от 1 до imax
function Gauger(i,imax)
Clear()
Area(-100,-100,100,100)
Pen(Red,1)
Brush('FFFFCE')
Ellipse(-80,-80,80,80)
Brush('')
Brush(LightGreen)
Pie(-80,-80,80,80,0,2*math.pi*i/imax)
Brush(White)
Ellipse(-55,-55,55,55)
Font('Arial',20,Green)
TextOut(-15,15,math.floor(100*i/imax))
Render()
end
- balaamster
- Обыватель
Скрипты для Demagog
Сегодня задался вопросом, почему никто не задал вопрос, о неработающем скрипте для Яндекс TTS.
Ведь по умолчанию выполнение powershell отключено в пользовательских ОС.
Обнаружил интересную особенность. При политиках по умолчанию (запуск скриптов отключен):
Создаём в lib файл test.ps1, с содержимым:
Запускаем из окна Demagog по F2:
os.execute('powershell -file '..HomeFolder('lib')..'test.ps1')
Получаем (запуск скриптов включен, подпись не проверяется)
Получается в библиотеке Lua учтена эта особенность политики по умолчанию и внесена правка?
Ведь по умолчанию выполнение powershell отключено в пользовательских ОС.
Обнаружил интересную особенность. При политиках по умолчанию (запуск скриптов отключен):
Код: Выделить всё
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Restricted
Код: Выделить всё
get-executionpolicy -List | format-list
pause
os.execute('powershell -file '..HomeFolder('lib')..'test.ps1')
Получаем (запуск скриптов включен, подпись не проверяется)
Код: Выделить всё
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Bypass
- tonio_k
- V.I.P.
Скрипты для Demagog
На сколько мне известно, powershell запущенный из под cmd не требует включения политик для самого powershell. А os.execute, как я понял, это что то вроде аналога cmd. Может в этом дело?
- balaamster
- Обыватель
Скрипты для Demagog
Обновил скрипты.
- конфигуратор запроса к TTS-сервису выполнен в виде hta-файла
- добавлена глобальная переменная clean_start, значение true - очистить папку со временными файлами, перед началом обработки. false (по умолчанию) - папка не очищается.
- озвучка выделенного фрагмента перенесена в консоль PowerShell.
► Показать
- flegont
- V.I.P.
- zhukov23
- Наблюдатель
Скрипты для Demagog
Не знаю, конечно, кто может в этом разобраться. Ни одной нормальной инструкции. Откуда взять ключ разработчика? https://cloud.yandex.ru/docs/iam/operat ... key/create здесь я получил ключ, но он вот такого формата:Обновил скрипты.
конфигуратор запроса к TTS-сервису выполнен в виде hta-файла
добавлена глобальная переменная clean_start, значение true - очистить папку со временными файлами, перед началом обработки. false (по умолчанию) - папка не очищается.
озвучка выделенного фрагмента перенесена в консоль PowerShell.
Способ работы со скриптами.
api_key:
id: ajeke74kbp5bfq7m6ka2
service_account_id: ajepg0mjt06siuj65usm
created_at: "2019-04-09T08:41:27Z"
secret: AQVN1HHJReSrfo9jU3aopsXrJyfq_UHsssT5ICtm
А что вставлять в YATtsConfigurator? Там ключ другого формата.
- balaamster
- Обыватель
Скрипты для Demagog
Текущий формат ключа, выдаваемого Яндексом, подходит только для новой версии сервиса, в котором запрос на озвучку идёт через метод POST.
У меня в скриптах идёт обращение к старой версии сервиса, где запрос через GET и ключ другого формата.
Если нет ранее полученного ключа старого формата, то в конфигураторе можно оставить демо-ключ для ознакомления с сервисом.
- flegont
- V.I.P.
Скрипты для Demagog
Внес маленькое дополнение.
Cancel() - функция встроенного интерпретатора. Возвращает true если была нажата глобальная клавиша прерывания длительных процессов (Break по умолчанию). Используется для досрочного прекращения работы скрипта.
Cancel() - функция встроенного интерпретатора. Возвращает true если была нажата глобальная клавиша прерывания длительных процессов (Break по умолчанию). Используется для досрочного прекращения работы скрипта.
Код: Выделить всё
-- ПРИМЕР 1
for i = 1,1000000000 do
a = i
if Cancel() then goto HALT end
end
::HALT::
ShowMessage(a)
Код: Выделить всё
-- ПРИМЕР 2
-- показ по отдельности всех слов из текста в окне 1
require "profiles/grafica"
cl = os.setlocale('', 'ctype')
s = WText(1)
s = string.gsub(s,'\9',' ')
s = string.gsub(s,'-','- ')
s = string.gsub(s,'\r',' ')
s = string.gsub(s,'\n',' ')
a = string.split(s,' ')
GaugeInit(#a)
Show()
for i = 1,#a do
Clear()
Area(-60,-12,60,12)
Font('Verdana',8,Black)
Pen(LightGray,2)
Rectangle(-60,-12,60,12)
if string.trim(Body(a[i])) ~= '' then
TextOut(0,8,a[i],taCenter)
Render()
--StrSpeak(a[i]) -- если нужно чтение , то раскомментируйте эту строку
Delay(300) -- а эту - закомментируйте
end
Gauge(i)
if Cancel() then break end
end
Hide()
Gauge(0)
os.setlocale(cl)
- tonio_k
- V.I.P.
Скрипты для Demagog
Сразу пришла идея применения этой функции в качестве приостановки выполнения скрипта для для просмотра "текущего промежуточного" результата вычислений:
Код: Выделить всё
a=a+1
if Cancel() then ShowMessage(a) end
- tonio_k
- V.I.P.
Скрипты для Demagog
Само событие присвоения true происходит на каком этапе?
1) Запустил Демагог - начинается мониторинг клавиши Break
2) Запустил Скрипт - начинается мониторинг клавиши Break
Два раза нажал клавишу Break, true меняется на false?
- tonio_k
- V.I.P.
Скрипты для Demagog
Еще момент:
в архиве присутствует файл $.cfg - он перезапишет "текущие пользовательские настройки" если не глядя перезаписать поверх старого Демагога
- flegont
- V.I.P.
Скрипты для Demagog
Дистрибутив почистил от cfg, перезалил.
Ожидание нажатия Break начинается с момента запуска скрипта. Пока Break не нажата, флаг события = false. Как только Break нажата - то всё, труба пропела, любые дальнейшие вызовы Cancel() вернут true.
Отправлено спустя 6 минут 11 секунд:
Поэтому, единственное назначение функции Cancel() - воспринять сигнал об окончании работы скрипта. "Мюрат пошел в обход - нас хочет окружить! Фельдмаршал приказал нам отступить." (с)
Ожидание нажатия Break начинается с момента запуска скрипта. Пока Break не нажата, флаг события = false. Как только Break нажата - то всё, труба пропела, любые дальнейшие вызовы Cancel() вернут true.
Отправлено спустя 6 минут 11 секунд:
Поэтому, единственное назначение функции Cancel() - воспринять сигнал об окончании работы скрипта. "Мюрат пошел в обход - нас хочет окружить! Фельдмаршал приказал нам отступить." (с)
- tonio_k
- V.I.P.
- flegont
- V.I.P.
Скрипты для Demagog
Пока никакой, но я думал над этим. Добавить еще одну функцию - установку флага ожидания нажатия клавиши Break.
Показалось излишним, но если очень надо, то сделаю.
Показалось излишним, но если очень надо, то сделаю.
- tonio_k
- V.I.P.
Скрипты для Demagog
не то что бы прямо очень надо . Еще не начал ее применять из за отсутствия острой необходимости в этой функции для себя лично. Смутила заложенная в неё "одноразовость"
- flegont
- V.I.P.
Скрипты для Demagog
Вообще-то, меня тоже... Так что, сейчас будет еще одно дополнение
Отправлено спустя 5 минут 49 секунд:
ForgotCancel() - функция встроенного интерпретатора. Сбрасывает флаг нажатия пользователем глобальной клавиши Break. Пример использования:
Если в этом примере закомментировать ForgotCancel(), то 2-й длительный процесс выполняться не будет - скрипт завершится сразу.
Отправлено спустя 5 минут 49 секунд:
ForgotCancel() - функция встроенного интерпретатора. Сбрасывает флаг нажатия пользователем глобальной клавиши Break. Пример использования:
Код: Выделить всё
ShowMessage('НАЧАТЬ 1-Й ДЛИТЕЛЬНЫЙ ПРОЦЕСС')
for i = 1,1000000000 do
a = i
if Cancel() then break end
end
ShowMessage('a = '..a)
ForgotCancel() -- заново ожидать нажатия Break
if Cancel() then goto HALT end
ShowMessage('НАЧАТЬ 2-Й ДЛИТЕЛЬНЫЙ ПРОЦЕСС')
for i = 1,1000000000 do
b = i
if Cancel() then break end
end
ShowMessage('b = '..b)
::HALT::
- tonio_k
- V.I.P.
- flegont
- V.I.P.
- flegont
- V.I.P.
Скрипты для Demagog
v. 7.29.373 (сборка от 02.06.2019)
Headline(name) - функция встроенного интерпретатора; изменяет заголовок окна Инфографики, (по умолчанию: 'Инфографика').
Headline(name) - функция встроенного интерпретатора; изменяет заголовок окна Инфографики, (по умолчанию: 'Инфографика').
Код: Выделить всё
require "profiles/grafica"
Clear()
Show()
Headline('У попа')
Delay(2000)
Headline('была собака')
Delay(2000)
Headline('') -- нет заголовка
Delay(2000)
Headline() -- заголовок по умолчанию
- wasyaka
- V.I.P.
Скрипты для Demagog
Запустил, ещё раз запустил и пошёл в Play_Abalaamster писал(а): ↑15 апр 2019 16:24Если в процессе скачивания возникнут ошибки - сетевой сбой, ошибка работы моего скрипта, то
в конце работы скрипта появится сообщение, о несоответствии количества текстовых файлов сериала и полученных mp3-файлов, в проводнике откроется каталог, в котором находятся временные txt-файлы сериала, полученные mp3-файлы (подкаталог "audio") и лог-файл (подкаталог "log")
Процесс скачивания можно будет продолжить, заново запустив скрипт на вкладке с книгой и ответив на запрос "ДА - продолжить преобразование с последнего необработанного файла"
Там тоже не все, но имеющие сформировал, и от сбойного записал по новой через скрипт и добавил к записаным в Play_A.
Нельзя ли реализовать такой сценарий в скипте? (слишком часто стали возникать такие проблемы, пробывал начать не с проблемного файла а немного раньше - без проблем, ошибка не понятна, всегда на новом предложении)
- balaamster
- Обыватель
Скрипты для Demagog
Как я понимаю, нужно сделать так, чтобы скрипт запускался заново, если в результате первого прохода получены не все аудио-файлы?
Если так, то это можно реализовать. Но, думаю, количество автоматических повторных запусков стоит ограничить до 5-10, а то можно и в бесконечный цикл уйти, при проблемах с сетью, недоступности сервиса со стороны Яндекса и т.д.
- wasyaka
- V.I.P.
Скрипты для Demagog
Если в логах сбойный файл не в числе нескольких последних - то повторный запуск - ОКbalaamster писал(а): ↑13 июн 2019 21:35Как я понимаю, нужно сделать так, чтобы скрипт запускался заново, если в результате первого прохода получены не все аудио-файлы?
Если 1 2 3 последних то тупик - надо этот текст из проблемных удалить из текста,вставить в другое окно и записать по отдельности... в Play_A это ре5шается автоматом, в остатке только дозаписать.
Но если сложно, не ломайте голову, это можно обойти другим путём
- tonio_k
- V.I.P.
Скрипты для Demagog
flegont, применил инфографику в таком виде:
Получается примерно такая инфографика:
Вопрос, а можно ли вот эти самые (3%) проценты вывести в отдельную строку?
Пробовал применить /r - не прокатило
т.е. что бы одновременно выводил в окно инфографики сразу два:
TextOut
TextOut
Еще вопрос, а есть возможность задать размер окна инфографики?
Код: Выделить всё
Show() -- Открываем окно графика
Clear() -- очищаем окно с старыми событиями
Headline('Прогресс выполнения')
local schetchik = 1
--Начало цикла
TextOut(-3,3,"Обработка сериала "..schetchik.." из "..#a.." ("..math.floor(100*schetchik/#a).."%)",2)
Render()
schetchik = schetchik + 1
--Конец цикла
► Показать
Пробовал применить /r - не прокатило
т.е. что бы одновременно выводил в окно инфографики сразу два:
TextOut
TextOut
Еще вопрос, а есть возможность задать размер окна инфографики?
- flegont
- V.I.P.
Скрипты для Demagog
1) TextOut не поддерживает перенос строки '\r'
Можно так:
Замечание. Во втором TextOut координата Y=-10 взята мною наугад - подбирать надо от размера шрифта, чтобы не произошло наложение на первую строку.
2) Фишку с программным заданием координат и размеров окна Инфографики я, в свое время, опробовал, и пока от нее отказался. Ибо результаты меня не удовлетворили.
Можно так:
Код: Выделить всё
Show() -- Открываем окно графика
Clear() -- очищаем окно с старыми событиями
Headline('Прогресс выполнения')
local schetchik = 1
--Начало цикла
TextOut(-3,3,"Обработка сериала "..schetchik.." из "..#a,2)
TextOut(-3,-10,"("..math.floor(100*schetchik/#a).."%)",2)
Render()
schetchik = schetchik + 1
--Конец цикла
2) Фишку с программным заданием координат и размеров окна Инфографики я, в свое время, опробовал, и пока от нее отказался. Ибо результаты меня не удовлетворили.
- tonio_k
- V.I.P.
Скрипты для Demagog
Лично я каждую книгу отдельно просматриваю и редактирую прежде чем пустить её на обработку словарями. Если книги из одной серии, то удобнее открыть параллельно сразу несколько книг в окнах Демагога, внести изменения (удалить аннотацию, проверить корректность вставки примечаний, применить литературный текст и т.д.). Затем сохранить каждую книгу в отдельности. Затем через скрипт склеить все книги в одну.
Что бы оптимизировать процесс и уменьшить ручные действия, сделал скрипт, который склеивает содержимое всех окон Демагога последовательно согласно нумерации окон в одну книгу помещая результат в окно Статистики. Склеивание прекращается, как только скрипт встретит пустое окно. Поэтому надо следить что бы при загрузке книги в окно не было пустых окон между окнами с книгами.
В скрипте присутствует автоматическая вставка нумерации тома в конце каждой книги. При необходимости можно убрать или заремарить эту строку.
Если книг много, то можно изменить начальную нумерацию томов для продолжения склеивания.
Что бы оптимизировать процесс и уменьшить ручные действия, сделал скрипт, который склеивает содержимое всех окон Демагога последовательно согласно нумерации окон в одну книгу помещая результат в окно Статистики. Склеивание прекращается, как только скрипт встретит пустое окно. Поэтому надо следить что бы при загрузке книги в окно не было пустых окон между окнами с книгами.
В скрипте присутствует автоматическая вставка нумерации тома в конце каждой книги. При необходимости можно убрать или заремарить эту строку.
Если книг много, то можно изменить начальную нумерацию томов для продолжения склеивания.
Код: Выделить всё
docend1 = '... Конец '
docend2 = '-ого тОма...'
tom = 1 -- начальная нумерация тома
WNew(0)
WAdd(0,' СБОРНИК \r') -- Вставка заголовка. Можно заремареить если не нужно.
k = 0
for i = 1,16 do -- с 1 по 16 окно
k = k+1
s = WText(k)
if #s == 0 then goto HALT end
WAdd(0,k,'')
WAdd(0,'\r\r'..docend1..k..docend2..'\r\r') -- Вставка нумерации тома. Можно заремареить если не нужно.
tom = tom+1
end
::HALT::
ShowMessage('Готово! Результат в окне "0 - Статистика"')
- regacaty
- Постоялец
Скрипты для Demagog
Читаю ветку и понимаю - чтобы воспользоваться этой программой, нужно быть программистом)
Вопрос по Яндекс ттс:
1. Ключ? У меня есть ключ (я так понял, что пробный) - насколько его хватает, где узнать о лимитах?
2. Есть-ли нормальное решение подготовки текста? Что не инструкция, то целый квест - откройте Balabolka, потом KooBAudio, а еще Homograph, вот потом уже усаживайтесь поудобнее и разберитесть с Demagog и ее скриптами)
Вопрос по Яндекс ттс:
1. Ключ? У меня есть ключ (я так понял, что пробный) - насколько его хватает, где узнать о лимитах?
2. Есть-ли нормальное решение подготовки текста? Что не инструкция, то целый квест - откройте Balabolka, потом KooBAudio, а еще Homograph, вот потом уже усаживайтесь поудобнее и разберитесть с Demagog и ее скриптами)
- tonio_k
- V.I.P.
Скрипты для Demagog
С какой программы и голосового модуля лучше начать?
Самое простое: готовая сборка Демагога, где все необходимые скрипты уже включены в сборку. Пара щелчков мыши - и запись началась. В архиве есть дополнительная инструкция. Сборка периодически обновляется.
- tonio_k
- V.I.P.
Скрипты для Demagog
Есть идея, как можно дополнительно ускорить обработку текста словарями.
В наличии есть большой словарь замен чисел. Это довольно громоздкий словарь rex и в плане затрат времени на обработку текста вполне себе ощутим.
Если подойти к вопросу индексным методом, то на протяжении всего текста книги, если предварительно разбить ее на сериал, то, возможно, большая половина из этих кусков текста не будет содержать чисел вообще. Следовательно к таким кускам текста применять словарь числительных не обязательно.
Все что нужно, это сделать проверку текста на наличие:
1) любой комбинации из латинских букв: IVXMDLC
2) наличие любой цифры
Такая проверка должна занять минимум времени в сравнении если к каждому отрезку будет применен словарь.
В скрипте примерно будет выглядеть так:
Вопрос к програмистам lua, как прописать это самое:
[[ЗДЕСЬ ПРОВЕРКА на наличии в переменной ttb символов [IVXMDLC\d]+ ]]
В наличии есть большой словарь замен чисел. Это довольно громоздкий словарь rex и в плане затрат времени на обработку текста вполне себе ощутим.
Если подойти к вопросу индексным методом, то на протяжении всего текста книги, если предварительно разбить ее на сериал, то, возможно, большая половина из этих кусков текста не будет содержать чисел вообще. Следовательно к таким кускам текста применять словарь числительных не обязательно.
Все что нужно, это сделать проверку текста на наличие:
1) любой комбинации из латинских букв: IVXMDLC
2) наличие любой цифры
Такая проверка должна занять минимум времени в сравнении если к каждому отрезку будет применен словарь.
В скрипте примерно будет выглядеть так:
Код: Выделить всё
dic = HomeFolder('dic')
dic2 = HomeFolder('dic2')--на случай если словарь в другой dic2 папке
WFilter(0,0,dic2..'00_REX_подготовка текста.rex',true)
WFilter(0,0,dic2..'20_Ё-фикатор.dic',true)
ttb = WText(0)
if [[ЗДЕСЬ ПРОВЕРКА на наличии в переменной ttb символов IVXMDLC\d ]] then
WFilter(0,0,dic..'10_REX_числа.rex',true)
end
WFilter(0,0,dic..'40.1_(w+) звезды подготовка.rex',false)
WFilter(0,0,dic..'40.2_(w+) звезды аналог.dic',false)
[[ЗДЕСЬ ПРОВЕРКА на наличии в переменной ttb символов [IVXMDLC\d]+ ]]
- flegont
- V.I.P.
Скрипты для Demagog
Идея хорошая, но...
Боюсь, что проверка текста средствами Lua на присутствие в нем символов IVXMDLC\d будет работать так же долго, как аналогичная проверка оного регулярными выражениями
Боюсь, что проверка текста средствами Lua на присутствие в нем символов IVXMDLC\d будет работать так же долго, как аналогичная проверка оного регулярными выражениями
- flegont
- V.I.P.
Скрипты для Demagog
А может, я неправ в своих сомнениях. Надо тестировать на скорость.
Примеры использования:
if CiferExists(s) then ShowMessage('YES') else ShowMessage('NO') end
ShowMessage(CiferExists(s)) -- если цифры в s не найдены, то сообщение будет пустым
Код: Выделить всё
-- возвращает 1-ю найденную в строке s арабскую или латинскую цифру или nil
function CiferExists(s)
return string.match(s,"[IVXMDLC%d]+")
end
if CiferExists(s) then ShowMessage('YES') else ShowMessage('NO') end
ShowMessage(CiferExists(s)) -- если цифры в s не найдены, то сообщение будет пустым
- tonio_k
- V.I.P.
Скрипты для Demagog
Код: Выделить всё
ttb = WText(1)
if string.match(ttb,"[IVXMDLC%d]+") then
WFilter(1,1,dic..'10_REX_числа.rex',true)
end
Если в тексте нет чисел, то словарь не применяется. Выигрыш во времени есть.
- wasyaka
- V.I.P.
Скрипты для Demagog
Вы заблудились...
В трёх соснах темах.
На ВСЕ ваши вопросы есть ответы на форуме - прочитать лень?
Слишком много вопросов...
Ну и мне лениво... сенокос
- wasyaka
- V.I.P.
Скрипты для Demagog
А в чём разница обработки текста по времени 1 час, в прослушке который 15 часов, перед обработкой его-же в 30минут?
Раньше чем прослушанный предедущий его ж слушать не начнёш...
- tonio_k
- V.I.P.
Скрипты для Demagog
это дискуссионный вопрос. Моя мотивация поиска в приросте скорости обработки словарями в том, что словари имеют тенденцию увеличиваться. Общая скорость подготовки книги, соответственно, падает. Мощности ПК растут, но покупать новый не хочется. Если есть возможность подготовить книгу быстрее программным путем, то почему бы не копать в этом направлении?
Между Демагогом и Балаболкой штатно - разницы в производительности почти нет. Но вот за счёт скриптов можно найти интересные лазейки, которые дают преимущество в скорости обработки словарями. В этом преимущество Демагога и поэтому я отдаю ему предпочтение.
Ещё мотивация, я в mp3 аудиокнигу не записываю,а подготавливаю текст для открытия его на смартфоне. Максим, установленный на смартфоне, читает этот подготовленный текст вслух. Запись в mp3 занимает львиную долю общего времени создания аудио книги. Теперь, исключив этот пункт, любой прирост скорости обработки словарями будет явно ощущается.
- tonio_k
- V.I.P.
Скрипты для Demagog
Предварительные замеры:
В книге числа представлены только в нумерации глав.
10:29 - одна книга без проверки на наличие чисел(словарь с числами применялся постоянно)
08:05 - одна книга с проверкой на наличие чисел (словарь срабатывал только если в тексте присутствовали числа)
Там образом на вскидку прирост в общей скорости обработки словарями + 20%
В книге числа представлены только в нумерации глав.
10:29 - одна книга без проверки на наличие чисел(словарь с числами применялся постоянно)
08:05 - одна книга с проверкой на наличие чисел (словарь срабатывал только если в тексте присутствовали числа)
Там образом на вскидку прирост в общей скорости обработки словарями + 20%