语音合成技术和文本语音转换 - Synthetic voice and Text to Speech technology - Синтетический голос и технологии преобразования текста в речь
 
TTS книги  Проверялка  ФорумФорум  RSS  ПоискПоиск  РегистрацияРегистрация  ВходВход  

Извещения об ошибках

Предыдущая тема Следующая тема Перейти вниз
На страницу : 1, 2  Следующий
АвторСообщениеИзвещения об ошибках
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Вс Авг 15 2010, 18:30
Вс Авг 15 2010, 18:30

Тема для собщений об ошибках в программе


Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Ср Авг 25 2010, 14:35
Ср Авг 25 2010, 14:35

v. 3.09.141 windows 7 x32
при открытии панели словарей выскакивает ошибка :46:

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Ср Авг 25 2010, 15:03
Ср Авг 25 2010, 15:03

после подключения словаря ошибка исчезла :sclerosis:
наверно потому что обновлена поверх старой версии?

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Ср Авг 25 2010, 18:06
Ср Авг 25 2010, 18:06

Да. В файле настроек $.ini чуть-чуть изменилась структура и потому при 1-м запуске прога ругается на старые настройки, а потом $.ini автоматом перезаписывается.

P.S. Уже исправлено Smile

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Ср Сен 01 2010, 20:30
Ср Сен 01 2010, 20:30

3.10.142 windows 7 x32


а если выделить и через Ctrl+T то нормально, но если через "Сервис"-"Статистика" то не работает :46:

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Ср Сен 01 2010, 21:11
Ср Сен 01 2010, 21:11

Уже исправлено Smile

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Вс Сен 12 2010, 19:44
Вс Сен 12 2010, 19:44


похоже мы ее сломали, да? :musicwhisper:rulzz
это при замене текста через меню статистика-измененный текст по ини-словарю с правилом
Код:
(.*)+(\=)+(.*)=$3

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Вс Сен 12 2010, 22:12
Вс Сен 12 2010, 22:12

Спасибо, что обратили мое внимание. Smile
Это не ошибка программы. Это сообщение пользователю от модуля RegExpr.
"Ошибка компиляции регулярного выражения. Операнд не может быть пустым (позиция 4)"
Т.е. предложенное на обработку регулярное выражение написано неверно. + означает повторение ОДИН или больше раз того, что перед ним. Перед ним подвыражение .* означающее повторение любого символа НОЛЬ или больше раз, т.е. может и ничего не быть. Как повторить ОДИН или более раз то, чего нет?

В новой версии я отключил все такие сообщения - это добрая программистская традиция - не напрягать пользователя его же ошибками. Тот кто знаяет РВ, тот сообразит, почему некое правило не изменяет текст. Оно неверное и игнорируется. А тому, кто не знает РВ, рассказывать об ошибках бесполезно, не поймет-с.

ЗЫ. Кстати, Балаболка вышеуказанное ошибочное правило именно таким молчаливым образом и игнорирует. Smile

Вернуться к началу Перейти вниз
Lexus
Эксперт
avatar


Сообщений : 408
Репутация : 32

 Lexus :: Пн Сен 13 2010, 12:28
Пн Сен 13 2010, 12:28

Цитата :
В новой версии я отключил все такие сообщения - это добрая программистская традиция - не напрягать пользователя его же ошибками. Тот кто знает РВ, тот сообразит, почему некое правило не изменяет текст.
Хорошо бы иметь возможность увидеть список правил, не сработавших по причине ошибки в их синтаксисе. Не всегда бывает понятно, виновата программа, пропустившая правило,компонент, или ошибку допустил составитель.
Примерно, так где-то появляется модальное окошко, или выскакивает строка сообщения, что программа проигнорировала 3 правила по причине ошибок в них имеющихся. И показыывает правила и номер строки в словаре.

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Пн Сен 13 2010, 13:40
Пн Сен 13 2010, 13:40

Цитата :
Хорошо бы иметь возможность увидеть список правил, не сработавших
Да, в этом есть резон. Подумаю, как удобнее реализовать выдачу списка отбракованных правил..

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Пн Сен 13 2010, 20:51
Пн Сен 13 2010, 20:51

