Скрипты для Demagog
Модератор: flegont
- tonio_k
- V.I.P.
Скрипты для Demagog
Вопрос по функции WSel
Вставим ниже текст в окно Демагога и нажимаем F2
Если выделить текст ind то покажет k = 3
Вопрос, а как можно определить начальную позицию выделенного текста?
Если бы WSel показывал начальную позицию, то координаты текста я бы мог получить:
Вставим ниже текст в окно Демагога и нажимаем F2
Код: Выделить всё
ind=WActive()
k=WSel(ind)
ShowMessage(k)
Вопрос, а как можно определить начальную позицию выделенного текста?
Если бы WSel показывал начальную позицию, то координаты текста я бы мог получить:
Код: Выделить всё
ind=WActive()
k=WSel(ind)
fnd=WSelText(ind)
ShowMessage(k..', '..#fnd)
- flegont
- V.I.P.
Скрипты для Demagog
Мда... думаю, надо будет усовершенствовать функцию WSel(i), когда задан только параметр - номер окна. Чтобы, если в тексте есть выделенный фрагмент, то возвращалась бы начальная позиция выделенного (а не конечная, как сейчас), и возвращалась бы длина выделенного. Как-то так:
Тогда конечная позиция выделенного была бы:
Подумаю, как сделать.
Код: Выделить всё
k, len = WSel(ind)
Код: Выделить всё
z = k+len
- tonio_k
- V.I.P.
Скрипты для Demagog
Я тут ещё немного подумал, у нас же на руках есть длина текста #fnd и координата конца текста.
Можно от координаты конца выделеного текста вычесть его длину и прибавить 1 это и будет начальная координата выделенного текста
Надо только для удобства это в функцию превратить
k, len = WSel(ind), что бы k действительно был начальной позицией выделеного текста.
Можно от координаты конца выделеного текста вычесть его длину и прибавить 1 это и будет начальная координата выделенного текста
Код: Выделить всё
ind=WActive()
k=WSel(ind)
fnd=WSelText(ind)
start=k-#fnd+1
ShowMessage(start..', '..#fnd)
k, len = WSel(ind), что бы k действительно был начальной позицией выделеного текста.
- flegont
- V.I.P.
Скрипты для Demagog
Вер. 385, небольшое изменение в дистрибутиве.
Функция встроенного интерпретатора:
WSel(i , pos, len) - выделяет фрагмент текста во вкладке i с позиции pos длиной len (по умолчанию 0); и возвращает pos и len;
WSel(i, pos) устанавливает текстовый курсор в позицию pos, возвращая pos и 0;
WSel(i) просто возвращает текущую позицию курсора и длину выделенного (или 0),
(это и есть тот случай, когда возвращаемые значения реально могут понадобиться )
Пример:
Замечание: при поиске в тексте выделенного фрагмента к найденной координате его начала прибавляем 1, т.к. позиции текстового курсора на экране нумеруются с 0.
Функция встроенного интерпретатора:
WSel(i , pos, len) - выделяет фрагмент текста во вкладке i с позиции pos длиной len (по умолчанию 0); и возвращает pos и len;
WSel(i, pos) устанавливает текстовый курсор в позицию pos, возвращая pos и 0;
WSel(i) просто возвращает текущую позицию курсора и длину выделенного (или 0),
(это и есть тот случай, когда возвращаемые значения реально могут понадобиться )
Пример:
Код: Выделить всё
-- пусть текст во вкладке 1 имеет выделенный фрагмент
k, len = WSel(1)
s = WText(1)
c = string.sub(s,k+1,k+len)
ShowMessage(k..' '..len..' |'..c..'|') -- посмотрим на результат
- PETICANTROP
- Прохожий
Скрипты для Demagog
Добрый день не очень силен в работах скрипта, при попытке обработать произведение через скрипт "10_ОКНО ОБРАБОТАТЬ СЛОВАРЯМИ" выбирается небольшой фрагмент для обработки и на этом процесс зависает. Подскажите в чем может быть проблема.
- tonio_k
- V.I.P.
Скрипты для Demagog
PETICANTROP, в этой ветке обсуждают общие технические вопросы по скриптам. Автор Демагога не может ответить почему не работает та или иная "поделка" пользователя т.к. в её создании он не участвовал. Ваш вопрос касается пользовательской сборки. Задайте свой вопрос в той ветке где скачали сборку. При этом уточните, какой голос вы используете, меняли ли вы что нибудь в сборке. Какую версию сборки применяете. Зависает на всех книгах или только на конкретной одной. Нужно понять (локализовать) где проблема. Иначе на ваш неконкретный вопрос будет ответ: "а у нас работает".
- PETICANTROP
- Прохожий
Скрипты для Demagog
tonio_k, Благодарю за напутствие полез разбираться со сборками и понял что сам накрутил ерунды всякой. Скачал вашу сборку и все заработало. Спасибо вам за труды.
- flegont
- V.I.P.
Скрипты для Demagog
Пример использования функций встроенного интерпретатора: RuIPA, RuUPS.
(Demagog, вер. 386, сборка от 04.09.2020)
Скрипт для создания фонетического dic-словаря
Название любое, расширение .lua
Поместить в папку _Tests_
В активной вкладке должен находиться список русских слов - все буквы в нижнем регистре, а ударные гласные - в верхнем регистре.
Вызов скрипта - из меню по Ctrl+F2
Во вкладке "0 - Статистика" будет сформирован соответствующий dic-словарь - его можно сохранить под каким-либо именем и с расширением .dic
Пример.
Текст в активной вкладке:
Результаты (в зависимости от выбора пользователя):
(Demagog, вер. 386, сборка от 04.09.2020)
Скрипт для создания фонетического dic-словаря
Название любое, расширение .lua
Поместить в папку _Tests_
В активной вкладке должен находиться список русских слов - все буквы в нижнем регистре, а ударные гласные - в верхнем регистре.
Вызов скрипта - из меню по Ctrl+F2
Во вкладке "0 - Статистика" будет сформирован соответствующий dic-словарь - его можно сохранить под каким-либо именем и с расширением .dic
Код: Выделить всё
-- Создать фонетический dic-словарь в окне "0 - Статистика"
-- по списку слов с ударениями, находящемуся в активной вкладке.
-- Например:
-- вЫкатившиеся
-- двадцатИ
-- темнО
os.setlocale('', 'ctype') -- национальная кодовая страница
cap = 'Укажите тип транскрипции'
items = {
'Международный фонетический алфавит (IPA)',
'Microsoft Universal Phone Set (UPS)'
}
ans = Menu(cap,items)
if ans == 0 then goto HALT end
if ans == 1 then
-- шаблон тега Pronunciation Lexicon Specification
mask = '<phoneme ph="@"/>'
else
-- шаблон тега Microsoft SAPI5
mask = '<PRON SYM="@"/>'
end
ind = WActive() -- номер активной вкладки
bom = '\239\187\191' -- спецификация UTF-8
s = WText(ind)
a = string.split(s,'\r')
c = ''
for i = 1,#a do
if a[i] ~= '' then
if ans == 1 then d = RuIPA(a[i]) else d = RuUPS(a[i]) end
b = string.lower(a[i])
b = AnsiToUtf8(b)
c = c..b..'='..string.gsub(mask,'@',d)..'\r'
end
end
-- передадим новый utf8-текст во вкладку 0
-- через сохранение во временном файле
c = bom..c
SaveToFile({c},'_.tmp')
WOpen(-1,'_.tmp'); WNew(0); WAdd(0,-1,'\r\r')
os.remove('_.tmp')
WActive(0)
::HALT::
os.setlocale('C')
Текст в активной вкладке:
Код: Выделить всё
вЫкатившиеся
двадцатИ
темнО
Код: Выделить всё
выкатившиеся=<phoneme ph="vˈɨkətʲɪfʂᵻjəsʲə"/>
двадцати=<phoneme ph="dvətt͡sɐtʲˈi"/>
темно=<phoneme ph="tʲɪmnˈo"/>
Код: Выделить всё
выкатившиеся=<PRON SYM="V S1 IX K AX T pal IH F SR IX low J AX S pal AX"/>
двадцати=<PRON SYM="D V AX T TS AEX T pal S1 I"/>
темно=<PRON SYM="T pal IH M N S1 O"/>
- tonio_k
- V.I.P.
Скрипты для Demagog
есть в шпаргалке функция:
WordFrequency(s, gauger) - подсчитывает частоту слов в тексте s; возвращает таблицу строк вида: 'частота|слово'
В калькуляторе видно, что в этой функции присутствует цифровая сортировка.
А можно добавить в калькулятор отдельно функции:
-сортировка цифровая по убыванию
-сортировка цифровая по возрастанию
WordFrequency(s, gauger) - подсчитывает частоту слов в тексте s; возвращает таблицу строк вида: 'частота|слово'
В калькуляторе видно, что в этой функции присутствует цифровая сортировка.
А можно добавить в калькулятор отдельно функции:
-сортировка цифровая по убыванию
-сортировка цифровая по возрастанию
- flegont
- V.I.P.
Скрипты для Demagog
Вер. 386, сборка от 22.09.2020
[+] Функция встроенного интерпретатора table.sortdig(lines, mode) - сортирует таблицу строк lines, по их цифровому содержимому, по возрастанию, если mode = true и по убыванию, если mode = false или nil. Цифровое содержимое в строке ищется до первого символа табуляции (если он есть).
Пример использования:
Результат:
[+] Функция встроенного интерпретатора table.sortdig(lines, mode) - сортирует таблицу строк lines, по их цифровому содержимому, по возрастанию, если mode = true и по убыванию, если mode = false или nil. Цифровое содержимое в строке ищется до первого символа табуляции (если он есть).
Пример использования:
Код: Выделить всё
-- цифры могут быть в любом месте строки
-- но учитываются только до знака табуляции (если он есть)
-- здесь в строках нет знака табуляции
a = {
'абрикос123',
'корабль 7К-Л1',
'миг-17б',
'восток-1',
'агент 007'
}
a = table.sortdig(a,true) -- по возрастанию
s = table.concat(a,'\r')
print(s)
print()
-- здесь в строках присутствует знак табуляции
a = {
'17 миг',
'123 абрикос',
'1 восток',
'71 корабль',
'7 агент'
}
a = table.sortdig(a) -- по убыванию
s = table.concat(a,'\r')
print(s)
Код: Выделить всё
восток-1
агент 007
миг-17б
корабль 7К-Л1
абрикос123
123 абрикос
71 корабль
17 миг
7 агент
1 восток
- tonio_k
- V.I.P.
Скрипты для Demagog
Вставляем в окно 1 (код ниже) и нажимаем F2. Смотрим результат в окне 2 - крякобрязы.
Код: Выделить всё
-- Функция, консолидирующий статистику частотности строк из вкладки i в j
-- Каждая запись исходного списка в i имеет вид: ЧастотаРазделительСтрока
-- При этом строки справа от Разделитель могут дублироваться.
-- После обработки дубликаты будут удалены, частоты просуммированы
function FreqConsolidate(i, j, delim, tmpfile)
if delim == nil then delim = '|' end
if tmpfile == nil then tmpfile = 'tmp.txt' end
-- вспомогательные функции
local function DelUtf8BOM(s)
local bom = '\239\187\191'
if string.sub(s,1,3) == bom then s = string.sub(s,4,#s) end
return s
end
local function AddUtf8BOM(s)
return '\239\187\191'..s
end
-- основная процедура
os.setlocale('', 'ctype') -- для работы с национальной локалью
-- заботимся о сохранении юникодных символов
local o = {}
o.File_Encoding = feUTF8
Settings(o)
WSave(i,tmpfile)
local a = LoadFromFile(tmpfile)
a[1] = DelUtf8BOM(a[1])
-- консолидируем статистику
local c = {}
local b
for i = 1,#a do
b = string.split(a[i],delim)
if #b > 1 then
if c[b[2]] == nil then
c[b[2]] = tonumber(b[1])
else
c[b[2]] = c[b[2]]+tonumber(b[1])
end
end
end
local d = ''
for k, v in pairs(c) do
d = d..v..delim..k..'\r'
end
-- опять же, заботимся о юникоде
AddUtf8BOM(d)
SaveToFile({d},tmpfile)
-- готово!
WOpen(j,tmpfile)
if i ~= j then WNew(i) end
--os.setlocale('C') -- вернуть стандартную локаль
end
WNew(2,[[4 (\S| -)\s(\bчаса\b)(\.\.\.|\,)=$1 часА$3
80 [ ]+=
]])
FreqConsolidate(2, 2, "\9") -- подсчет статистики
Что интересно, если поменять строку:
Код: Выделить всё
WNew(2,[[4 (\S| -)\s(\bчаса\b)(\.\.\.|\,)=$1 часА$3
80 [ ]+=
]])
Код: Выделить всё
WNew(2,[[1 (\b(без|без [егоёих]{1,3}|вашего|вместо|возле|возле [егоёих]{1,3}|выше|выше [егоёих]{1,3}|два|для|для [егоёих]{1,3}|до|до [егоёих]{1,3}|ему|из|из [запод]{1,3}|какого то|какого тоъ|кроме|кроме [егоёих]{1,3}|мало|мне ни|моего|нет|нет у меня|ни|никому не|ну|оба|оба [егоёихэт]{1,3}|от|от [егоёих]{1,3}|после|против|против [егоёих]{1,3}|со|с [егоёих]{1,3}|своего|смысле|такого|твоего|три|у|у [егоёих]{1,3}|четыре|этого)\b\s?(\w+)?)\s{1,4}(\bслова\b)=$1 слОва
1 (авят|ает|аешь|азал|айте|аны|анял|ать|ашел|!ают|[м]ают|ая|[вмрч]ая|[вмрх]али|ашли|взял|вшим|даем|етны|ечал|зна[лю]|зови|иеся|ими|ируя|ись|ить|ймут|[вкмнч]ать|идал|кали|[вл]или|лены|[мн]ает|ньи|няли|[лн]ять|[рч]ала|руем|ших|ые|ющей|ющих|яют|[вджшщ]ние|гие|жие|кие|хие|чие|шие|щие)(\s*\w*\s*\w*\s*\w*\s*)\s+(места)\b=$1$2 местА
1 @(\w+)([,: -]*)\s+Том([аеуомыи]+)\b=$1$2 ЪЪтОм$3
1156 [ ]+=
1 \b(ей|на|под|ту же|эту)\b(\s*\w*\s*)\s+полку\b=$1$2 пОлку
1 \b(из|к|по)\b\s+(\bдому\b)=$1 дОму
1 ЪЪтОм(\w+)=тОм$1]])
- flegont
- V.I.P.
Скрипты для Demagog
Кракозябры будут всегда, просто иногда их не сразу видно в общей куче.
Причина - в совершенно нелепой опечатке: в функции FreqConsolidate в конце пропущено 2 символа (обозначены красным):
...
d = AddUtf8BOM(d)
SaveToFile({d},tmpfile)
...
И результирующий временный файл записывался в кодировке UTF-8 без BOM. Отчего Демагог неправильно загружал его в назначенное окно
P.S. А если в Демагоге была включена Настройка эвристического распознавания кодировки русскоязычных файлов, то иногда результат отображался совершенно верно! Когда русский текст в нем достаточно длинный!
Причина - в совершенно нелепой опечатке: в функции FreqConsolidate в конце пропущено 2 символа (обозначены красным):
...
d = AddUtf8BOM(d)
SaveToFile({d},tmpfile)
...
И результирующий временный файл записывался в кодировке UTF-8 без BOM. Отчего Демагог неправильно загружал его в назначенное окно
P.S. А если в Демагоге была включена Настройка эвристического распознавания кодировки русскоязычных файлов, то иногда результат отображался совершенно верно! Когда русский текст в нем достаточно длинный!
- tonio_k
- V.I.P.
Скрипты для Demagog
вот в чем дело! А я никак не мог понять причину "плавающей" ошибки. Отключить что ли её, что бы мозги потом не ломать почему, то работает, то не работает?
- flegont
- V.I.P.
Скрипты для Demagog
По умолчанию "Эвристическое распознавание кодировки русскоязычных текстов" - ОТКЛЮЧЕНО. И я настоятельно рекомендую включать его только в самых крайних случаях! И сразу же отключать, после того, как проблемный файл распознан и пересохранен в нормальной кодировке.
- юрабойко
- Обыватель
Скрипты для Demagog
Просьба написать как просто и быстро, расставить ударения слов. Так чтобы все было ясно даже для нуба - возможности отредактировать всю большую книгу вручную у меня нет, глаза устанут намного раньше средины книги. Хотя возможно главу или две отредактирую до этого.
Если возможно я бы вообще расставлял ударения в словах одним или несколькими нажатиями кнопок. Если нет - расставлю их лишь в тех словах которые произносятся хуже всех.
Если возможно я бы вообще расставлял ударения в словах одним или несколькими нажатиями кнопок. Если нет - расставлю их лишь в тех словах которые произносятся хуже всех.
- tonio_k
- V.I.P.
Скрипты для Demagog
вы опишите, какие действия выхотите сделать? Например выделить слово огнедышащий двойным кликом мыши, нажать комбинацию клавиш и вам к этому слову выйдет окно с вариантами:
Код: Выделить всё
Огнедышащий
огнЕдышащий
огнедЫшащий
огнедышАщий
огнедышащИй
огнедышащиЙ
- юрабойко
- Обыватель
Скрипты для Demagog
Ясно, надо заменить в слове одну букву на другую.
Только что пробовал прослушать слово телега через демагог - произносит куда лучше чем в балаболке, в ней первый слог вообще не слышен.
Но ваш пример все равно может очень пригодиться для некоторых слов.
На балоболку судя по всему стоит забить - автор программы ее улучшать не будет.
Только что пробовал прослушать слово телега через демагог - произносит куда лучше чем в балаболке, в ней первый слог вообще не слышен.
Но ваш пример все равно может очень пригодиться для некоторых слов.
На балоболку судя по всему стоит забить - автор программы ее улучшать не будет.
- tonio_k
- V.I.P.
Скрипты для Demagog
вот вы зря так. Балаболка очень продуманная программа и активно обновляется. Произносит вслух не Балаболка, а голосовой движок. Реакция на изменение регистра букв возникает только при наличие соответсвующих словарей. Какие словари, какой голосовой движок вы используете вы не указали. Может у вас голая Балаболка без словарей?
UPD обращаю ваше внимание, что описанный выше вариант решается средствами скрипта. Т.е. это не штатная функция Демагога, а пользовательская доработка, которую вы и сами можете создавать и применять для собственных нужд.
- flegont
- V.I.P.
Скрипты для Demagog
Скажем так: штатной функцией Демагога (и довольно полезной, как показала практика) является т.н. "встроенный интерпретатор". С его помощью продвинутые пользователи могут создавать (и создают!) различные скрипты, сообразно собственным нуждам. Таким образом, "творчеством масс" расширяются функциональные возможности Демагога
- юрабойко
- Обыватель
Скрипты для Demagog
Со словарями для нее. Я поэкспериментировал - на скорости ноль балаболка у меня очень часто глотает начало или конец некоторых слов, многие короткие слова на скорости ноль вообще можно не услышать.
Возможно тут даже не Балаболка виновата - как я в последний месяц не переставлял Виндовс, а есть сомнения в его стабильности. В тоже время не нашел вирусы на компьютере.
Короче для меня комфортной является скорость чтения минус два если не минус три. Если в тексте есть одни длинные слова - возможно минус один. На скорости ноль в каждом среднем абзаце как минимум пару слов не разберешь - пример первый слог слова телега, стоит послушать чуть дольше часа и потом такое происходит постоянно. Причем закрываю балаболку и открываю ее снова - ничего не меняется к лучшему.
Возможно тут даже не Балаболка виновата - как я в последний месяц не переставлял Виндовс, а есть сомнения в его стабильности. В тоже время не нашел вирусы на компьютере.
Короче для меня комфортной является скорость чтения минус два если не минус три. Если в тексте есть одни длинные слова - возможно минус один. На скорости ноль в каждом среднем абзаце как минимум пару слов не разберешь - пример первый слог слова телега, стоит послушать чуть дольше часа и потом такое происходит постоянно. Причем закрываю балаболку и открываю ее снова - ничего не меняется к лучшему.
- tonio_k
- V.I.P.
Скрипты для Demagog
Подскажите, как сделать поиск в тексте utf8 без BOM любого символа не входящего в ANSI таблицу?
Это нужно для предварительной проверки текста перед s=WText (1) что бы точно знать, что никакой символ utf8 в знак "?" не превратится
Это нужно для предварительной проверки текста перед s=WText (1) что бы точно знать, что никакой символ utf8 в знак "?" не превратится
- flegont
- V.I.P.
Скрипты для Demagog
Предположим:
1) в файле proverka.txt находится текст в кодировке utf8
2) и в этом тексте нигде не встречается знак подчеркивания _
Тогда ответ на ваш вопрос даст следующий скрипт:
1) в файле proverka.txt находится текст в кодировке utf8
2) и в этом тексте нигде не встречается знак подчеркивания _
Тогда ответ на ваш вопрос даст следующий скрипт:
Код: Выделить всё
a = LoadFromFile('proverka.txt')
s = table.concat(a,'\r')
_, n = string.gsub(Utf8ToAnsi(s),'_','')
ShowMessage('Символов, не входящих в таблицу ANSI: '..n)
- tonio_k
- V.I.P.
Скрипты для Demagog
Я думал, существует некий диапозон(перечень) ANSI , задав который можно посимвольно прогнать текст c utf8 с проверкой нет ли символа НЕ входящего в диапозон ANSI. Если найденный символ не входит в диапозон ANSI - значит это символ относится к UTF8 о чем выходит сообщение что найден символ не входящий в диапозон
допустим в тексте книги присутствует символ ɐ о чем я не знаю и не узнаю, пока он не превратится в ? после s=WText(1) так вот мне хотелось бы получить предупреждение, что в книге есть символ который не является ANSI ДО того как я применю s=WText(1)
допустим в тексте книги присутствует символ ɐ о чем я не знаю и не узнаю, пока он не превратится в ? после s=WText(1) так вот мне хотелось бы получить предупреждение, что в книге есть символ который не является ANSI ДО того как я применю s=WText(1)
- flegont
- V.I.P.
Скрипты для Demagog
1) Для того, чтобы получить предупреждение, надо проверить текст по-байтно (в кодировке utf8) функцией Utf8ToAnsi. Если какая-то комбинация байтов соответствует символу, отсутствующему в ANSI, то он заменится на один или несколько символов _. Это и будет сигналом о присутствии в тексте символов, НЕ приводимых к ANSI.
2) А как получить текст в кодировке utf8 для вышеуказанной проверки? В следующей версии Демагога функция WText будет иметь 2 параметра. WText(i, utf8). 2-й параметр по умолчанию false.
Конечно, и сейчас можно сохранить текст в окне во временный файл в кодировке utf8 а потом прочесть в строку через LoadFromFile. И ее уже анализировать с помощью Utf8ToAnsi.
2) А как получить текст в кодировке utf8 для вышеуказанной проверки? В следующей версии Демагога функция WText будет иметь 2 параметра. WText(i, utf8). 2-й параметр по умолчанию false.
Конечно, и сейчас можно сохранить текст в окне во временный файл в кодировке utf8 а потом прочесть в строку через LoadFromFile. И ее уже анализировать с помощью Utf8ToAnsi.
- tonio_k
- V.I.P.
Скрипты для Demagog
к небольшому куску текста работает хорошо, а вот если средняя по размеру книжка, то пауза - ощутимая (похожая на зависание)
Попробовал через "эмуляцию" воспроизведения ситуации, когда знаки вопроса появляются в тексте:
Код: Выделить всё
a = LoadFromFile('proverka.txt',false)
s = table.concat(a,'\r')
s = string.gsub(s,'\95', "")--удаляем все нижние подчеркивания (если они присутствовали в тексте)
s = string.gsub(s,'\63', "_")--заменяем все знаки вопроса(если они присутствовали в тексте)
SaveToFile({s},'result.txt') -- сохраняем результат
WOpen(-1,'result.txt') -- переоткрываем файл в окно Демагога
o = {}
o.File_Encoding = feANSI
Settings(o)
WSave(-1,'result.txt')--сохраним файл уже с ANSI кодировкой - при изменении кодировки все UTF8 символы заменятся на знак ?
WOpen(0,'result.txt')
WNew(-1)
WActive(0)
WNew(-1)
WActive(0)
s=WText(0)
--Ищем в файле с ANSI кодировкой знаки "?" которые появляются в результате того, что lua не распознает utf8 сиволы
_, n = string.gsub(s,'?','')
ShowMessage('Символов, не входящих в таблицу ANSI: '..n)
Подскажите, в чем причина? (файл для примера отправил вам на почту)
- flegont
- V.I.P.
Скрипты для Demagog
Потому что при s = WText(i) приведение текста к ansi-строке в Демагоге автоматически при присваивании ansi-строка = юникод-строка. При этом символы, не сводимые к ansi заменяются знаками вопроса.
А Utf8ToAnsi - это самоделка, написанная на Lua. Она для удобства, заменяет "нехорошие" символы знаком _ Но работает медленно - а чего мы ожидали от интерпретатора?
А Utf8ToAnsi - это самоделка, написанная на Lua. Она для удобства, заменяет "нехорошие" символы знаком _ Но работает медленно - а чего мы ожидали от интерпретатора?
- tonio_k
- V.I.P.
Скрипты для Demagog
Сделал полезный скрипт для удобства вставки ударения в слово за счет изменения регистра буквы на заглавную: файл из архива помещаем в папку \Demagog\_Tests_\
Вешаем скрипт на горячую клавишу:
Сервис-Статистика-Выполнить скрипт-По умолчанию; Выбираем удобное сочетание клавиш и прописываем путь к скрипту. Например: Shift+Ctrl+A | _Tests_\ВЫДЕЛЕННЫЙ ТЕКСТ ИЗМЕНИТЬ РЕГИСТР БУКВ.lua
Скрипт применяется к выделенному тексту. Двойной клик по слову - выделит целое слово. Максимально можно выделить текст размером в один абзац. Выделив текст, нажимаем Shift+Ctrl+A выходит окно: Выбираем нужный вариант и нажимаем Ok. Или двойной клик на выбранном.
Последние две строчки в списке всегда будут:
- ВСЕ БУКВЫ ЗАГЛАВНЫЕ
- все буквы строчные
- юрабойко
- Обыватель
Скрипты для Demagog
Я думаю надо попробовать удвоить число всех пробелов в тексте (между словами) в два или три раза, если и тогда читать на скорости 0 балаболка будет плохо, заменю все пробелы на комбинацию 1 пробел и одна кома. Еще можно попробовать заменить пробелы на Табы, но если балаболка их не читает - последнее никак не поможет.
- tonio_k
- V.I.P.
Скрипты для Demagog
а причем тут Балаболка? Это ветка связанная с программой Демагог в частности посвещена скриптам, которые работают только в связке с Демагогом.
что значит плохо? Сохраните аудио запись воспроизведения голоса выложите файл и и прокомментируйте что вас в аудиозаписи не устраивает?
- юрабойко
- Обыватель
Скрипты для Demagog
Начало слов проглатывает и концы иногда тоже. Сейчас показать не могу - переставляю систему, а завтра без проблем кину ссылку.
Демагог к слову произносит лучше зато запись у него выходит еще хуже по качеству чем у балаболки - почти как у говорилки.
Я правда пока ни разу не делал общедоступным файл из гугл дриве, но думаю разберусь без инструкций, или на кину на my-files.su - там это вообще можно сделать в 4 клика мыши, не больше.
Хотя если запись файла Балаболкой будет говорить лучше чем сама программа этот будет приятным сюрпризом.
Демагог к слову произносит лучше зато запись у него выходит еще хуже по качеству чем у балаболки - почти как у говорилки.
Я правда пока ни разу не делал общедоступным файл из гугл дриве, но думаю разберусь без инструкций, или на кину на my-files.su - там это вообще можно сделать в 4 клика мыши, не больше.
Хотя если запись файла Балаболкой будет говорить лучше чем сама программа этот будет приятным сюрпризом.
- юрабойко
- Обыватель
Скрипты для Demagog
Говорилка может записывать аудиофайлы в 100 раз быстрее чем читает, а Демагог как?
- tonio_k
- V.I.P.
Скрипты для Demagog
попробуйте засечь время и отпишитесь. Было бы интересно узнать как дела обстоят на практике.
Из теории: и Демагог и Балаболка и Говорилка записывают в wav по времени одинаково. Скорость записи зависит от голосового движка, а не от Говорилки. На ОБЩУЮ скорость подготовки книги влияет: время на обработку текста словарями + скорость записи голосового движка + скорость работы выбранного конвертора при конвертации wav в mp3. В сборке на базе Демагога книга получается быстрее только потому, что словари составлены и применяются по особому алгоритму - в результате на работу словарей уходит меньше времени (в разы). Во всём остальном скорость практически такая же как у других программ.
- юрабойко
- Обыватель
Скрипты для Demagog
Демагог можно заставить записать wav файлы со скоростью 100 - но - качество, причина неясна.
С оригинальными настройками Демагог записывает файлы как минимум втрое медленнее.
Будет записанный с родными настройками лучше - проверю за 5 минут или раньше.
С оригинальными настройками Демагог записывает файлы как минимум втрое медленнее.
Будет записанный с родными настройками лучше - проверю за 5 минут или раньше.
- юрабойко
- Обыватель
Скрипты для Demagog
Часть теста завершена, речь в wav файлах лучше чем в mp3. Осталось проверить еще как минимум 2 формата файлов.
Звук у файла mp4 лучше чем у файла mp3.
Звук у файла Ogg у vorbis хуже чем у файла wav.
Звук у файла Custom encoder неотличим от звука файла mp3.
Все при стандартной скорости записи аудиофайла.
Звук у файла mp4 лучше чем у файла mp3.
Звук у файла Ogg у vorbis хуже чем у файла wav.
Звук у файла Custom encoder неотличим от звука файла mp3.
Все при стандартной скорости записи аудиофайла.
- юрабойко
- Обыватель
Скрипты для Demagog
С тестами качества записанных аудифайлов разобрался полностью - ускоренная скорость записи ни одному них на пользу точно не пошла.
Качество записи в файл wav при стандартных мне точно самое высокое.
Итог - скорость записи менять может и нужно, но точно после записи при скорости в 100 выше стандартной придется как-то еще обрабатывать файлы, чтобы они не теряли в качестве.
Иначе файл строчит при запуске чуть ли не скороговоркой.
Качество записи в файл wav при стандартных мне точно самое высокое.
Итог - скорость записи менять может и нужно, но точно после записи при скорости в 100 выше стандартной придется как-то еще обрабатывать файлы, чтобы они не теряли в качестве.
Иначе файл строчит при запуске чуть ли не скороговоркой.
- wasyaka
- V.I.P.
Скрипты для Demagog
Вариант обработки омографов с помощью скрипта
От мастера угля - мастерам програмирования...
От мастера угля - мастерам програмирования...
- Вложения
-
- Video_2020-10-21_232056.rar
- (66.9 МБ) 82 скачивания
- Lecron
- Специалист
Скрипты для Demagog
Как понял, составляется словарь. Только вопрос, на одну книгу или на будущее? Если первое, зачем редактировать правила до более общего вида? Если второе, словарь не совсем хороший. Альтернатив под другое ударение дофига. Например:
Код: Выделить всё
На крыльце дОма для рабочих.
ДорОгой тетушки неплохо провели время.
Обработанный дУхами скелет, пугал всех посетителей (из фэнтези).
за едУ служить не буду.
К тому же явно сЁстры.
Я узнаЮ везде, где появляюсь.
- tonio_k
- V.I.P.
Скрипты для Demagog
как раз с вероятностями (определяется субъектвно) и приходится добавлять правила при составлении словарей. В "большинстве случаев", "в основном", "скорее всего", правило сработает верно. А если вылезет ошибка, надо будет только добавить другое более конкретное (с большим количеством слов) правило скорее к текущей книге, чем на будущее. Хотя есть мизерная вероятность, что другой автор в другой книге применит именно это словосочетание и правило сработает. Только об этом никак не узнаю, потому что вслух прочиталось верно, значит не надо к этому возвращаться. Хотя узнать можно - можно ввести статистику сработавших правил, копить, анализировать. Инструменты в скриптах для этого есть. Но это замедление общего процесса подготовки книги. И не факт что такая статистика будет полезной. Интересной - да. А вот практичность в плане обьема затрат по времени и ресурсам что бы потом удалить редкое правило которое никогда больше не сработает и выявив и удалив несколько десятков сотен таких правил на скорость работы словарей это практически не повлияет. Немного занесло под конец)))
Короче тут предполагают посмотреть принцип работы со скриптом. А сами правила и их ценность это как пример. Может эти правила сработают в самом начале обработки книги и дале будут неоднократно изменены более точными правилами из последующих словарей.
- Lecron
- Специалист
Скрипты для Demagog
В этом-то и принципиальная ошибка. Нам неизвестны вероятности! То что один из вариантов нам уже предложили в данной книге, заставляет восприятие крутится вокруг него, отчего он кажется более вероятным. Но предложи книга "... дОма для рабочих", "узнаЮ везде" или самое яркое "К тому же явно сЁстры", были бы в словарь записаны именно они.
Как пример работы со скриптом — отлично. Как смысл и результат работы в таком контексте на будущие книги....
Если у кого собрана большая библиотека, можете сами поискать эти словосочетания поиском и убедится в моей правоте. Или вашей)))
- flegont
- V.I.P.
Скрипты для Demagog
Вероятности - неизвестны. Оценки вероятностей - известны, хотя они субъективны, зависят от общего объема прочитанного, и могут заметно различаться. Тем не менее, консенсус в большинстве случаев возможен. Я, например, уверен, что 99% здесь присутствующих правильно поставят ударение в последнем слове фразы:
Напряженная неделя заседаний закончилась, и депутаты Госдумы, наконец-то передохнут.
А кто-то и соответствующее rex-правило найдет
Напряженная неделя заседаний закончилась, и депутаты Госдумы, наконец-то передохнут.
А кто-то и соответствующее rex-правило найдет
- good_cat
- Администратор
- good_cat
- Администратор
Скрипты для Demagog
Не только от объема, но и от жанра, от контекста. В современной литературе, если в начале предложения написано Модель, то скорее всего это модель. А вот, если это военная проза XX столетия, то вероятнее всего имеется в виду Модель. И подобные коллизии в принципе не разрешимы алгоритмическими путями.
- flegont
- V.I.P.
Скрипты для Demagog
Что ж... Подождем, пока спецы по нейросетям заинтересуются проблемой омонимии в русском языке.
- wasyaka
- V.I.P.
Скрипты для Demagog
Смысл на одну?
Это просто пример как расставить омографы и ДОБАВИТЬ одновременно в словарь...И так далее, почти для каждого правила, с большей или меньшей вероятность.
А что добавлять - это сугубо индувидуально.
В окне Демагога не очень удобно это делать (для меня, использую Emurasoft EmEditor Professional - добавил подсветку омографов - основные и все остальные - разным цветом).
► Показать
Код: Выделить всё
@(\bкрейсера\b)\s{1,4}([А-ЯЁ]\w+)(\,|\sи)\s{1,4}([А-ЯЁ]\w+)=крейсерА $2$3 $4
@(\bна\b)\s{1,4}([А-ЯЁ]\w+)\s{1,4}(\bострова\b)=$1 $2 островА
И КОНВЕРТЕР требует допиливания, встречаются ньюансы...
.
- tonio_k
- V.I.P.
Скрипты для Demagog
flegont,
-подсветка ошибок
-подсветка слов из *.orfo
И при выборе второго варианта воспринимать словарь *.orfo как hmg, но с подсветкой, указанной в настройках.
может автор подумает над этим? Что бы не придумывать новые словари, может сделать "подсветку" на основе уже существующей поддержки словарей орфографии *.orfo? В настройках Литературный текст прописать либо/либо:
-подсветка ошибок
-подсветка слов из *.orfo
И при выборе второго варианта воспринимать словарь *.orfo как hmg, но с подсветкой, указанной в настройках.
- flegont
- V.I.P.
Скрипты для Demagog
1) В словаре *.orfo нет слов. Это - совершенно отдельная, не совместимая с другими словарями система - набор n-грамм для русского языка, при n=5. Поэтому ее ни к чему, кроме проверки орфографии - не приспособишь.
2)
2)
Я не понял, в чем именно состоит неудобство. Поясните.
- tonio_k
- V.I.P.
- wasyaka
- V.I.P.
Скрипты для Demagog
Выделять для удаления лишнего надо с конца строки (или аккуратно) - а к этому надо привыкнуть - иначе нижняя строка присоединяется к текущей
► Показать
► Показать
Т.е всё равно надо к тхт редактору обращатся.