Страница 7 из 13

Скрипты для Demagog

Добавлено: 14 апр 2019 16:18
tonio_k
Пожелание, а есть возможность добавить что-то вроде показателя прогресса?
Пока висят консольные запросы на Яндекс, создается ощущение, что они ... "висят/зависли" :smile1:
Например, количество полученных аудиофайов из количества временных текстовых файлов.
(Получено 3 из 263)
Короче, что бы что-то двигалось, при условии, что действительно что-то в плане файлов двигается :big_smile:


Отправлено спустя 5 минут 42 секунды:
Может это сделать как отдельную утилиту (еще одно окно консоли)? Которая вызывается YaTTS после разбития на сериалы и занимается только сравнением содержимого временных файлов. И при их равенстве сама закрывается.

Скрипты для Demagog

Добавлено: 14 апр 2019 19:31
wasyaka
tonio_k писал(а):
14 апр 2019 16:24
Пожелание
А зделать, чтобы:
Открываем обработанный текст, заглавной буквой ударения, - универсализм - далее или на Макса- Таню или...
подключаем словари для Яндеса и обработка этими словарями с последующей записью одним целым действием? :thank:

Скрипты для Demagog

Добавлено: 14 апр 2019 20:01
tonio_k
wasyaka писал(а):
14 апр 2019 19:31
Открываем обработанный текст, заглавной буквой ударения
можно по пунктам как вы хотите что бы работало?

Если я правильно понял, в папку dic вы хотите добавить свои словари (rex, dic).
В Демагоге открыть текст, в котором предварительно уже проставили все ударения заглавными буквами (как для Максима).
И теперь нужно, что бы к открытому тексту в Демагоге, Запустить всего один скрипт, который обработал текст вашими подключичными словарями и начал его отправлять на Яндекс и получать mp3?

Скрипты для Demagog

Добавлено: 14 апр 2019 21:30
wasyaka
tonio_k писал(а):
14 апр 2019 20:01
И теперь нужно, что бы к открытому тексту в Демагоге, Запустить всего один скрипт, который обработал текст вашими подключичными словарями и начал его отправлять на Яндекс и получать mp3?
В точку.
После первичной обработки текста словарями добиваю раставляю омографы вручную в Homograph, а после одним действом, если исключить Homograph, то получится - всавил текст -
включил скрипт - получил запись...

Скрипты для Demagog

Добавлено: 14 апр 2019 23:05
tonio_k
Пока готовил скрипт под вашу просьбу, всплыла проблема Version 7.29.370 при работе скрипта со словарями. flegont я проблему описал. Скрипт уже готов. Как проблема решится - сразу скину сборку с комментариями для редактирования

Скрипты для Demagog

Добавлено: 15 апр 2019 00:13
flegont
Завтра буду разбираться с 370-й, сравню по архиву версий :thinking:
UPDATE: исправил, версия обновлена до 371

Скрипты для Demagog

Добавлено: 15 апр 2019 00:36
tonio_k
wasyaka писал(а):
14 апр 2019 21:30
- всавил текст -
включил скрипт - получил запись...
Решил не дожидаться исправления и сделал сборку на основе предыдущей версии 7.29.369
черновик

Инструкция:
1) Кроме файла СПИСОК СЛОВАРЕЙ.lua содержимое папки \Demagog-Yandex\dic - можно удалить
2) Помещаем свои словари в папку \Demagog-Yandex\dic\
3) Открываем через блокнот (удобнее через Notepad++) \СПИСОК СЛОВАРЕЙ.lua
4) Редактируем только строки начинающиеся с

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

WFilter(0,0,dic..
путем удаления ненужных строк и вставки наименование файлов своих словарей.
Строки можно сортировать в той последовательности, в которой нужно что бы словари сработали.

Что бы не путаться, можно везде поставить выбор алгоритма применения словаря:

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

false)  --перебором (галочка убрана)
если словарь rex, то false) или true) можно поставить любой - ошибкой не будет

После редактирования СПИСОК СЛОВАРЕЙ.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 в папке которую ранее выбирали :wink:

В случае сбоя и расхождения в файлах от Яндекса:
6) открываем в любом окне Демагога файл \Demagog-Yandex\temp\0.txt
7) Ctrl+F2 - запускаем YaTTS.lua