Код:
(.*)+(\=)+(.*)=$3
Проблема с этим правилом в том, что оно делится на левую и правую части по ПЕРВОМУ знаку равенства, а не по второму, как было задумано его составителем. Из-за этого и возникает ошибка синтаксиса.

Я всё ждал эти годы, когда найдется тот "маньяк", который в INI-словаре вставит в левую часть правила знак равенства; мне уже стало казаться, что при чтении текстов не может возникнуть такой необходимости.

Не вижу смысла и сейчас из-за одного такого случая что-то придумывать для включения знака равенства в регулярное выражение (например, записывать два знака равенства подряд, '=='). Все это замедлит загрузку/обработку словарей, затруднит их редактирование и т.д. Так что, при использовании INI-словарей в "Балаболке" в левой части правила символ '=' использовать НЕЛЬЗЯ. Разумеется, автор программы "Демагог" может самостоятельно принять решение на этот счет (даже если это окажет влияние на совместимость словарей).

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Пн Сен 13 2010, 21:48
Пн Сен 13 2010, 21:48

:offtopic:
balabolka пишет:
Я всё ждал эти годы, когда найдется тот "маньяк"
нет предела совершенству :yessir:
а выход мы нашли заменив "\=" на его аналог "\x3D", работает и ладно :hammerdrill:
но если бы не попалось то наверное никто бы и не узнал, а ведь наверно есть и еще подобные грабли...

Вернуться к началу Перейти вниз
Lexus
Эксперт
avatar


Сообщений : 408
Репутация : 32

 Lexus :: Пн Сен 13 2010, 22:34
Пн Сен 13 2010, 22:34

Для меня также было интересно, как балаболка справится с '='. Это было как черная комната. А тема-то очень интересная.
Конструкции:
?=
?<=
Являются частью PCRE. И исключив их, правильнее будет переименовать метод как-то иначе.
Я использую такие конструкции для обработки текстов. Правда, в других программах.
Может, если компонент позволяет такие конструкции, заменить знак тождества между левой и правой частью чем нибудь другим?
Хотя-бы использовать русское слово 'равно'. Ведь для программы это будет всего лишь разделитель, а правила приобретут гибкость и мощь языка perl. Опять же, если компонент позволяет использование ?= и ?<= варианты заглядывания.

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Пн Сен 13 2010, 23:11
Пн Сен 13 2010, 23:11

Цитата :
Проблема с этим правилом в том, что оно делится на левую и правую части по ПЕРВОМУ знаку равенства, а не по второму
Проблема усугубляется тем, что Демагог делит правила не по первому знаку равенства, а всегда по последнему.
Например, по правилу
==равно
текст
1 = 2?!
будет заменен на
1 равно 2?!

Но РВ
(.*)+(\=)+(.*)
тем не менее все равно дает ту самую ошибку Sad

Я нашел онлайн-сервис проверки РВ: http://www.regexpr.ru/?
и получил вердикт

Регулярное выражение:
(.*)+(\=)+(.*)
Внимание регулярное выражение содержит ошибки:
preg_match_all() [function.preg-match-all]: Unknown modifier '+'


Сервис сей, как я понял, использует стандарт RE PHP, но приговор остается тем же Smile

Вернуться к началу Перейти вниз
Lexus
Эксперт
avatar


Сообщений : 408
Репутация : 32

 Lexus :: Вт Сен 14 2010, 13:32
Вт Сен 14 2010, 13:32

Код:
(.*)+(\=)+(.*)=$3
Посмотрел в EditPadPro вполне валидное правило.

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Вт Сен 14 2010, 14:17
Вт Сен 14 2010, 14:17

Да, например, вот эти тестеры подтверждает валидность
http://www.regextester.com/
http://www.rexv.org/
А вот этот, опят-таки, отвергает:
http://boonya.info/blog/online-proverka-regulyarnykh-vyrazhenijj.html
откуда и вывод, что с единым стандартом RE - не все так просто.

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Вт Сен 14 2010, 15:34
Вт Сен 14 2010, 15:34

