[ ]
  • Страница 2 из 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 - для офлайн просмотра и поиска по всем страницам
 
wasyakaДата: Воскресенье, 02.01.2022, 19:07 | Сообщение #16
Группа: Модераторы
Сообщений: 35
Статус: Offline
Цитата wasyaka ()
А одним кликом?
решил:
 PSPad editor  - в два клика но в одном окне
 
tonio_kДата: Понедельник, 21.02.2022, 02:24 | Сообщение #17
Группа: Пользователи
Сообщений: 139
Статус: Offline
На основе функции table.unique(a) - "сортировать таблицу без дубликатов"
сделал вариант функции  table.duplicates(a) "сортировать таблицу только дубликаты"  - добавил одну строчку

Пример работы функции в окне Демагога:

Код
--Функция сортировать таблицу только дубликаты
function table.duplicates(a)
    local q, t = {}, {}
    for  i = 1, #a do
        if not q[a[i]] then
             q[a] = true
        else
             t[#t+1] = a
        end
    end
    return t
end

--Пример применения функции:
s = {
'саша',
'мама',
'мама',
'дядя',
'папа',
'папа',
'папа',
'куку',
'куку',
'куку',
'куку',
}
s = table.duplicates(s)-- сортировка вывести только дубликаты
s = table.concat(s, '\r')--в текст   
print(s)[/i]

Если можно, то добавьте эту функцию в калькулятор (поправьте где нужно)


Сообщение отредактировал tonio_k - Понедельник, 21.02.2022, 02:28
 
flegontДата: Понедельник, 21.02.2022, 10:27 | Сообщение #18
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Интересная идея. Но эта функция "съедает" первый дубликат из каждого найденного. Надо подумать, можно ли как-то это поправить
 
tonio_kДата: Понедельник, 21.02.2022, 10:31 | Сообщение #19
Группа: Пользователи
Сообщений: 139
Статус: Offline
Я всегда думал, что сортировка "только дубликаты" так и работает: оригиналы удаляются, и только дубли остаются.
 
flegontДата: Понедельник, 21.02.2022, 10:47 | Сообщение #20
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Хм.... действительно  surprised  Ну, тогда функция уже готова - я в ней чисто редакционные правки сделал. Можно в следующей версии включить ее.
 
tonio_kДата: Понедельник, 21.02.2022, 10:53 | Сообщение #21
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитата tonio_k ()
Надо подумать, можно ли как-то это поправить


Вот такой вариант:
Код
function table.duplicates(a)
    local q, t, d = {}, {}, {}
        for  i0 = 1, #a do
            if not q[a[i0]] then
                 q[a[i0]] = true
         else
            if not d[a[i0]] then
               d[a[i0]] = true
               t[#t+1] = a[i0]
               t[#t+1] = a[i0]
            else               
               t[#t+1] = a[i0]
            end 
            end
    end
    return t
end
 
flegontДата: Понедельник, 21.02.2022, 11:06 | Сообщение #22
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Понятно, но, думаю, первый вариант (как вы уже объяснили) логичнее. Я проверил, в Демагоге "Правка - Текст - Сортировка - Только дубликаты" так и работает - удаляя оригинал и оставляя только повторяющиеся элементы
 
tonio_kДата: Понедельник, 21.02.2022, 11:19 | Сообщение #23
Группа: Пользователи
Сообщений: 139
Статус: Offline
Хорошо что вы обратили внимание на факт удаления оригинальных строк.
При работе с большим корпусом слов, в некоторых случаях, требуется сделать подсчет строк. При этом, уникальные строки занимают львиную долю в корпусе. И вот тут удаление уникальных строк при помощи функции "сортировка только дубликаты" и пригодится. Но если эта функция, в том числе, будет удалять оригинальные строки, то это даёт [-1] к каждому результату подсчёта, что не радует. Поэтому, может функцию "только дубликаты" сделать "модальной": по умолчанию оставляет только дубликаты, а если true, то оставляет только дубликаты + оригинальные строки
 
flegontДата: Понедельник, 21.02.2022, 11:29 | Сообщение #24
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Да, можно и так.
 
tonio_kДата: Вторник, 01.03.2022, 00:10 | Сообщение #25
Группа: Пользователи
Сообщений: 139
Статус: Offline
Нужна помощь. При работе с помощью скрипта с файлами из разных источников, столкнулся с проблемой, когда в имени файла присутствует символ UTF8, которого нет в ANSI. В результате, когда через функцию f=OpenDialog(true) получаю список файлов, то символы utf8 заменяется на "?". Теперь получается у меня список с путями на не существующие файлы. Поэтому вопрос, может подскажете, что с этой проблемой можно сделать? Было бы здорово сделать скрипт, который будет уметь пакетно переименовать файлы так, что бы вместо UTF8 символов подставлялся другой символ '\149'.
 
flegontДата: Вторник, 01.03.2022, 09:48 | Сообщение #26
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Да, есть такая проблема umnik Подумаю, что можно сделать
 
flegontДата: Пятница, 04.03.2022, 10:51 | Сообщение #27
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
ОТЧЕТ О ПРОИСХОДЯЩЕМ  wink

1) Юникодные символы в именах файлов при преобразовании их в кодировку ANSI могут превратиться не только в знак вопроса. Знак ? появляется, если юникодному символу не находится никакого соответствия в АNSI. В остальных случаях может произойти всё, что угодно.
Знак "сердечко" становится вертикальной линией.
Латинская буква с надстрочным знаком - просто теряет надстрочный знак.
И т.д. и т.п.
В итоге получаются имена файлов, не соответствующие реальным, и непонятно, какие символы (см. выше) изменились, но остались латинскими.
Т.о. вариант с переименованием становится довольно сложным.

Получаем список имен файлов.
Предполагаем, что имена - искажены.
В каждом таком имени ищем символы с кодами > 127 и заменяем каждый такой символ на что-нибудь приличное, например, на знак подчеркивания. Проверяем, нет ли уже в списке произведенных замен такого имени. Если есть, то добавляем еще один знак подчеркивания.

Кроме того, среди символов с кодами > 127 надо различать символы, коды которых соответствуют русским буквам - чтобы оставлять их как они есть.

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

2) Есть другой путь. Можно в функциях WName() и AllFiles() добавить параметр utf8, по умолчанию false. Если он true, то имя файла возвращается, как строка utf8 без BOM. Такое имя нельзя будет адекватно напечатать в окно 0 командой print() или показать функциями ShowMessage()  и StatusMessage(). И файл с таким именем не откроется штатными средствами Lua.
Потому что Windows должна получить его имя в кодировке не utf8, а в Unicode.
Впрочем, это всё - разрешимые проблемы.
Например, функция WOpen(i, fname, utf8) с дополнительным параметром utf8, смогла бы открыть такой файл.
Аналогично можно было бы усовершенствовать print(), ShowMessage()  и StatusMessage().

Тут надо экспериментировать.
Будущее покажет.
 
tonio_kДата: Пятница, 04.03.2022, 11:34 | Сообщение #28
Группа: Пользователи
Сообщений: 139
Статус: Offline
Была мысль искать в сторону батника, powershell или скрипта питона(демагог, вроде, стал поддлерживать запуск скриптов питона) и уже на них возложить переименование. Но ваше направление п2) выглядит более правильным. Вопрос, можно ли при этом будет из полученого названия файла в utf8 отделить путь, имя, расширение для дальнейшей работы с ними в скрипте?
 
flegontДата: Пятница, 04.03.2022, 12:13 | Сообщение #29
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
По идее, да. Обратные слэши - разделители, в utf8-имени файла никуда не денутся. Так что всё должно работать.
 
flegontДата: Пятница, 04.03.2022, 12:27 | Сообщение #30
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
P.S. Подтверждаю: скрипты на python в Демагоге работают. Путем вызова их из скрипта на Lua  biggrin
Я вот думаю: не сделать ли так, чтобы Демагог выполнял их напрямую, минуя Lua?
Чтобы, если в меню "Выполнить скрипт" выбран файл с расширением .py или .pyw, то Демагог выполнил бы такой скрипт, обратившись к установленому на компьютере интерпретатору python.
Естественно, что в Настройках должен быть указан путь к интерпретатору python.
Если нет, то Демагог должен будет выдать меню поиска папки с интерпретатором.
 
MyTTS (форум) » Программы, использующие синтез речи в Windows » Demagog » Скрипты для Demagog
  • Страница 2 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск:

Общение