Скрипты для Demagog

Добавлено: 15 апр 2019 16:24
balaamster
tonio_k писал(а):
14 апр 2019 16:24
Пожелание, а есть возможность добавить что-то вроде показателя прогресса?
Добавил прогрессбар

Обновлённая инструкция.
► Показать
Demagog+YandexTTS.zip
(6.32 КБ) 707 скачиваний

Скрипты для Demagog

Добавлено: 16 апр 2019 19:17
tonio_k
В lua есть возможность вызвать скрипт в параллельном потоке?
Т.е. идет выполнение скрипта 1.
В скрипте 1 вызывается скрипт 2.
При этом, скрипт 1 работает дальше, а скрипт 2 в это время начинает делать свою задачу.

Скрипты для Demagog

Добавлено: 16 апр 2019 21:09
flegont
Конкретно так - нельзя.
Но в Lua есть понятие "сопрограммы" - coroutine.
Скрипт, в процессе своей работы может создать нужное количество сопрограмм. Каждая сопрограмма может находится в состоянии: выполняется, приостановлена, мертва.
Т.о. скрипт может работать в (псевдо) многозадачном режиме.

Но сопрограммы действуют только внутри виртуальной Lua-машины, и никак не связаны с потоками в операционной системе.
Подробно в этом я пока не разбирался. Надо будет учебник Р. Иерусалимского почитать, и в справочном руководстве Lua 5.3 пошарить. И поискать примеры скриптов с сопрограммами :pardon:

Скрипты для Demagog

Добавлено: 16 апр 2019 21:25
balaamster
flegont писал(а):
16 апр 2019 21:09
Но в Lua есть понятие "сопрограммы" - coroutine.
Это интересная часть 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')
Все три скрипта запустятся практически мгновенно друг за другом, так как start без ключа /wait запускает новый процесс и сам завершает работу.
Но, при таком исполнении, надо будет писать функцию, которая будет по какому-то критерию отслеживать завершение работы этих запущенных параллельно скриптов, если в дальнейшем понадобятся данные, произведённые этими скриптами (чтобы быть уверенным, что скрипт вернул все нужные данные или наоборот завершился с ошибкой).

P.S. lua-скрипт, из третьей строки, запустится в "чистом" lua. Ему будут недоступны внутренние функции из Demagog.

Скрипты для Demagog

Добавлено: 17 апр 2019 14:59
tonio_k
os.execute('start "program1" D:\scripts\lua53.exe "D:\script 3.lua" parameter1 parameterN')
я так понимаю это будет чисто в рамках lua без функций типа RexRepl от demagog?


Отправлено спустя 21 минуту 54 секунды:
Графическая библиотека Demagog дает возможность получать результаты работы скрипта в наглядной форме, в виде графиков и диаграмм. Для подключения в начале скрипта необходимо указать: require "profiles/grafica"

Вопрос, это одноразовое что то типа ShowMessage только выводит график один раз? или параллельная - может менять отображение графика по мере работы основного скрипта? Это я закидываю удочки на счет альтернативного статус бара в виде необычной круговой диаграммы например.

Скрипты для Demagog

Добавлено: 17 апр 2019 15:48
flegont
Graphics demo.lua запустите. Там, по ходу работы скрипта, последовательно меняются изображения, а в конце, перед завершением работы, демонстрируется простенькая анимашка - обратный отсчет.
Так что мысли про графический статусбар и меня посещали.
Надо бы время выбрать, поэкспериментировать...

Скрипты для Demagog

Добавлено: 18 апр 2019 10:15
flegont
Простой графический индикатор

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

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()

Скрипты для Demagog

Добавлено: 18 апр 2019 10:58
flegont
Простой графический индикатор 2
Если в предыдущем примере заменить функцию 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

Скрипты для Demagog

Добавлено: 23 апр 2019 22:11
balaamster
Сегодня задался вопросом, почему никто не задал вопрос, о неработающем скрипте для Яндекс TTS.
Ведь по умолчанию выполнение powershell отключено в пользовательских ОС.

Обнаружил интересную особенность. При политиках по умолчанию (запуск скриптов отключен):

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

 Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine      Restricted