Получается, проблема в символе "+" ("плюс"): в новом методе TRegExpr он вызывает ошибку, в VBScript - нет. В принципе, здесь вполне можно обойтись без "плюсов"; правило можно записать и так:
Код:
(.*)(\x3D)(.*)=$3
Тогда правило сработает и с TRegExpr, и с VBScript. Нужен ли здесь "плюс" или нет - не знаю.

Тут другая "засада": как я понимаю, составитель этого правила хотел обработать текст ПОСТРОЧНО, то есть получить текст, стоящий после "=" на каждой строчке. Сейчас в "Балаболке" это получится лишь для VBScript:

один=первый
два=второй


даст в итоге:

первый
второй


А для нового метода вернется лишь это:

второй

Дело тут в модификаторе /s: символ "." совпадает с любым символом, но если выключен модификатор /s, то "." не совпадает с \x0D\x0A и \x0A и \x0D (не совпадает с переводом каретки). То есть, чтобы получить, наконец, то, что выдает для этого правила VBScript, надо внутри программы параметру TRegExpr.ModifierS присвоить значение False (сейчас в "Балаболке" это не так; изменю в следующей версии программы - чтобы обеспечить совместимость с VBScript).

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Вт Сен 14 2010, 15:59
Вт Сен 14 2010, 15:59

Цитата :
ModifierS присвоить значение False

По-видимому, так и придется сделать - это работает.

По мере обнаружения к-л других нехороших вариантов правил можно заранее автоматичски корректировать такие правила, перед тем как передать TRegExpr'y на исполнение.

Вроде того, как оказалось вполне практичным делать в правой части правила замены вида $1n ---> ${1}n , где n - цифровой символ 0..9
Тем самым удалось избежать правок в самом TRegExpr.pas.
(А на скорости выполнения предварительные замены никак не отразились).
...
if VBS then right := VBSCompatible(right);
...
//----------------------------------------------------------------------
function VBSCompatible(c: string): string;
var
k: integer;
b, d: string;
begin
SetLength(d,5); d[1] := '$'; d[2] := '{';
b := '';
k := 1;
while k > 0 do begin
k := PosCh('$',c,k); {!}
if k > 0 then b := Copy(c,k,3)
else break;
if (Length(b) = 3) and (b[2] = '1') and (b[3] in ['0'..'9']) then begin
d[3] := b[2]; d[4] := '}'; d[5] := b[3];
c := StringReplace(c,b,d,[rfReplaceAll]);
end;
Inc(k);
end;
Result := c;
end;
//-------------------------------------------------------------------------

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Чт Сен 16 2010, 17:40
Чт Сен 16 2010, 17:40

подскажите еще пожалуйста по правилу вида:
Код:
([A-Za-zА-яЁё])([\r\n])=$1
ситуация та же, не работает ни в одном из режимов
ошибку балаболка не нашла, непонятно :46:
Спойлер:
 

и можно ли как-то озвучить полный список того что 100% не будет работать в любом из режимов ini-словарей и что только в одном из, а то полная путаница с ними, так работает а так не работает Sad

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Чт Сен 16 2010, 22:43
Чт Сен 16 2010, 22:43

evilone_ пишет:
ошибку балаболка не нашла
В синтаксисе ошибки нет, а вот по смыслу правило не совсем верное: в Windows конец строки обозначается ДВУМЯ символами, а не одним, как в Вашем примере. Так что, Ваше правило удаляет лишь ОДИН символ конца строки, но и второго оставшегося символа достаточно, чтобы разрыв строки никуда не исчез.

Вот как нужно записать это правило:
Код:
([A-Za-zА-яЁё])(\r)(\n)=$1
Это удалит оба символа на конце строки.

evilone_ пишет:
и можно ли как-то озвучить полный список того что 100% не будет работать в любом из режимов ini-словарей и что только в одном из, а то полная путаница с ними, так работает а так не работает
Ничего себе у Вас запросы! я бы и сам хотел узнать мнение специалистов, работающих с регулярными выражениями каждый день, о том, какие правила будут работать, какие нет, и почему.

