[ ]
  • Страница 3 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Модератор форума: flegont  
MyTTS (форум) » Программы, использующие синтез речи в Windows » Demagog » Скрипты для Demagog
Скрипты для Demagog
flegontДата: Среда, 21.07.2021, 17:05 | Сообщение #1
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Начало темы здесь (ссылка на архивную копию форума mytts.info)

 (6.6 Mb) архивная копия начала текущей ветки с форума mytts.info - для офлайн просмотра и поиска по всем страницам
 
tonio_kДата: Пятница, 04.03.2022, 12:34 | Сообщение #31
Группа: Пользователи
Сообщений: 139
Статус: Offline
Ну... Тогда будет иметь смысл все имеющиеся интерпретаторы подогнать под питон. Будет повод изучить язык и прелесть и его возможностей. Говорят, скрипт lua немного похоже на скрипты питон.
 
flegontДата: Пятница, 04.03.2022, 19:33 | Сообщение #32
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Python - громоздкий - занимает на компе ~ 30-35 мб. И медленный. Зато у него уйма сторонних библиотек, написанных на Си, оттого быстрых. Любую из них легко присоединить к уже установленному на компе python.
Например, библиотеку математических вычислений numpy. При включенном Интернете один раз ввести с консоли команду: pip install numpy.
Или библиотеку графики для создания удобного интерфейса в питон-скрипте, с кнопками, менюшками, окошками и т.п.: pip install wxPython
С каждым такой инсталляцией, размер папки с питоном на компе - растет. Эдакий получается комбайн, в соответствии с нуждами конкретного пользователя.

Возможность для Демагога выполнять питон-скрипты - это чтобы не изобретать свои велосипеды, а ездить на чужих  biggrin  Если на питоне решена какая-то важная задача, то нет смысла заново всё это переписывать на Lua (поправка: на самом деле, иногда есть).

Общие принципы - одинаковые с любым языком программирования высокого уровня.  К синтаксису легко привыкнуть. За одним исключением.
В остальном - язык годный, писать программы достаточно легко.
 
tonio_kДата: Понедельник, 28.03.2022, 10:31 | Сообщение #33
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитата wasyaka ()
Пошёл другим путём, получилось даже удобней

Возможно, вам покажется удобным скрипт по генерации правил DIC (я сам его активно использую для разовых операций)
В окно1 вставляем строки, которые будут в левой части правила
те же строки вставляем в окно2 - это будут строки правой части правил
В окне2 делаем нужные нам изменения (меняем регистр/применяем словари/делаем замены)
Далее запускаем скрипт:
Код
n1=WActive()
n2=n1+1
a = Input('УКАЖИТЕ НОМЕРА ДВУХ ОКОН ДЛЯ СКЛЕЙКИ В ПРАВИЛО',{'ЛЕВАЯ ЧАСТЬ ПРАВИЛА. ОКНО №'..'='..n1,'ПРАВАЯ ЧАСТЬ ПРАВИЛА. ОКНО №'..'='..n2};)
if a == nil then goto HALT end
a[1] = tonumber(a[1])
a[2] = tonumber(a[2])
w0=WText(a[1])
w1=WText(a[2])
w0= string.split(w0,'\r\n')
w1= string.split(w1,'\r\n')
for k=1, #w0 do w0[k]=w0[k]..'='..w1 [k]end
w0=table.concat(w0, '\r')
WNew(0,w0)
WActive(0)
::HALT::

Вводим номера окон и на выходе получаем готовый словарь DIC в котором левая часть правил берется из окна1, а правая - из окна2

Цитата wasyaka ()
@([А-Я]+)\=([А-я]+)?(Г)=$1\=$2гэ@([А-Я]+)\=([А-я]+)?(Д)=$1\=$2дэ
И т.д. и несколько раз (в случае повторений букв)

Если взять на вооружение скрипт, который я вам предлагаю, то для решения вашей задачи можно сделать словарь DIC

применить этот словарь к окну2 и получить в окне 0-Статистика готовый словарь.