Создаём в lib файл test.ps1, с содержимым:

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

get-executionpolicy -List | format-list
pause
Запускаем из окна Demagog по F2:
os.execute('powershell -file '..HomeFolder('lib')..'test.ps1')
Получаем (запуск скриптов включен, подпись не проверяется)

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

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine          Bypass
Получается в библиотеке Lua учтена эта особенность политики по умолчанию и внесена правка?

Скрипты для Demagog

Добавлено: 23 апр 2019 22:20
tonio_k
На сколько мне известно, powershell запущенный из под cmd не требует включения политик для самого powershell. А os.execute, как я понял, это что то вроде аналога cmd. Может в этом дело?

Скрипты для Demagog

Добавлено: 10 май 2019 21:41
balaamster
balaamster писал(а):
15 апр 2019 16:24
Demagog+YandexTTS
Обновил скрипты.
  • конфигуратор запроса к TTS-сервису выполнен в виде hta-файла
  • добавлена глобальная переменная clean_start, значение true - очистить папку со временными файлами, перед началом обработки. false (по умолчанию) - папка не очищается.
  • озвучка выделенного фрагмента перенесена в консоль PowerShell.
Способ работы со скриптами.
► Показать
Demagog+YandexTTS.zip
(28.04 КБ) 777 скачиваний

Скрипты для Demagog

Добавлено: 10 май 2019 22:22
flegont
Обновлена соответствующая ссылка на сайте Demagog.

Скрипты для Demagog

Добавлено: 19 май 2019 14:35
zhukov23
Обновил скрипты.
конфигуратор запроса к TTS-сервису выполнен в виде hta-файла
добавлена глобальная переменная clean_start, значение true - очистить папку со временными файлами, перед началом обработки. false (по умолчанию) - папка не очищается.
озвучка выделенного фрагмента перенесена в консоль PowerShell.
Способ работы со скриптами.
Не знаю, конечно, кто может в этом разобраться. Ни одной нормальной инструкции. Откуда взять ключ разработчика? https://cloud.yandex.ru/docs/iam/operat ... key/create здесь я получил ключ, но он вот такого формата:
api_key:
id: ajeke74kbp5bfq7m6ka2
service_account_id: ajepg0mjt06siuj65usm
created_at: "2019-04-09T08:41:27Z"
secret: AQVN1HHJReSrfo9jU3aopsXrJyfq_UHsssT5ICtm

А что вставлять в YATtsConfigurator? Там ключ другого формата.

Скрипты для Demagog

Добавлено: 19 май 2019 19:23
balaamster
zhukov23 писал(а):
19 май 2019 14:35
Откуда
Текущий формат ключа, выдаваемого Яндексом, подходит только для новой версии сервиса, в котором запрос на озвучку идёт через метод POST.

У меня в скриптах идёт обращение к старой версии сервиса, где запрос через GET и ключ другого формата.

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

Скрипты для Demagog

Добавлено: 31 май 2019 11:16
flegont
Внес маленькое дополнение.
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)

Скрипты для Demagog

Добавлено: 31 май 2019 11:58
tonio_k
Сразу пришла идея применения этой функции в качестве приостановки выполнения скрипта для для просмотра "текущего промежуточного" результата вычислений:

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

a=a+1
if Cancel() then ShowMessage(a) end

Скрипты для Demagog

Добавлено: 31 май 2019 12:04
tonio_k
flegont писал(а):
31 май 2019 11:16
Возвращает true если была нажата глобальная клавиша прерывания длительных процессов (Break по умолчанию).
Само событие присвоения true происходит на каком этапе?
1) Запустил Демагог - начинается мониторинг клавиши Break
2) Запустил Скрипт - начинается мониторинг клавиши Break

Два раза нажал клавишу Break, true меняется на false?

Скрипты для Demagog

Добавлено: 31 май 2019 12:23
tonio_k
Еще момент:
flegont писал(а):
31 май 2019 11:16
v. 7.29.373 (сборка от 31.05.2019)
в архиве присутствует файл $.cfg - он перезапишет "текущие пользовательские настройки" если не глядя перезаписать поверх старого Демагога

Скрипты для Demagog