Пока приходится разбираться методом проб и ошибок; спасибо за помощь тем, кто редактирует словари INI и присылает информацию об ошибках.

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Пт Сен 17 2010, 01:28
Пт Сен 17 2010, 01:28

balabolka пишет:
Вот как нужно записать это правило
у меня это правило так же не работает, разрыв строки все равно остается, не знаю почему :46:
вот мой пример текста

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Пт Сен 17 2010, 02:21
Пт Сен 17 2010, 02:21

evilone_
Предложенный мной вариант правила сработал и на Вашем тексте, для обоих методов пременения INI-правил. Теряюсь в догадках... Sad

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Пт Сен 17 2010, 12:33
Пт Сен 17 2010, 12:33

Тож попробовал.

Правило:

([A-Za-zА-яЁё])(\r)(\n)=$1

на упомянутом тексте:

"И через десять минУт скрупулезного и напряженного осмотра <...> словно
видел все это раз сто."

сработало, превратив, соответственно, каждый абзац текста в одну длинную строку.

Это ж и было задумано? Тогда правило - работает верно Smile

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Пт Сен 17 2010, 12:52
Пт Сен 17 2010, 12:52

evilone_
Возможно, у Вас в настройках программы "Балаболка" значение длины паузы между абзацами больше 0 (окно "Установки", закладка "Паузы"). Тогда текст делится на части по-другому (на абзацы), и Ваше правило не применяется к "стыку" двух абзацев.

Именно поэтому мной не рекомендуется применять правила, "охватывающие" более одного абзаца: INI-словарь был задуман не как инструмент для обработки текстов (так он сейчас используется некоторыми пользователями), а как словарь коррекции произношения при чтении вслух. Правила применяются не ко всему тексту целиком, а лишь к конкретной его части, которая читается в данный момент. "Стык" двух кусков текста возник бы так или иначе, в любой TTS программе; просто в "Балаболке" это сразу стало заметно из-за паузы между абзацами.

Возможно, стоит еще поразмыслить над этим. Но пока я не вижу другого способа: правила из словарей (INI и DIC) применялись и применяются к ЧАСТЯМ текста, а не к тексту целиком. Размеры этих "кусков" могут быть разными - это зависит от конкретных настроек программы (паузы, запись LRC файлов или тега Lyrics в MP3, что-то другое).

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Пт Сен 17 2010, 15:41
Пт Сен 17 2010, 15:41

balabolka пишет:
в настройках программы "Балаболка" значение длины паузы между абзацами больше 0 (окно "Установки", закладка "Паузы")
да, вся причина оказывается была именно в этом :comando:
теперь все работает, пасиб

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Пт Окт 15 2010, 21:10
Пт Окт 15 2010, 21:10

подскажите пожалуйста,
есть такие два правила в ини-словаре
Код:
\b(\d+)\s([A-z]{3,999})(z\b)=$1-$2$3
\b(\d+)\s([А-яЁё]{3,999})(й\b)=$1-$2$3
текст
Код:
11 abcdefz
11 абвгдей
изменяется
Код:
11-abcdefz
11 абвгдей
т.е. русские игнорируются, почему так?
в балаболке аналогичная ситуация :46:

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Пт Окт 15 2010, 21:55
Пт Окт 15 2010, 21:55

...и еще одно
Код:
\b(\d)(\d)(\d)(\d)(\d)\b=$10 $20 $30 $40 $50
Код:
12345
54321
Код:
10
50
вместо
Код:
10 20 30 40 50
50 40 30 20 10
Suspect

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Пт Окт 15 2010, 22:03
Пт Окт 15 2010, 22:03

Код:
\b(\d+)\s([A-z]{3,999})(z\b)=$1-$2$3
\b(\d+)\s([А-яЁё]{3,999})(й\b)=$1-$2$3
Вы уверены, что русские буквы игнорируются? Проверил Ваш пример в "Балаболке" и "Демагоге" - в обеих программах правила срабатывают, получается такой текст:
Код:
11-abcdefz
11-абвгдей

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Пт Окт 15 2010, 22:09
Пт Окт 15 2010, 22:09