Или можно воспользоваться готовым решением - скриптом по созданию правил DIC для АББРЕВИАТУР
Прикрепления: -___DIC.lua.zip (1.3 Kb)


Сообщение отредактировал tonio_k - Понедельник, 28.03.2022, 10:32
 
wasyakaДата: Вторник, 29.03.2022, 12:45 | Сообщение #34
Группа: Модераторы
Сообщений: 35
Статус: Offline
Цитата tonio_k ()
Возможно, вам покажется удобным скрипт по генерации правил DIC
Спасибо за совет, но...
Мне так комфортно... 


Из  списка #ПРЕДЛОЖЕНИЯ удаляются
(содержащие ё) ==> (\w+)?ё(\w+)?\s?\|\|(.+)=
($Ашхабад*=Ашхабъъад и т.д.) ==> @([а-яё]+)([А-ЯЁ]+)([а-яё]+)?\s?\|\|(.+)=
(на латинице) ==> ([A-Z]\w+)\s?\|\|(.+)=

Слова имеющие ц преобразуются (Пацаев=Патсаев)
(\w+)\=(\w+)?ци(\w+)?=$1\=$2тсы$3
(\w+)\=(\w+)?це(\w+)?=$1\=$2тсэ$3
(\w+)\=(\w+)?ц(\w+)?=$1\=$2тс$3

и абривиатура (ЦДКС=тсдэкаэс)
@([А-Я]+)\=([А-я]+)?(А)=$1\=$2а
@([А-Я]+)\=([А-я]+)?(Б)=$1\=$2бэ
@([А-Я]+)\=([А-я]+)?(В)=$1\=$2вэ


Сообщение отредактировал wasyaka - Вторник, 29.03.2022, 13:09
 
tonio_kДата: Пятница, 16.12.2022, 22:08 | Сообщение #35
Группа: Пользователи
Сообщений: 139
Статус: Offline
Для словарей *.rex, которые применяются в сборках от tonio_k и используют "ИНДЕКСНЫЙ МЕТОД"
Признаки такого словаря:

Скрипт сортирует правила по ключевым словам (с привязным к ним правилам). Последовательность правил в пределах ключевого слова не меняется.
Если будет обнаружен дубликат в ключевых словах, то сортировка прерывается с выводом дубликатов, пока не будет исправлена ситуация с дублированием ключевых слов.
В окне Демагога открываем словарь. Копируем его содержимое в соседнее окно и применяем скрипт.
Прикрепления: SLOVAR-SORTIROV.zip (1.0 Kb)


Сообщение отредактировал tonio_k - Пятница, 16.12.2022, 22:11
 
flegontДата: Понедельник, 06.02.2023, 22:08 | Сообщение #36
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Это из темы Picobook TTS Offline - Страница 9 - MyTTS (форум) (ucoz.net)
Касательно реализации Быстрого алгоритма словарных замен на python.
Да, сие работает, но подтверждено на практике мнение о медлительности питона. Как только дело дошло до обработки правил, содержащих более одного слова, а так же для режимов учета/не учета регистра при заменах, так сразу производительность просела на порядок. В общем, вот...

# Текст "Release-that-Witch_Освободите-эту-Ведьму.txt" измененный по "95.NEW_Орфоэпия(phoneme).dic (0:01:12)
ReleasethatWitch, освобод+Ите эту в+Едьму ф+Айл был сгенерирован про+Ектом ранобехаб орг.Не для комерческого исп+Ользования, Том 1глав+А 1. С сег+Одняшнего дня я насл+Едный принц.,Ченг Ян поч+Увствовал, что ктото зв+Ал его. в+Аше выс+Очество, прош+У, пр+Оснитесь… Он отверн+Улся, но голоса, кот+Орые он сл+Ышал, не исч+Езли. на с+Амом д+Еле они, наобор+От, ст+Али д+Аже гр+Омче. зат+Ем он поч+Увствовал, что ктото остор+Ожно д+Ёргает его за рук+Ав. в+Аше выс+Очество, мой насл+Едный пр+Инц! Ченг Ян р+Езко откр+Ыл глаза. хорош+О знак+Омая ему обстан+Овка исч+Езла, раб+Очего стола нигд+Е не б+Ыло, и прив+Ычные перегор+Одки, спл+Ошь ус+Еянные почт+Овыми адресами пропали.