Добавлено: 31 май 2019 12:32
flegont
Дистрибутив почистил от cfg, перезалил.
Ожидание нажатия Break начинается с момента запуска скрипта. Пока Break не нажата, флаг события = false. Как только Break нажата - то всё, труба пропела, любые дальнейшие вызовы Cancel() вернут true.


Отправлено спустя 6 минут 11 секунд:
Поэтому, единственное назначение функции Cancel() - воспринять сигнал об окончании работы скрипта. "Мюрат пошел в обход - нас хочет окружить! Фельдмаршал приказал нам отступить." (с)

Скрипты для Demagog

Добавлено: 31 май 2019 12:44
tonio_k
tonio_k писал(а):
31 май 2019 12:23
любые дальнейшие вызовы Cancel() вернут true.
а какой командой можно "обнулить" значение Cancel() ?

Скрипты для Demagog

Добавлено: 31 май 2019 12:47
flegont
Пока никакой, но я думал над этим. Добавить еще одну функцию - установку флага ожидания нажатия клавиши Break.
Показалось излишним, но если очень надо, то сделаю.

Скрипты для Demagog

Добавлено: 31 май 2019 13:00
tonio_k
flegont писал(а):
31 май 2019 12:47
но если очень надо, то сделаю.
не то что бы прямо очень надо :scratch:. Еще не начал ее применять из за отсутствия острой необходимости в этой функции для себя лично. Смутила заложенная в неё "одноразовость"

Скрипты для Demagog

Добавлено: 31 май 2019 13:14
flegont
Вообще-то, меня тоже... Так что, сейчас будет еще одно дополнение :smile1:
Отправлено спустя 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::
Если в этом примере закомментировать ForgotCancel(), то 2-й длительный процесс выполняться не будет - скрипт завершится сразу.

Скрипты для Demagog

Добавлено: 01 июн 2019 23:08
tonio_k
flegont писал(а):
18 апр 2019 10:58
Простой графический индикатор 2
► Показать
Это поле можно редактировать (указать свой вариант)?

Скрипты для Demagog

Добавлено: 02 июн 2019 09:21
flegont
Пока нет. Но идея мне нравится. Подумаю, что можно сделать.

Скрипты для Demagog

Добавлено: 02 июн 2019 15:01
flegont
v. 7.29.373 (сборка от 02.06.2019)

Headline(name) - функция встроенного интерпретатора; изменяет заголовок окна Инфографики, (по умолчанию: 'Инфографика').

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

require "profiles/grafica"

Clear()
Show()

Headline('У попа')
Delay(2000)
Headline('была собака')
Delay(2000)
Headline('') -- нет заголовка
Delay(2000)
Headline() -- заголовок по умолчанию

Скрипты для Demagog

Добавлено: 13 июн 2019 15:28
wasyaka
balaamster писал(а):
15 апр 2019 16:24
Если в процессе скачивания возникнут ошибки - сетевой сбой, ошибка работы моего скрипта, то
в конце работы скрипта появится сообщение, о несоответствии количества текстовых файлов сериала и полученных mp3-файлов, в проводнике откроется каталог, в котором находятся временные txt-файлы сериала, полученные mp3-файлы (подкаталог "audio") и лог-файл (подкаталог "log")
Процесс скачивания можно будет продолжить, заново запустив скрипт на вкладке с книгой и ответив на запрос "ДА - продолжить преобразование с последнего необработанного файла"
2019-06-13_150720.png
2019-06-13_150720.png (9.76 КБ) 53098 просмотров
Запустил, ещё раз запустил и пошёл в Play_A
Там тоже не все, но имеющие сформировал, и от сбойного записал по новой через скрипт и добавил к записаным в Play_A.
Нельзя ли реализовать такой сценарий в скипте? (слишком часто стали возникать такие проблемы, пробывал начать не с проблемного файла а немного раньше - без проблем, ошибка не понятна, всегда на новом предложении)

Скрипты для Demagog

