|
| |
Автор | Сообщение | Балаболка |
---|
Lexus Эксперт
Сообщений : 408
| Lexus | :: Чт Июл 01 2010, 09:43 | Чт Июл 01 2010, 09:43 | |
| - Цитата :
- в "Демагоге" символ "&" считается буквой, а в "Балаболке" - нет.
На мой взгляд все символы должны обрабатываться словарем, за исключением служебных символов словаря звездочки и $ , может еще знаков ударения(с сомнением, нужно думать) Мы ведь не планируем ввод в словарь новых служебных символов. Хотя думается, одну разновидность звездочки можно было бы добавить. В некоторых программах для этого используют знак & . Применяется для слов которые обязательно должны иметь символы в месте их установки. Пример (упрощено): Толст^о& исключается т^олсто Давно хотел поднять тему по такому развитию словарей. В любом случае остальные символы в словарях должны обрабатываться. В текстах встречается достаточно мусора и не только, вроде ))))))) ======== ((((((( ^-^ и тому подобного набора символов. Да и прочитать текст программы на языке уровня Си без устранения такого ограничения в словарях вряд ли получится. Так, что "Демагог" ближе к истине. Хотелось бы и балаболку использовать в таком ключе.
|
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Чт Июл 01 2010, 11:25 | Чт Июл 01 2010, 11:25 | |
| Lexus Вы не совсем верно поняли меня: не хочу начинать дисскусию о том, является ли "амперсанд" буквой или нет. Я лишь в очередной раз пытаюсь обратить внимание на то, что "быстрый" метод довольно "чувствителен" к "необычным" правилам; поэтому хочу порекомендовать пользователям воздержаться от добавления таких правил (это только моя личная позиция).
В следующей версии "Балаболки" постараюсь решить все проблемы с применением описанных Вами правил (но "звездочка" в правилах, состоящих из одних лишь знаков препинания, всё же необходима). |
|
| | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Чт Июл 01 2010, 11:44 | Чт Июл 01 2010, 11:44 | |
| Все понял, спасибо. Уточню, что злосчастный "амперсанд" был использован случайно, только для того, чтобы показать проблему с символами, не являющимися буквенночисловыми. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Чт Июл 01 2010, 12:13 | Чт Июл 01 2010, 12:13 | |
| - Lexus пишет:
- "амперсанд" был использован случайно
"Случайности не случайны" (с) "Кунг-фу Панда"
Этим правилом Вы наглядно высветили основную проблему "быстрого" метода: он ищет в тексте СЛОВА, то есть СОЧЕТАНИЯ БУКВ. Это означает, что применять метод для поиска и замены символов, не являющихся буквами, будет очень и очень сложно, "быстрый" метод может не дать правильного результата. (Именно поэтому в этих случаях и начинают играть важную роль такие мелочи, как является символ "&" буквой или нет.)
Надеюсь, с помощью пользователей удастся максимально "продвинуться" на пути обработки таких правил; полностью решить эту проблему не удастся в силу природы "быстрого" метода. |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Пт Июл 02 2010, 14:39 | Пт Июл 02 2010, 14:39 | |
| flegont Вы уверены, что это была самая последняя, 464-ая версия программы "Балаболка"? У меня получается другой текст на выходе (такой же, как в "Демагоге"); я использовал словарь только с теми правилами, что Вы перечислили. Может быть, дистрибутив был скачен из кэша Вашего браузера или из кэша прокси-сервера; проверьте, пожалуйста, номер версии в окне "О программе".
Или же в настройках "Балаболки" выбран "стандартный" метода, а не "быстрый". Кстати, на примере использования "стандартного" метода видно, что приведенные Вами примеры правил не так однозначны; именно от использования такого рода правил я стараюсь отговорить пользователей.
Результат применения "стандартного" метода: - Код:
-
раз два три четыре пять вышел Лексус погулять Не стрелять!три И наступила тишина.раз. пять.раз..четыре (Я не мог не обратить внимание на то, что Вы на редкость профессионально анализируете функциональные возможности программ "Демагог" и "Балаболка", а также алгоритмы, которые в них используются. Либо Вы программист с большим опытом, либо Вы являетесь автором программы "Демагог"...) |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Пт Июл 02 2010, 19:30 | Пт Июл 02 2010, 19:30 | |
| Флегонт безусловно талантлив. Криптография, кодирование, программирование, высокий поэтический стиль. Все это, и не только уживается под маской одного человека. Как его ФБР проглядело? Видать еще один русский шпиён. Нужно стукнуть Мне нравится профессионализм в его суждениях.
Насчет программы: Очень огорчает, перестала читать смайлики. Были занесены в словарь. Не совсем корректно добавлять перед ними звездочки. Что в плюсе? Возможность пользоваться звездочкой, как подстановочным символом для слов. Наверное я слишком консервативен, но для этого нужно очень хорошо знать язык, чтобы безошибочно ею пользоваться. По поводу скорости, так и ранее "быстрый" способ в балаболке работал с приемлемой для чтения в реале скоростью. Насчет последующей обработки словосочетаний, не проверял как это работало ранее в балаболке, просто доверился словам автора, которые косвенно указывали на дальнейшую обработку. Пока для себя не решил, переходить или нет на новую версию. Старый "быстрый" метод меня устраивает и пока нравится больше. Я не вижу в нем ограничений, появившихся в последних версиях. Конечно, некоторые из них можно обойти при помощи Ini словаря, но это будет больше походить на костыли. Программа должна иметь возможность правильно озвучивать любые тексты, в том числе и программы на Си. Может быть, если это не очень противоречит стратегии развития программы, дать выбор пользователю из двух вариантов "быстрых" методов. Как сейчас существует стандартный, быстрый, добавить быстрый классический. И дальше работать по их сближению, соединяя лучшие стороны воедино. |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| | | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Пт Июл 02 2010, 20:30 | Пт Июл 02 2010, 20:30 | |
| Нобелевку как получим - пропьем всем форумом... за развитие речевых технологий и (обязательно!)возвращение буквы Ё
Теперь конкретно: какие смайлики не читаются? =улыбка =усмешка =грусть в последней версии балаболки в быстром методе читаются на ура а в демагоге стали нормально читаться с недавних минут...
Разумеецца, есть комбинации символов которые быстрый метод не очень хорошо понимает, грустить не надо, лучше составить список таких "твердых орешков" - не для того, чтобы понукать им авторов, а типа информации к размышлению, коль будет время, под сенью дерев в летнем саду. Мало ли что, вдруг и упадет яблоко на голову... |
|
| | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| | | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Чт Июл 08 2010, 19:08 | Чт Июл 08 2010, 19:08 | |
| flegont Спасибо, постараюсь исправить эту ошибку в следующей версии программы. |
|
| | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Пн Июл 12 2010, 15:00 | Пн Июл 12 2010, 15:00 | |
| версия 465 текст: $14
правило: $$14=14 долларов
Текст меняется, но при быстром методе в статистике замен не отображается.
Evmir1 не утруждай себя нажатием минусов. Просмотр репутации отключен. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Пн Июл 12 2010, 18:29 | Пн Июл 12 2010, 18:29 | |
| Lexus Спасибо, там я не догадался проверить. (Жара, мозг плавится.) Поправлю в следующей версии программы. |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Пн Июл 12 2010, 20:03 | Пн Июл 12 2010, 20:03 | |
| - Lexus пишет:
- Evmir1 не утруждай себя нажатием минусов
Lexus как я уже писал Секуке - я этим не страдаю! Прошу прощения у модератора за оффтопик, но нужно было ответить. Прежде чем обвинять, нужно доказать. У нас не Средневековье! |
|
| | | sm151058 Новичок
Сообщений : 19
Репутация : 2
| sm151058 | :: Ср Сен 01 2010, 18:44 | Ср Сен 01 2010, 18:44 | |
| По поводу сносок в fb2. Вроде, раньше Балаболка их читала по мере появления (или я ошибаюсь?). Поставил новую версию - не читает. А хотелось бы слышать сразу.
|
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Ср Сен 01 2010, 19:29 | Ср Сен 01 2010, 19:29 | |
| Раньше использовался другой компонент для извлечения текста из fb2. Посмотрю, что можно сделать со сносками; спасибо. |
|
| | | vetandr Интересующийся
Сообщений : 7
Репутация : 2
| vetandr | :: Вт Сен 07 2010, 20:03 | Вт Сен 07 2010, 20:03 | |
| Всем привет! Столкнулся со следующей проблемой. Библиотека у меня в виде отдельных архивов *.rar. Если открыть Балаболкой такой архив и затем сохранить файл, то архив повреждается, и больше его открыть уже не удаётся. (WINRAR на него тоже потом ругается и открывать не хочет) Версия 1.33.0.471 |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Вт Сен 07 2010, 21:22 | Вт Сен 07 2010, 21:22 | |
| - vetandr пишет:
- Если открыть Балаболкой такой архив и затем сохранить файл, то архив повреждается, и больше его открыть уже не удаётся
У меня такой проблемы нет. Попробуйте нажимать не "Сохранить" а "Сохранить как". Удачи. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Вт Сен 07 2010, 22:11 | Вт Сен 07 2010, 22:11 | |
| - vetandr пишет:
- Если открыть Балаболкой такой архив и затем сохранить файл, то архив повреждается, и больше его открыть уже не удаётся.
Спасибо за сообщение об ошибке. Исправленная версия - на сайте "Балаболки". |
|
| | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Ср Сен 08 2010, 18:58 | Ср Сен 08 2010, 18:58 | |
| balabolka Печально, но новый метод применения правил на основе регулярных выражений содержит критическую ошибку, описанную Вами же в ветке Демагога. Это безусловная ошибка противоречит логике регулярных выражений, сужает возможности правил и допустима лишь на этапе тестирования программы. Жаль, что Вы не даете пользователю возможности выбора, безусловно заменив компонент применения правил. Шаг вперед и два шага назад.
|
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Чт Сен 09 2010, 02:42 | Чт Сен 09 2010, 02:42 | |
| Lexus Если так необходима поддержка обоих вариантов обработки регулярных выражений, можно добавить такой "переключатель" в программу; сделаю в следующей версии. Но я бы рекомендовал подумать об отказе от использования VBScript.
Описанная мной "ошибка" не столько "критическая", сколько неприятная. Ее вполне можно обойти, видоизменив правила. |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Чт Сен 09 2010, 08:53 | Чт Сен 09 2010, 08:53 | |
| В кратком хелпе к TRegExpr есть упоминание, что начиная с версии v.0.929 для болшей схожести с Perl для указания значения подвыражений используется '$' и допускаются n > 9.
"...Если Вам необходим просто символ '$' предваряйте его обратной косой чертой. Если Вам необходимо сразу после '$n' поместить цифру, заключайте n в фигурные скобки '{}'. Например: 'a$12bc' -> 'a<Match[12]>bc', 'a${1}2bc' -> 'a<Match[1]>2bc'. ..."
Т.е. в VBscript $10 понимается, как значение подвыражения №1 и символ 0. А в Perl это значение подвыражения №10.
Я также обратил внимание, что словарь СИ...ini содержит ошибки вида: "после XXX" --> "после две тысячи десятого" вместо "после тридцатого" Эти ошибки наблюдаются как под VBscript, так и под RegExpr для римских чисел, кратных 10.
Правила, содержащие фрагменты вида "$10" верно отрабатывали под VBscript: "после XXV" --> "после двадцать пЯтого" и ошибочно под TRegExpr: "после пЯтого" Но, если завершающий 0 убрать, вот так: "$1", то сохранялась правильная работа под VBScript и восстанавливалась правильная работа под TRegExpr!
Впрочем, в силу сложности этого (весьма кстати полезного) словаря, правильно "отрихтовать" его сможет, наверное только сам его создатель
|
|
| | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Чт Сен 09 2010, 11:02 | Чт Сен 09 2010, 11:02 | |
| Я думаю, что при наличии исходников, возможно подправить компонент, со временем убрав критические несоответствия. А пока, хорошо бы иметь возможность использовать особенности, предоставляемые vbscript, соответствующие стандрту языка perl. Вспоминаю эпопею с переходом на новый быстрый метод применения правил, когда приходилось откатываться шесть раз на стабильную версию программы. А ведь можно было просто переключить вариант применения правил до выхода откорректированной версии. Помимо описанных несоответсвий хочу обратить внимание на невозможность применения следующей группы правил:
(\b)(\d*)([02-9])1-ю(\b) --> $1$2$30 Первую$4
должно получиться 20 Первую с новым компонентом имеем 2 Первую
Не будучи спецом по дельфи, мне думается,что все-же возможно видоизменить компонент и проводить проверку на наличеие в левой части правила аргумента, соответствующего $30 и при его отсутствии выполнять подстановку $3 переменной. |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Чт Сен 09 2010, 14:24 | Чт Сен 09 2010, 14:24 | |
| Чем дальше в лес, тем больше шишки. A{n} в левой части правила означает А повторенное n раз. Примениение {} в правой части правила - костыль, не вписывающийся в общий стандарт. Может и можно его использовать, но это ж сколько словарей наплодится с таким синтаксисом под две программы. А современные движки имеют тенденцию к внедрению правил на основе RE в свои внутренние словари. Есть и будут созданы другие программы с RE правилами. Стратегически и концептуально это неверно. Я поддерживаю идею оставить в балаболке возможность использовать вариант vbscript правил (вместе с новым методом, дав пользователю выбор). Это нужно еще и для выявления различий в методах применения словарей. И я все-же надеюсь, что со временем появится возможность доработать компонент или найти другой, соответствующий PCRE. Как вариант могу предложить использовать в балаболке скрытый препроцессор самих правил на основе RE. Т.е перед примением словарей, обработать левую часть правил на основе RE (черновой набросок): [а-яё]\b --> [а-яё][\s\?\!\.\,\:\;"] \b[а-яё] --> [\s\?\!\.\,\:\;"][а-яё] Результат будет аналогичен. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Чт Сен 09 2010, 15:18 | Чт Сен 09 2010, 15:18 | |
| Если двузначные числа для обозначения подвыражений стали такой проблемой, можно вернуться назад, к числам < 10. Я сомневаюсь, что кому-то из пользователей TTS программ реально потребуется более девяти замен в одном правиле.
С наименьшими потерями текст программного модуля можно модифицировать таким образом. В функции ParseVarName заменить этот кусок текста:
- Код:
-
while (p < TemplateEnd) and {$IFDEF UniCode} //###0.935 (ord (p^) < 256) and (char (p^) in Digits) {$ELSE} (p^ in Digits) {$ENDIF} do begin Result := Result * 10 + (ord (p^) - ord ('0')); //###0.939 inc (p); end; на этот:
- Код:
-
if (p < TemplateEnd) and {$IFDEF UniCode} //###0.935 (ord (p^) < 256) and (char (p^) in Digits) {$ELSE} (p^ in Digits) {$ENDIF} then begin Result := ord (p^) - ord ('0'); //###0.939 inc (p); end; То есть, перебираем не все цифры после символа $, а только одну. После такой модификации запись $10 будет всегда трактоваться как '$1 и ноль'; и это не скажется на скорости работы компонента. |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Чт Сен 09 2010, 17:17 | Чт Сен 09 2010, 17:17 | |
| Кстати, в компоненте TRegExpr количество подвыражений вообще не может быть больше, чем 15 (константа NSUBEXP).
Если количество подвыражений равно 10, то мы все равно оказываемся в ситуации неопределенности: в этом случае $10 может обозначить как $10, так и $1 и ноль. То есть, идеального решения не существует - даже проверка количества подвыражений не даст абсолютной уверенности.
Я решил использовать такой код вместо вышеуказанного "куска":
- Код:
-
begin if Delimited then begin while (p < TemplateEnd) and {$IFDEF UniCode} //###0.935 (ord (p^) < 256) and (char (p^) in Digits) {$ELSE} (p^ in Digits) {$ENDIF} do begin Result := Result * 10 + (ord (p^) - ord ('0')); //###0.939 inc (p); end; end else begin if (p < TemplateEnd) and {$IFDEF UniCode} //###0.935 (ord (p^) < 256) and (char (p^) in Digits) {$ELSE} (p^ in Digits) {$ENDIF} then begin Result := ord (p^) - ord ('0'); //###0.939 inc (p); end; end; end; В этом случае программа будет считать легитимными такие способы записи: $1, $2, ..., $9, ${10}, ${11} и т.д. Случаи, когда используются десять подвыражений, крайне редки (сейчас в INI-словарях таких нет), так что можно использовать в таких правилах фигурные скобки (или вообще не составлять правила с таким большим количеством подвыражений - это тоже способ обеспечить совместимость словарей). |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Чт Сен 09 2010, 18:43 | Чт Сен 09 2010, 18:43 | |
| ЗЫ. Соврал. VBScript работает правильно только для исходного варианта правила с $10. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Вс Сен 19 2010, 22:46 | Вс Сен 19 2010, 22:46 | |
| В новой версии программы добавлена настройка Применять правила к большим по размеру частям текста (окно "Настройки", закладка "Правила"). Эта опция будет использоваться лишь в случае обработки текстов при помощи правил (например, при использовании пункта главного меню "Показать измененный текст"). Если опция включена, то это позволит:
- применять правила из INI-словарей быстрее;
- применять правила, "охватывающие" несколько абзацев.
Данная настройка не оказывает влияния на процесс чтения вслух или на сохранение аудиофайла. |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Пн Сен 20 2010, 10:14 | Пн Сен 20 2010, 10:14 | |
| Добавлена поддержка аудиофайлов формата MPEG-4 (MP4, M4A, M4B). Отличная новость! Щиро дякую. |
|
| | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Пн Сен 20 2010, 13:33 | Пн Сен 20 2010, 13:33 | |
| balabolka - Цитата :
- В новой версии программы добавлена настройка Применять правила к большим по размеру частям текста (окно "Настройки", закладка "Правила"). Эта опция будет использоваться лишь в случае обработки текстов при помощи правил (например, при использовании пункта главного меню "Показать измененный текст"). Если опция включена, то это позволит:
Если я правильно понял, это может привести к серьезной путанице, поскольку окошки используется и для проверки, какие правила применяются при чтении или записи для коррекции ошибок словаря и для проверки правильности работы программы. А с включенной опцией показываться будет одно, а выполняться другое. Правильнее разделить новую опцию и пункты меню "измененный текст" и "примененные правила". Может ввести для нее, какой-нибудь другой способ вызова? |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Пн Сен 20 2010, 22:48 | Пн Сен 20 2010, 22:48 | |
| Lexus Простите, но "путаницу" создал не я, а те российские пользователи, которые почему-то решили использовать мою программу не для работы с компьютерными голосами, а для обработки текстов при помощи списков правил. Опция, добавленная в последней версии программы, - это максимум того, на что я готов пойти, чтобы помочь таким пользователям.
Суть дилеммы, которую Вы описали, мне понятна, но делать что-либо для ее разрешения не стану. Таким пользователям остается лишь отказаться от использования новой опции (по умолчанию опция отключена, "галочка" в этом пункте не стоит).
-----
В очередной раз повторяю свою рекомендацию не добавлять в словари правила, затрагивающие более одного абзаца или более одного предложения. ВСЕГДА существует вероятность, что такие правила не сработают: какой бы величины не были "куски" текста, которыми оперирует программа, - большие или маленькие, - между ними всегда будут "стыки". |
|
| | | evilone_ Участник «online словари»
Сообщений : 859
Репутация : 317
| evilone_ | :: Пн Окт 04 2010, 20:28 | Пн Окт 04 2010, 20:28 | |
| балаболка 478 с включенной опцией "Применять правила к большим частям текста" при нажатии на "Показать измененный текст" зависает через раз (подключено два словаря этот и этот используется стандартный метод замен для dic и PCRE для ini) сначала что-то происходит но под самый конец просто перестает реагировать, индикатор замирает и все, приходится удалять через диспетчер задач и еще почему-то в ини-словаре, который подключен, при редактировании через балаболку начали удаляться комментарии и разрывы строк, это так задумано? можно ли не удалять комментарии и вообще сохранять форматирование ини-словаря? |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Пн Окт 04 2010, 22:00 | Пн Окт 04 2010, 22:00 | |
| evilone_ Скачал словари, попробовал применить к нескольким текстам; вот это правило из INI-словаря отправило компонент для обработки регулярных выражений на "бесконечный" цикл: - Код:
-
(\n|\r|\t|\.|\,|\:|\;|\-|\!|\?|"|\»|\)|\]|\}|\s)+(слово)+\s+(было)+\s=$1$2` $3 Это правило располагается почти в конце списка. Мне сложно сказать, что не так с этим правилом или с его обработчиком; надеюсь на помощь специалистов в регулярных выражениях.
С другими правилами проблем не возникло.
- evilone_ пишет:
- и еще почему-то в ини-словаре, который подключен, при редактировании через балаболку начали удаляться комментарии и разрывы строк, это так задумано? можно ли не удалять комментарии и вообще сохранять форматирование ини-словаря?
Не понял, о чем именно идет речь; поясните, пожалуйста.
Исторически так сложилось, что в редакторе словарей я не показываю те первые строки, которые представляют из себя комментарии ("шапку" словаря). Так попросили сделать иностранцы для первой версии "Балаболки", у которых были уже готовые, собственные INI-словари; мне это показалось логичным, и я согласился. В случае с DIC-словарями поступил точно так же.
Но "шапка" никуда не девается - при сохранении словаря на диске, она добавляется в файл. Открыл Ваш словарь в программе, сохранил - получился такой же текстовый файл, как и был прежде. |
|
| | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Пн Окт 04 2010, 22:16 | Пн Окт 04 2010, 22:16 | |
| Еще в прошлой версии тоже заметил, если в словаре присутствовали пустые строки, после сохранения через редактор словаря они исчезали. Не помню только в ini или в dic тоже. Наверное об этом шла речь. Я тоже использовал пустые строки для разделения блоков. Хорошо бы их оставить(сохранить форматирование). |
|
| | | evilone_ Участник «online словари»
Сообщений : 859
Репутация : 317
| | | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Вт Окт 05 2010, 01:36 | Вт Окт 05 2010, 01:36 | |
| - evilone_ пишет:
- в демагоге такой проблемы нет и правило как-то проглатывается
Вы ошибаетесь, программа "Демагог" зависает (уходит на бесконечный цикл) в тех же местах текста и на том же самом правиле. Не вводите пользователей в заблуждение.
Я уже написал, что мне сложно разобраться, в чем проблема с этим правилом и почему обработчик зацикливается, когда применяет регулярное выражение. Попытаюсь переадресовать вопрос разработчикам компонента, но маловероятно, что это даст результат. Может быть, автор правила может объяснить, в чем тут дело?
----
Редактор словарей менять не стану, так что пустые строки и комментарии в середине списка будут удаляться. Если форматирование принципиально для какого-либо конкретного словаря - используйте обычный текстовый редактор ("Блокнот", например). |
|
| | | Lexus Эксперт
Сообщений : 408
Репутация : 32
| Lexus | :: Вт Окт 05 2010, 09:36 | Вт Окт 05 2010, 09:36 | |
| - Код:
-
комментарии в середине списка будут удаляться Это ограничивает возможности по отладке словарей. Особенно ini. Раньше можно было закомментировать правило и посмотреть, как это влияет на обработку. Сейчас этого, к сожалению не будет. Может использовать для отключения правил, что- нибудь другое? |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Вт Окт 05 2010, 13:35 | Вт Окт 05 2010, 13:35 | |
| - evilone_ пишет:
- балаболка 478 с включенной опцией "Применять правила к большим частям текста" при нажатии на "Показать измененный текст" зависает через раз
Проблема в больших текстах. При обработке corrector.ini, и Балаболка и Демагог зависают! Причем неважно есть ли проблемная строка, или нет. Я пол ночи мучил док. на 10,28 МБ. – такой объём обработать не хватит никакого терпения. Делил текст на две и четыре части – не помогло. В конце концов, я разделил Балаболкой док. по 1 МБ. и всё получилось довольно быстро. Статистика замен, Быстрый метод; Демагог: # Tекст "Сборник рассказов1_1.txt", измененный по "СИ (Вадим Романько).ini" ( 00:02:0) # Tекст "Сборник рассказов1_1.txt", измененный по "omograph.dic" ( 00:03:1) # Tекст "Сборник рассказов1_1.txt", измененный по "corector.ini"( 00:03:5) Балаболка; СИ (Вадим Романько).ini=3 мин. 41,13 сек. omograph.dic=2 мин. 40,04 сек. corrector.ini=4 мин. 24,50 сек.
Считаю, что размер текста в 1 МБ. оптимален на данный момент. По крайней мере для меня. |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Вт Окт 05 2010, 17:37 | Вт Окт 05 2010, 17:37 | |
| Источник: Дж. Фридл "Регулярные выражения". http://wmate.ru/ebooks/book67.html
Есть 2 алгоритма обработки РВ. ДКА - детерминипрованный конечный автомат. НКА - недетерминированный конечный автомат.
Все современные системы обработки РВ используют НКА, хотя ДКА в тысячи раз более быстрый и абсолютно надежный. Но он не позволяет работать с подвыражениями и вообще со сложныи синтаксисом.
НКА - похож на блуждание в лабиринте. Пошел направо - тупик. Вернулся. Пошел налево - развилка, поошел налево - тупик, пошел направо - тупик - вернулся на пред-предыдущую развилку и т.д. НАИХУДШИЙ случай - это, когда количество проверок становится равным 2 в степени N. где N - число символов в тексте. Если имеем текст в 10000 символов (это меньше 10 кб) то проверок будет 2 в степени 10 тысяч. Время работы алгоритма увеличивается до миллиардов (и много более!) лет. Это называется ЭКСПОНЕНЦИАЛЬНЫЙ ПОИСК. Многие системы отслеживают факт попадания на "дорогу в ад", подсчитывая и ограничивая число проверок. Тогда на текстах бОльшего размера даное РВ выдает Ложь, а на меньших - Истину. Другие системы ограничиваю отводимую память и банально выдают "Stack overflow".
В книге приводятся примеры фатальных РВ и даются советы (эмпирические) как НЕ написать что-либо подобное... Алгоритм НКА крайне чувствителен и к ФОРМЕ записи РВ. Например x+ и xx* - это одно и то же, но 2-е РВ выполняется быстрее.
Естественно, что А.Сорокин, создавая свой компонент не вдавался, да наверное, и не знал многих подробностей. А у меня после беглого просмотра монографии Фридла совершенно отпало желание ваять свой собственный компонент для работы с РВ. Так что - что имеем, с тем и работаем.
Но тем, кто занимается составлением ИНИ словарей - эту книжку настоятельно рекомендую. Чтоб жизь медом не казалась. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Вт Окт 05 2010, 18:19 | Вт Окт 05 2010, 18:19 | |
| По идее, размер текстового файла не должен существенно влиять на применение правил: программы всё равно применяют текст "кусками". Так что неважно, какая длина у текста - программа просто поделит его на 10, 100 или 1000 "кусков".
Но с этим правилом: - Код:
-
(\n|\r|\t|\.|\,|\:|\;|\-|\!|\?|"|\»|\)|\]|\}|\s)+(слово)+\s+(было)+\s=$1$2` $3 вот какая штука. Даже если оно не применяется, его проверка очень сильно тормозит работу программы. То есть, программа не "зависает" и не уходит на бесконечный цикл (тут я был неправ) - продолжительность проверки правила зависит от количества строк в "куске" текста.
Вот пример текста: - Код:
-
Слово Слово Слово
Правило будет проверено на нем мгновенно (но ни разу не применено). Увеличим количество пустых строк: - Код:
-
Слово Слово Слово
Проверка правила заняла уже более 2 секунд. Вставляем еще пару пустых строк - 36 секунд. Дальше рекомендую не продолжать, программу придется "прибивать" в списке процессов.
Кто автор этого "убийственного" правила? Он тестировал его на своем компьютере? |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Вт Окт 05 2010, 20:35 | Вт Окт 05 2010, 20:35 | |
| ЗЫ. А следующий за приведенной цитатой раздел в книжке называется "Хронометраж". Где рассказано, как выполнять эту традиционную для составителей регулярных выражений работу. А то без оной последствия могут быть тяжкими... |
|
| | | evilone_ Участник «online словари»
Сообщений : 859
Репутация : 317
| evilone_ | :: Вт Окт 05 2010, 21:22 | Вт Окт 05 2010, 21:22 | |
| - balabolka пишет:
- Кто автор этого "убийственного" правила? Он тестировал его на своем компьютере?
ну автор правила ломающего программу это снова я, как всегда , но до появления опции "Применять правила к большим частям текста" было все более менее нормально также интересно что у меня почему-то только в связке dic+ini получается зацикливание а просто ini с этим правилом нормально меняет текст в общем тайна покрытая мраком, а правило - убийца |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Вт Окт 05 2010, 22:03 | Вт Окт 05 2010, 22:03 | |
| - evilone_ пишет:
- до появления опции "Применять правила к большим частям текста" было все более менее нормально
Без этой опции, Балаболка обрабатывала текст очень медленно. Тот же мегабайтный текст - corector.ini=11 мин. 32,19 сек. |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Вт Окт 05 2010, 22:48 | Вт Окт 05 2010, 22:48 | |
| Хм... Наверно, и от текста зависит. Пока что убить Демагога этим правилом не удалось. Текст в 1.4 Мб. Вот фрагмент статистики.
# Tекст "В.Ли_Гроза_над_Миром.txt", измененный по "corector.ini+omograph.dic" ( 0:02:30)
Венедикт Ли arnys@mail. ru n 1 d 3@yahoo. com Гроза над Миром Чтобы познать то, чего вы не знаете, Вам нужно идти по дороге невежества. Чтобы достичь того, чего у вас нет, Вам нужно идти по дороге отречения. Чтобы стать не тем, кем вы были, Вам нужно идти по пути, на котором вас нет. Т. Эллиот ...
===========================================
А вот еще... 2.5 Мб
# Tекст "MONTEC.txt", измененный по "corector.ini+omograph.dic" ( 0:04:08)
Аликсандр Дюма Граф Монте-Кристо изд. ХудЛит, тысяча девятьсот семьдесят седьмой год. OCR Палек, тысяча девятьсот девяносто восьмой год. ... |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Ср Окт 06 2010, 00:26 | Ср Окт 06 2010, 00:26 | |
| - flegont пишет:
- Пока что убить Демагога этим правилом не удалось
С чего Вы это взяли?! Если в наших программах используется один и тот же компонент - почему он должен по-разному обрабатывать одно и то же правило?!
В своем предыдущем сообщении я привел образец текста, где проявляются "тормоза" RegExpr. Проверил его в Вашей и своей программах - результат одинаково неутешительный: чем больше пустых строк, тем больше тратится времени на применение правила. 2 секунды, 10, 30 секунд, больше минуты и т.д. - никаких чудес.
- Цитата :
- # Tекст "", измененный по "corector.ini" ( 0:02:28)
Слово слово слово
|
|
| | | | Балаболка |
---|
| |