Код:
\b(\d)(\d)(\d)(\d)(\d)\b=$10 $20 $30 $40 $50
И это правило сработало так, как Вы задумывали:
Код:
10 20 30 40 50
50 40 30 20 10

Для проверки был создан отдельный INI-файл с этими тремя правилами; может быть, дело во влиянии других правил из Вашего словаря?

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Сб Окт 16 2010, 11:09
Сб Окт 16 2010, 11:09

Товариши!
С подключенным ИНИ-словарем, содержащим "проблемные" правила (и только им одним!), выполнить в Балаболке "Настройки - Коррекция произношения - Статистика замен".
Или в Демагоге "Сервис - Статистика - Словарные замены" (или Ctrl+J выделив проверяемый текст).
В обоих случаях будет получен СПИСОК ПРИМЕНЕННЫХ ПРАВИЛ. Вот в нем и посмотреть, какие еще правила, кроме упомянутых, в него затесались?

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Сб Окт 16 2010, 16:04
Сб Окт 16 2010, 16:04

Цитата :
В обоих случаях будет получен СПИСОК ПРИМЕНЕННЫХ ПРАВИЛ. Вот в нем и посмотреть, какие еще правила, кроме упомянутых, в него затесались?
ну так написано же какое правило, нет? оно там совсем одно Smile
подстановки вида $20-$50 игнорируются, и только в демагоге кстати
с остальным уже разобрались
Цитата :
И это правило сработало так, как Вы задумывали
у меня в демагоге с включенной совместимостью для старого метода получается только 10 и 50 или я что-то делаю не так?Suspect

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Сб Окт 16 2010, 20:31
Сб Окт 16 2010, 20:31

Цитата :
у меня в демагоге с включенной совместимостью для старого метода получается только 10 и 50 или я что-то делаю не так?

evilone_
Увы, это я сделал кое-что не так Sad Спасибо, что обратили мое внимание.
Уже исправил.

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Вс Сен 01 2013, 15:46
Вс Сен 01 2013, 15:46

столкнулись с неточностью при работе с *.rex словарем в программе demagog -
если есть правила:
Код:
(\bвс)е(\s(\bвздор\.))=$1<:yo:>$2
<\:yo\:>=ё
и текст
Код:
все вздор.
замена не срабатывает, причем если сделать правило
Код:
[в]=ё
то получается
Код:
все вздоС‘.
что мы делаем не так?Suspect

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Пн Сен 02 2013, 19:13
Пн Сен 02 2013, 19:13

evilone_
Метасимволы "\b" не работают для русских букв: русские буквы не считаются буквами и не являются границей слова.

Возможное решение для составителя словаря: убрать метасимволы "\b" из правил.

Возможное решение для программиста: добавить русские буквы (большие и маленькие) к латинским буквам и цифрам (константа RegExprWordChars).

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Ср Сен 04 2013, 20:57
Ср Сен 04 2013, 20:57

Метасимвол \b в Демагоге для русских букв работает, т.к. упомянутая константа задана так:

RegExprWordChars : RegExprString = // default value for WordChars
'0123456789'
+ 'abcdefghijklmnopqrstuvwxyz'
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'
+ 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' // Russian alphabet added by
+ 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; // Benedict Lee, 30.08.2010

И, например, весь словарик Склонятор.rex держится на метасимволе \b, соседствующим с русскими буквами :oldtimer:

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

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Ср Сен 04 2013, 22:43
Ср Сен 04 2013, 22:43

Всё вздор.

Спойлер:
 

Таковы результаты теста с "чистым" словарем, содержащим только указанные 2 проблемных правила. 3-е временно закомментировано.

Когда же я снял сей комментарий, то получил следующий измененный текст и список примененных правил:

Спойлер:
 


Такие дела. Все 3 правила сработали верно tongue
Я подозреваю, что первоначальный тест был проведен на более полном словаре, содержащим и другие правила, кроме упомянутых трех. Вот среди тех "других", по-видимому, и кроется нечто сомнительное...

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Чт Сен 05 2013, 00:21
Чт Сен 05 2013, 00:21