Результат Демагога для этого объемистого теста: 0:00:18

В питон-скрипте удалось реализовать все фишки Быстрого алгоритма, включая отдельно стоЯщие звездочки. Типа все * *ло=всё ло
А так же спецсимвол $ учета регистра: $СССР=Советский Союз
Тестировалось также на сумасшедшем словаре Michelangelo.dic, результат замен полностью совпал с выданным Демагогом. Кроме цифр времени выполнения wink

1. D:\0 - Unicode\Demagog-U64\~proba-obrazec~.txt2. D:\0 - Unicode\Demagog-U64\~proba1~.txt
~ 100%      ≠ 3      = 1402014      0:00:00
# Текст "Benedict_Lee_1_Thunderstorm_over_the_World.txt" измененный по "Michelangelo.dic" (0:00:18)¶Мир – та<к называют потомки землян ставшую их новой ро<диной планету и её единственный, раскинувшийся от полюса< до полюса< материк, к кат<о<рому кр
# Текст "Benedict_Lee_1_Thunderstorm_over_the_World.txt" измененный по "Michelangelo.dic" (0:01:03)¶Мир – та<к называют потомки землян ставшую их новой ро<диной планету и её единственный, раскинувшийся от полюса< до полюса< материк, к кат<о<рому кр

Интересно совпало: объемистый тест на 2.9 млн простых правил, в основном слово=замена, с небольшим включением правил для словосочетаний; и словарь Michelangelo.dic на 37 тыс. диковинных правил, половина из которых - правила со звездочками. Время выполнения - обоих тестов практически одинаковое, только Демагог выигрывает в скорости больше, чем в 3 раза.

P.S. Что-то ни спойлеры не работают, ни картинки не вставляются... Ну да бог с ними...
 
tonio_kДата: Вторник, 28.11.2023, 17:06 | Сообщение #37
Группа: Пользователи
Сообщений: 139
Статус: Offline
Подскажите, а Демагог (64 бит) "из коробки" умеет через скрипт для питона посчитать хеш сумму файла?
Вот такой черновик в интернете нашёл:
Код
import hashlib
def get_hash_md5(filename):
    with open(filename, 'rb') as f:
        m = hashlib.md5()
        while True:
            data = f.read(8192)
            if not data:
                break
            m.update(data)
        return m.hexdigest()

Взял отсюда: https://badeud.ru/post/2/
Если Демагог умеет, то можно сделать пример что бы можно было через диалог выбрать файлы и результат вывел в структуре как выводится в Тотал Командере в виде тестовых строк:

heshsum_md1*filename1
heshsum_md2*filename2

(Хешсумма, разделитель звёздочка, имя файла)

с сохранением результата в файл


Сообщение отредактировал tonio_k - Вторник, 28.11.2023, 17:06
 
flegontДата: Вторник, 28.11.2023, 19:21 | Сообщение #38
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
По этому поводу у меня 2 новости: хорошая и плохая.

Хорошая новость: библиотека hashlib - стандартная и входит в базовый питон, т.е. из коробки работает. Пример:

import hashlib

hash_object = hashlib.md5(b'Hello World')
print(hash_object.hexdigest())

Результат в окне Статистики: b10a8db164e0754105b7a99be72e3fe5

Плохая новость: приведенная вами программа get_hash_md5, по-видимому, неверна. На любом файле выдает одну и ту же ошибку. Например:

fn = 'd:\0 - Unicode\Demagog-A64\ЖИЗНЬ.txt'
x = get_hash_md5(fn)
print(fn,x)

Результат в окне Статистики:

Traceback (most recent call last):
File "<string>", line 15, in <module>
File "<string>", line 3, in get_hash_md5
ValueError: embedded null character
 
flegontДата: Вторник, 28.11.2023, 19:34 | Сообщение #39
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Вот еще работающий пример, потребует ввести любую строку и выдаст ее хеш

import hashlib

mystring = input('Enter String to hash: ')

# Предположительно по умолчанию UTF-8
hash_object = hashlib.md5(mystring.encode())
print(hash_object.hexdigest())
 
flegontДата: Вторник, 28.11.2023, 19:45 | Сообщение #40
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
И вот еще работающий пример:

import hashlib

print(hashlib.md5("Какой-то текст".encode('utf-8')).hexdigest())


Результат: 667310e94eb5426757354853912213c7
 
tonio_kДата: Вторник, 28.11.2023, 19:48 | Сообщение #41
Группа: Пользователи
Сообщений: 139
Статус: Offline
А мне хотелось, что бы, например, можно было хеш получить у видео файла в 2Гб. Т.е. тут нужен не текстовый подход. Вот тут пример ещё нашёл. В самом конце статьи говорят, что код подходит для получения хеша у видео файла.
 
flegontДата: Вторник, 28.11.2023, 20:00 | Сообщение #42
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Вот где я ошибся с вашим примером - каждый раз забываю записывать обратный слэш на питоновский манер \\
С одинарным обратным слэшем имя файла воспринимается как ошибочная строка.

# hash-test
def get_hash_md5(filename):
with open(filename, 'rb') as f:
m = hashlib.md5()
while True:
data = f.read(8192)
if not data:
break
m.update(data)
return m.hexdigest()

# Test

fn = 'd:\\0 - Unicode\\Demagog-A64\\ЖИЗНЬ.txt'
x = get_hash_md5(fn)
print(fn,x)

Результат: d:\0 - Unicode\Demagog-A64\ЖИЗНЬ.txt 6b8ab3dc4547c886af62d1f8764e7218

Плохих новостей больше нет wink
 
flegontДата: Вторник, 28.11.2023, 20:40 | Сообщение #43
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Вот как бы решение:

import hashlib
from profiles.mygui import OpenDialog
from profiles.myfunc import StrSave

def get_hash_md5(filename):
    with open(filename, 'rb') as f:
        m = hashlib.md5()
        while True:
            data = f.read(8192)
            if not data:
                break
            m.update(data)
        return m.hexdigest()

# Test

a = OpenDialog(True)

s = ''
for i in range(len(a)):
    s += a+'*'+get_hash_md5(a)+'\r\n'

StrSave(s, 'd:\\Y\\Хеши.txt', 'utf-8')


На выходе, например, файл с таким содержимым:

D:\0 - Unicode\Demagog-A64\ЖИЗНЬ.txt*6b8ab3dc4547c886af62d1f8764e7218r
D:\0 - Unicode\Demagog-A64\Нахалка.txt*34af71ca0dfe76c0a3840d9cee41a8d2r
D:\0 - Unicode\Demagog-A64\ddebug.txt*4510a5ecd723a5f3350c1268e2cfb9der
D:\0 - Unicode\Demagog-A64\primery2.txt*979dc3f56a6969d83099679a92bc57a7r
D:\0 - Unicode\Demagog-A64\simplex.txt*3a97472d87e76725c0d084e3bed89dedr
 
flegontДата: Вторник, 28.11.2023, 21:10 | Сообщение #44
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
P.S. Форум, к сожалению, съедает всё, что в квадратных скобках.
В предпоследней строчке должно быть не просто s += a ...
s += а квар.скобку открыть i квадр.скобку закрыть ...

wink
 
tonio_kДата: Вторник, 28.11.2023, 21:16 | Сообщение #45
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитата flegont ()
в квадратных скобках.

А если попробовать в теги "код"
Код

s += a [i]
спрятать?
 
MyTTS (форум) » Программы, использующие синтез речи в Windows » Demagog » Скрипты для Demagog
  • Страница 3 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск:

Общение