Добавлено: 13 июн 2019 21:35
balaamster
wasyaka писал(а):
13 июн 2019 15:28
Нельзя ли реализовать такой сценарий в скипте?
Как я понимаю, нужно сделать так, чтобы скрипт запускался заново, если в результате первого прохода получены не все аудио-файлы?
Если так, то это можно реализовать. Но, думаю, количество автоматических повторных запусков стоит ограничить до 5-10, а то можно и в бесконечный цикл уйти, при проблемах с сетью, недоступности сервиса со стороны Яндекса и т.д.

Скрипты для Demagog

Добавлено: 13 июн 2019 23:44
wasyaka
balaamster писал(а):
13 июн 2019 21:35
Как я понимаю, нужно сделать так, чтобы скрипт запускался заново, если в результате первого прохода получены не все аудио-файлы?
Если в логах сбойный файл не в числе нескольких последних - то повторный запуск - ОК
Если 1 2 3 последних то тупик - надо этот текст из проблемных удалить из текста,вставить в другое окно и записать по отдельности... в Play_A это ре5шается автоматом, в остатке только дозаписать.
Но если сложно, не ломайте голову, :thank: это можно обойти другим путём :thank:

Скрипты для Demagog

Добавлено: 27 июн 2019 11:54
tonio_k
flegont, применил инфографику в таком виде:

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

	Show() -- Открываем окно графика
	Clear() -- очищаем окно с старыми событиями
	Headline('Прогресс выполнения')
	local schetchik = 1	
--Начало цикла
TextOut(-3,3,"Обработка сериала "..schetchik.." из "..#a.." ("..math.floor(100*schetchik/#a).."%)",2)
Render()
schetchik = schetchik + 1
--Конец цикла
Получается примерно такая инфографика:
► Показать
Вопрос, а можно ли вот эти самые (3%) проценты вывести в отдельную строку?
Пробовал применить /r - не прокатило :no:

т.е. что бы одновременно выводил в окно инфографики сразу два:
TextOut
TextOut

Еще вопрос, а есть возможность задать размер окна инфографики?

Скрипты для Demagog

Добавлено: 27 июн 2019 13:41
flegont
1) TextOut не поддерживает перенос строки '\r'
Можно так:

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

	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
--Конец цикла
Замечание. Во втором TextOut координата Y=-10 взята мною наугад - подбирать надо от размера шрифта, чтобы не произошло наложение на первую строку.

2) Фишку с программным заданием координат и размеров окна Инфографики я, в свое время, опробовал, и пока от нее отказался. Ибо результаты меня не удовлетворили.

Скрипты для Demagog

Добавлено: 28 июн 2019 20:21
tonio_k
Лично я каждую книгу отдельно просматриваю и редактирую прежде чем пустить её на обработку словарями. Если книги из одной серии, то удобнее открыть параллельно сразу несколько книг в окнах Демагога, внести изменения (удалить аннотацию, проверить корректность вставки примечаний, применить литературный текст и т.д.). Затем сохранить каждую книгу в отдельности. Затем через скрипт склеить все книги в одну.

Что бы оптимизировать процесс и уменьшить ручные действия, сделал скрипт, который склеивает содержимое всех окон Демагога последовательно согласно нумерации окон в одну книгу помещая результат в окно Статистики. Склеивание прекращается, как только скрипт встретит пустое окно. Поэтому надо следить что бы при загрузке книги в окно не было пустых окон между окнами с книгами.

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

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

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 - Статистика"')

Скрипты для Demagog

Добавлено: 29 июн 2019 22:18
regacaty
Читаю ветку и понимаю - чтобы воспользоваться этой программой, нужно быть программистом)

Вопрос по Яндекс ттс:
1. Ключ? У меня есть ключ (я так понял, что пробный) - насколько его хватает, где узнать о лимитах?
2. Есть-ли нормальное решение подготовки текста? Что не инструкция, то целый квест - откройте Balabolka, потом KooBAudio, а еще Homograph, вот потом уже усаживайтесь поудобнее и разберитесть с Demagog и ее скриптами)

Скрипты для Demagog

Добавлено: 30 июн 2019 02:22
tonio_k
С какой программы и голосового модуля лучше начать?
regacaty писал(а):
29 июн 2019 22:18
Есть-ли нормальное решение подготовки текста?
Самое простое: готовая сборка Демагога, где все необходимые скрипты уже включены в сборку. Пара щелчков мыши - и запись началась. В архиве есть дополнительная инструкция. Сборка периодически обновляется.