flegont пишет:
Я подозреваю, что первоначальный тест был проведен на более полном словаре, содержащим и другие правила, кроме упомянутых трех. Вот среди тех "других", по-видимому, и кроется нечто сомнительное...
угу, это правило входит в более полный словарь и пример был подобран специально для него, но у нас почему-то один и тот же словарь работает по-разному в разных программах, точнее где-то работает а где-то нет wall
Спойлер:
 

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Чт Сен 05 2013, 02:11
Чт Сен 05 2013, 02:11

evilone_
Полагаю, дело тут в том, что файл "YOhmg.rex", который Вы используете в тестах, имеет кодировку UTF-8 ("Балаболка" сохраняет все словари в этой кодировке). А программа "Демагог" предполагает, что словарь имеет кодировку ANSI.

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Чт Сен 05 2013, 06:59
Чт Сен 05 2013, 06:59

Цитата :
что файл "YOhmg.rex", который Вы используете в тестах, имеет кодировку UTF-8
evilone_
Да, это важно! Всегда надо проверять соответствие кодировок словарей от "Балаболки" и Demagog'a. Имейте ввиду, что"Балаболка" позволяет пересохранить файл из кодировки UTF-8 в ANSI. Воспользуйтесь этой возможностью - конвертируйте словарь в ANSI, и заново проведите тест.

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Чт Сен 05 2013, 22:26
Чт Сен 05 2013, 22:26

flegont, balabolka, :sclerosis: ой, действительно все дело было в кодировке... Embarassed спасибо :loveshower:

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Чт Сен 05 2013, 23:18
Чт Сен 05 2013, 23:18

Ну, слава Летающему Макаронному Монстру, разобрались... Wink

Вернуться к началу Перейти вниз
basist
Гость
avatar



 basist :: Вс Янв 12 2014, 21:26
Вс Янв 12 2014, 21:26

Текст
Цитата :
абаках=абАках,абакАх
абаке=абАке,абакЕ
абаки=абАки,абакИ
абакой=абАкой,абакОй
абакою=абАкою,абакОю
, шаблон
Код:
([А-Яа-я/-]+=)([А-Яа-я\-]+,)([А-Яа-я\-]+)
, правило
Код:
$1$2 $1$3
.
Включена радиокнопка "Шаблон регулярные выражения".
Когда нажимаешь "Найти дальше" и "Заменить" - работает, когда "Заменить всё" - не работает.
Создал словарь *.rex с правилом выше, не функционирует. Замен требуется много, каким может быть решение?

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Ср Янв 15 2014, 11:19
Ср Янв 15 2014, 11:19

basist, спасибо за Ваше сообщение!

Исправьте Ваш словарик вот так:

([А-Яа-я\-]+\x3d)([А-Яа-я\-]+\,)([А-Яа-я\-]+)=$1$2 $1$3

Дело здесь вот в чем. В окне поиска-замены по кнопке "Заменить всё" программа как раз и составляет (молча и тайно) временный словарик и по нему производит сразу все замены.
Поскольку ничего не заменилось, то я по Вашему примеру сделал отдельный словарик с этой заменой. При попытке посмотреть словарную замену по клавише Ctrl+T сразу получил уведомление программы: "Некорректное регулярное выражение".

А потом уже увидел ошибку Smile
Программа всегда разделяет словарную строку на ПРАВИЛО и ЗАМЕНУ по первому знаку равенства в словарной строке. (Кажется, Балаболка работает точно так же).
В нашем случае, первый знак равенства - это просто ИСКОМЫЙ СИМВОЛ в тексте. От этого и все беды - правило и замена определились неверно.

Решение. Запишем первый символ = в виде шестнадцатеричного кода: \x3d
Таким образом, проблема будет решена.
Соответственно, при работе через окно поиска-замены правило поиска надо указывать в виде: ([А-Яа-я\-]+\x3d)([А-Яа-я\-]+\,)([А-Яа-я\-]+)
Тогда кнопка "Заменить всё" отработает нормально.

Есть альтернативное решение для пользовательских словарей, но оно годится только для Demagog'a. Использовать альтернативный разделитель словарной строки на правило и замену - двойное двоеточие ::