Скрипты для Demagog

Добавлено: 30 июн 2019 02:31
tonio_k
Есть идея, как можно дополнительно ускорить обработку текста словарями.
В наличии есть большой словарь замен чисел. Это довольно громоздкий словарь 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)
Вопрос к програмистам lua, как прописать это самое:
[[ЗДЕСЬ ПРОВЕРКА на наличии в переменной ttb символов [IVXMDLC\d]+ ]]

Скрипты для Demagog

Добавлено: 30 июн 2019 09:06
flegont
Идея хорошая, но...
Боюсь, что проверка текста средствами Lua на присутствие в нем символов IVXMDLC\d будет работать так же долго, как аналогичная проверка оного регулярными выражениями :suspect:

Скрипты для Demagog

Добавлено: 30 июн 2019 09:43
flegont
А может, я неправ в своих сомнениях. Надо тестировать на скорость.

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

-- возвращает 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 не найдены, то сообщение будет пустым

Скрипты для Demagog

Добавлено: 30 июн 2019 11:17
tonio_k
flegont писал(а):
30 июн 2019 09:43
Надо тестировать на скорость.

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

ttb = WText(1)
if string.match(ttb,"[IVXMDLC%d]+") then 
    WFilter(1,1,dic..'10_REX_числа.rex',true)
end
Сама функция отрабатывает моментально :up: даже на большом по размеру тексте. -
Если в тексте нет чисел, то словарь не применяется. Выигрыш во времени есть.

Скрипты для Demagog

Добавлено: 30 июн 2019 12:47
flegont
Ура, однако :big_smile: :champagne:

Скрипты для Demagog

Добавлено: 30 июн 2019 14:05
wasyaka
regacaty писал(а):
29 июн 2019 22:18
Читаю ветку и понимаю - чтобы воспользоваться этой программой, нужно быть программистом)

Вопрос по Яндекс ттс:
Вы заблудились...
В трёх соснах темах.
На ВСЕ ваши вопросы есть ответы на форуме - прочитать лень?
Слишком много вопросов...
Ну и мне лениво... сенокос :pale:

Скрипты для Demagog

Добавлено: 30 июн 2019 14:13
wasyaka
tonio_k писал(а):
30 июн 2019 11:17
Выигрыш во времени есть
А в чём разница обработки текста по времени 1 час, в прослушке который 15 часов, перед обработкой его-же в 30минут?
Раньше чем прослушанный предедущий его ж слушать не начнёш... :suspect:

Скрипты для Demagog

Добавлено: 30 июн 2019 14:34
tonio_k
wasyaka писал(а):
30 июн 2019 14:13
А в чём разница обработки текста по времени 1 час, в прослушке который 15 часов,
это дискуссионный вопрос. Моя мотивация поиска в приросте скорости обработки словарями в том, что словари имеют тенденцию увеличиваться. Общая скорость подготовки книги, соответственно, падает. Мощности ПК растут, но покупать новый не хочется. Если есть возможность подготовить книгу быстрее программным путем, то почему бы не копать в этом направлении?
Между Демагогом и Балаболкой штатно - разницы в производительности почти нет. Но вот за счёт скриптов можно найти интересные лазейки, которые дают преимущество в скорости обработки словарями. В этом преимущество Демагога и поэтому я отдаю ему предпочтение.
Ещё мотивация, я в mp3 аудиокнигу не записываю,а подготавливаю текст для открытия его на смартфоне. Максим, установленный на смартфоне, читает этот подготовленный текст вслух. Запись в mp3 занимает львиную долю общего времени создания аудио книги. Теперь, исключив этот пункт, любой прирост скорости обработки словарями будет явно ощущается.

Скрипты для Demagog

Добавлено: 30 июн 2019 16:13
tonio_k
Предварительные замеры:
В книге числа представлены только в нумерации глав.
10:29 - одна книга без проверки на наличие чисел(словарь с числами применялся постоянно)
08:05 - одна книга с проверкой на наличие чисел (словарь срабатывал только если в тексте присутствовали числа)
Там образом на вскидку прирост в общей скорости обработки словарями + 20%