([А-Яа-я\-]+\=)([А-Яа-я\-]+\,)([А-Яа-я\-]+)::$1$2 $1$3

Вернуться к началу Перейти вниз
balabolka
V.I.P.
avatar


Сообщений : 1228
Репутация : 986

 balabolka :: Ср Янв 15 2014, 13:03
Ср Янв 15 2014, 13:03

В "Балаболке" знак "=" в регулярных выражениях также следует записывать как "\=" (не помню, когда именно это поправил, но уже достаточно давно). Но и "\x3d" также будет работать.

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Ср Янв 15 2014, 14:25
Ср Янв 15 2014, 14:25

Цитата :
знак "=" в регулярных выражениях также следует записывать как "\="
Хорошая мысль.
Также поправил (версия 271) Smile

Теперь вот это работает:

([А-Яа-я\-]+\=)([А-Яа-я\-]+\,)([А-Яа-я\-]+)=$1$2 $1$3


Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Пт Янв 17 2014, 20:56
Пт Янв 17 2014, 20:56

flegont пишет:
Хорошая мысль.
иногда очень не хватает в *.rex правилах возможности добавления \r\n\t и т.п. в "замене" т.е. в правой части правила, например:
Код:
([А-Яа-я\-]+)=$1\r\n
и смены регистра:
Код:
@([а-я\-]+)=$U1
@([А-Я\-]+)=$L1
слово→СЛОВО
СЛОВО→слово
было бы очень здорово если бы можно было добавлять такого вида правила в *.rex словари :46:

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Сб Янв 18 2014, 10:44
Сб Янв 18 2014, 10:44

Цитата :
иногда очень не хватает в *.rex правилах...
Я подумаю, что тут можно сделать,
Но надо уточнить, что имеется ввиду под и т.п. в перечне \r \n \t

13 = \r возврат каретки
10 = \n перевод строки
09 = \t табуляция

Еще?.. Suspect

Пока вижу только
32 = \s пробел

А \f (прогон страницы) и \v (вертикальная табуляция) - устарели, их даже в шпаргалках по регулярным выражениям уже не приводят Smile

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Сб Янв 18 2014, 16:03
Сб Янв 18 2014, 16:03

наверно лучше всего просто добавить поддержку \xXX для ASCII и \uХХХХ для Unicode в замене, а по необходимости все эти \r\n\t и т.п. можно будет записать в шестнадцатеричном представлении :botan:
а кстати, планируется ли переход\поддержка Unicode в Demagog?

Вернуться к началу Перейти вниз
flegont
V.I.P.
avatar


Сообщений : 355
Репутация : 476

 flegont :: Сб Янв 18 2014, 16:18
Сб Янв 18 2014, 16:18

Цитата :
добавить поддержку \xXX для ASCII...
Я тоже к этому склоняюсь

Цитата :
планируется ли переход\поддержка Unicode в Demagog?
А какие аргументы "за"?

Вернуться к началу Перейти вниз
evilone_
Участник «online словари»
avatar


Сообщений : 859
Репутация : 317

 evilone_ :: Пн Янв 20 2014, 23:11
Пн Янв 20 2014, 23:11

flegont пишет:
А какие аргументы "за"?
:order: ну так чтобы чего-то очень не хватало то нет, наверно только поддержка других языков которые не поддерживает ASCII - но оно и не так часто надо... словари - наше все Smile это главное

Вернуться к началу Перейти вниз
Спонсируемый контент




 Спонсируемый контент ::


Вернуться к началу Перейти вниз

Извещения об ошибках

Предыдущая тема Следующая тема Вернуться к началу
Извещения об ошибках
Страница 1 из 2Страница 1 из 2На страницу : 1, 2  Следующий
Этот сайт не предоставляет электронные версии программного обеспечения и полнотекстовых электронных изданий, а занимается лишь
подборкой и каталогизацией ссылок, присылаемых и публикуемых на форуме нашими читателями.

Создать форум | ©phpBB | Бесплатный форум поддержки | Сообщить о нарушении
Создать форум | © phpBB | Бесплатный форум поддержки | Сообщить о нарушении | Создать бесплатный блог