|
| |
Автор | Сообщение | Балаболка |
---|
balabolka V.I.P.
Сообщений : 1228
| balabolka | :: Ср Окт 06 2010, 00:26 | Ср Окт 06 2010, 00:26 | |
| - flegont пишет:
- Пока что убить Демагога этим правилом не удалось
С чего Вы это взяли?! Если в наших программах используется один и тот же компонент - почему он должен по-разному обрабатывать одно и то же правило?!
В своем предыдущем сообщении я привел образец текста, где проявляются "тормоза" RegExpr. Проверил его в Вашей и своей программах - результат одинаково неутешительный: чем больше пустых строк, тем больше тратится времени на применение правила. 2 секунды, 10, 30 секунд, больше минуты и т.д. - никаких чудес.
- Цитата :
- # Tекст "", измененный по "corector.ini" ( 0:02:28)
Слово слово слово
|
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Ср Окт 06 2010, 00:46 | Ср Окт 06 2010, 00:46 | |
| - evmir1 пишет:
- Без этой опции, Балаболка обрабатывала текст очень медленно. Тот же мегабайтный текст - corector.ini=11 мин. 32,19 сек.
Это потому что опция "Измененный текст" предназначалась для просмотра реального применения правил во время чтения вслух. Поэтому и текст делится на части небольшого размера; причем программа старается поделить текст "интеллектуально", то есть чтобы части одного предложения не оказались разорванными (знак пунктуации "точка" - это еще не признак конца предложения). Для применения регулярных выражений такое деление текста на маленькие порции "убийственно", выигрыш в скорости достигается лишь на больших по размеру текста.
Также, моя программа предоставляет возможность пользователю прервать процесс нажатием кнопки "Стоп"; на обеспечении такой интерактивности теряется время.
Кто же знал, что русскоязычные пользователи решат использовать эту функцию программы не по прямому назначению, а как инструмент для обработки текстов. Поэтому меня немного напрягают эти замеры времени - если нужен обработчик текстов, нужно было создавать другую утилиту, заточенную только под это.
Моя идея заключалась в том, что текст на экране должен выглядеть нормально, а применение правил должно быть скрыто от глаз пользователя. Сейчас же происходит по-другому: текст сначала модифицируется правилами, а затем читается/пишется в файл. Что ж, если выбран такой способ использования программы - используйте опцию "Применять правила к большим частям текста". |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| | | | muk79 Участник «online словари»
Сообщений : 102
Репутация : 29
| muk79 | :: Ср Окт 06 2010, 18:45 | Ср Окт 06 2010, 18:45 | |
| - flegont пишет:
- По сути - это то же самое, но совсем другое дело! Товарищи, шире пользуемся метасимволом \b - он теперь работает с русскими буквами!
С таким видом правил (формой записи) придется попрощаться с поддержкой VBScript словарем а значит теперь уже не получится пользоваться одновременно например Си и корректором, так что где-то выиграли а где-то проиграли, хотя если не на лету то нормально.
- balabolka пишет:
- Кто же знал, что русскоязычные пользователи решат использовать эту функцию программы не по прямому назначению, а как инструмент для обработки текстов.
Кто же знал что у русскоязычных пользователей будут такие хорошие русскоязычные голосовые движки? Обработка текста нужна была всегда, еще со времен говорилки было ясно что от нее никуда не деться и отмахиваться от нее не стоит. Попробуйте прочесть любой текст без словаря и со словарем и почувствуйте, что называется, разницу, а просто записать текстовый файл в аудио можно и в любой другой программе их и так хватает. |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Ср Окт 06 2010, 19:07 | Ср Окт 06 2010, 19:07 | |
| - balabolka пишет:
- Моя идея заключалась в том, что текст на экране должен выглядеть нормально, а применение правил должно быть скрыто от глаз пользователя. Сейчас же происходит по-другому: текст сначала модифицируется правилами, а затем читается/пишется в файл. Что ж, если выбран такой способ использования программы - используйте опцию "Применять правила к большим частям текста".
Я Вас понимаю, и как раз пытался поначалу слушать без предобработки с подключёнными словарями. Но у Алёны много внутренних ошибок, напр. глазА нАчал читает как глАза нАчал. И без предобработки, мне надо было бы сначала выделить глаза начал, выбрать «Словарные замены», убедиться, что такая замена действительно существует, а значит проблема в лексиконе движка. Всё это долго, и это бесит! Беда с этими омографами. Надо академикам их взять и отменить. Ведь нужно быть последовательными, и если эти филолухи «убили» букву Ё, то пусть и омографы уничтожат. |
|
| | | evilone_ Участник «online словари»
Сообщений : 859
Репутация : 317
| evilone_ | :: Пт Ноя 05 2010, 21:32 | Пт Ноя 05 2010, 21:32 | |
| подскажите а как в программе правильно записать такое правило чтобы оно как положено обрабатывалось? - Код:
-
\s+=\n |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Пн Дек 13 2010, 14:32 | Пн Дек 13 2010, 14:32 | |
| В версии v2.0.0.486 радует поддержка Юникода! Иногда в текстах бывает много странных значков. |
|
| | | ptoton Бывалый
Сообщений : 108
Репутация : 25
| ptoton | :: Пн Дек 13 2010, 21:51 | Пн Дек 13 2010, 21:51 | |
| в 486 версии нет поддержки юникода, или я чего-то не понял. Немецкие буковки с умляутами не отображаются... |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Вт Дек 14 2010, 00:24 | Вт Дек 14 2010, 00:24 | |
| ptoton Может быть, в окне "Шрифт и цвета" Вам следует выбрать другой шрифт, с поддержкой Юникода (шрифт TrueType). Например, Microsoft Sans Serif или Arial. |
|
| | | ptoton Бывалый
Сообщений : 108
Репутация : 25
| ptoton | :: Вт Дек 14 2010, 06:50 | Вт Дек 14 2010, 06:50 | |
| MS Sans Serif и выбран |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Вт Дек 14 2010, 10:30 | Вт Дек 14 2010, 10:30 | |
| MS Sans Serif и Microsoft Sans Serif - это два разных шрифта. MS Sans Serif не поддерживает Юникод. |
|
| | | ptoton Бывалый
Сообщений : 108
Репутация : 25
| ptoton | :: Вт Дек 14 2010, 11:37 | Вт Дек 14 2010, 11:37 | |
| Ура, заработало. Переключил на Arial. Спасибо. |
|
| | | sokir Новичок
Сообщений : 13
Репутация : 0
| sokir | :: Чт Янв 13 2011, 17:13 | Чт Янв 13 2011, 17:13 | |
| У меня в списке SAPI 5 только Microsoft Sam. Как добавить ещё голоса? Хотя бы Acapela-Group Alyona (Алёна). Я скачивал Лексикон для словаря замен (файл omograph.dic), копировал E:\Documents and Settings\------\Мои документы\Balabolka\ - толку никакого. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Чт Янв 13 2011, 17:51 | Чт Янв 13 2011, 17:51 | |
| Ссылки на дистрибутивы голосов можно найти в соседних ветках этого форума. Скачайте их и установите на свой компьютер; после этого имена речевых движков появятся в списке голосов "Балаболки". |
|
| | | sokir Новичок
Сообщений : 13
Репутация : 0
| sokir | :: Сб Янв 15 2011, 22:04 | Сб Янв 15 2011, 22:04 | |
| Так а что скачивать? Основные словари (расширение dic)?
Там написано: Устанавливаем «балаболка», скачиваем словарь замен и словарь коррекции текста - копируем их в папку «мои документы\balabolka».
Запускаем "балаболка" подключаем словари те, что мы скопировали в папку мои документы\balabolka (omograph.dic+corrector.ini), если нужно и остальные словари. Программа готова к чтению.
После этого справой стророны у меня появилось omograph.dic, вообще исчезли SAPI4 и ничего не добавилось в SAPI5.
|
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Сб Янв 15 2011, 23:00 | Сб Янв 15 2011, 23:00 | |
| - sokir пишет:
- Так а что скачивать?
Вы скачали словари для коррекции произношения, а не речевые движки. Ссылки на дистрибутивы голосов находятся в других ветках форума: Алёна Николай Ольга Катерина
Ссылки на русские голоса можно еще найти здесь: www.mifoteka.ru |
|
| | | cumAr Наблюдатель
Сообщений : 4
Репутация : 0
| cumAr | :: Пн Фев 21 2011, 11:38 | Пн Фев 21 2011, 11:38 | |
| Программа слетает с ошибкой на этом фрагменте текста -
Значит, он все-таки соизволил ее заметить. - Ну, на случай непредвиденного поворота событий трое дендарийцев знают, кто я на самом деле. Командор Куин, присутствовавшая при зарождении этого мероприятия, относится к их числу.
а именно на " событий трое" проблему решил вставкой запятой между словами . это только у меня так или у всех? http://img-fotki.yandex.ru/get/4908/cumar2.0/0_4b0fc_2153844d_XL.jpg |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Пн Фев 21 2011, 13:04 | Пн Фев 21 2011, 13:04 | |
| cumAr Надпись "Microsoft Visual C++" в заголовке окна с сообщением об ошибке говорит о том, что произошел сбой внутри голоса "Алёна", а не внутри программы "Балаболка" (моя программа написана на Delphi, а не на C++).
На моей машине "Алёна" читает Ваш пример текста без ошибок; но для точного воспроизведения ситуации необходимо поставить те же словари, лексиконы, что и у Вас, выставить те же настройки голоса и программы и т.д. Так что, повторить точно такую же ситуацию будет непросто. |
|
| | | cumAr Наблюдатель
Сообщений : 4
Репутация : 0
| cumAr | :: Пн Фев 21 2011, 17:17 | Пн Фев 21 2011, 17:17 | |
| ясно ,спасибо за разъяснение |
|
| | | cumAr Наблюдатель
Сообщений : 4
Репутация : 0
| cumAr | :: Пт Фев 25 2011, 19:16 | Пт Фев 25 2011, 19:16 | |
| как перенастроить временную папку с диска C допустим в Е ? |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Пт Фев 25 2011, 22:53 | Пт Фев 25 2011, 22:53 | |
| - cumAr пишет:
- как перенастроить временную папку с диска C допустим в Е ?
Если речь идет о временной папке Windows, то это делается так: щелкаете правой кнопкой мыши на иконке "Мой компьютер" на рабочем столе; в появившемся меню выбираете пункт "Свойства"; в окне "Свойства" открываете закладку "Дополнительно"; нажимаете кнопку "Переменные среды". Пути к временным папкам хранятся в переменных TEMP и TMP. Меняете значения этих переменных и перезагружаете компьютер. |
|
| | | cumAr Наблюдатель
Сообщений : 4
Репутация : 0
| cumAr | :: Сб Фев 26 2011, 12:36 | Сб Фев 26 2011, 12:36 | |
| Видимо в самой программе такой функции нет . Может ,имеет смысл добавить ? Еще хочу заметить, что, если программа во время записи в аудиофайл вылетает ,то временные файлы не удаляются автоматически, а лежат мертвым грузом забивая память . Долго искал папку куда программа их складывает. Набралось 5 гигов . Или добавьте функцию "удалить временные файлы" с помощью которой программа удаляет все, что она создала во временной папке. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Сб Фев 26 2011, 14:18 | Сб Фев 26 2011, 14:18 | |
| cumAr Если программа работает нормально, то все создаваемые ею временные файлы в системной папке для временных файлов удаляются автоматически. Если программа "падает" и не может удалить временные файлы - это уже другой вопрос.
Насколько я помню из переписки с Вами, причина "падений" программы "Балаболка" была в неправильной работе компьютерного голоса. Мне бы не хотелось заранее готовиться к тому, что пользователь будет иметь дело с "глючным" голосом, из-за которого моя программа будет "зависать" или "вылетать". Поэтому сейчас не готов добавить такую опцию в "Балаболку"; но обещаю подумать.
Есть множество утилит для очистки операционной системы от "мусора"; в том числе удаляется содержимое папок для временных файлов. Если у Вас проблема с "глючным" компьютерным голосом, рекомендую установить такую программу (ведь и другие программные продукты, работающие с компьютерными голосами, также записывают файлы во временную папку и точно также могут "зависнуть" или "вылететь"; их временные файлы тоже необходимо будет удалить). |
|
| | | sokir Новичок
Сообщений : 13
Репутация : 0
| sokir | :: Пт Мар 18 2011, 21:32 | Пт Мар 18 2011, 21:32 | |
| Если программа читает такой текст: - Slim. - <voice required="Name=ScanSoft Katerina_Full_22kHz"><rate absspeed="7"><volume level="70">Стройный. - </volume></rate></voice> - Grace. - <voice required="Name=ScanSoft Katerina_Full_22kHz"><rate absspeed="7"><volume level="70">Грация - милость. - </volume></rate></voice> - Numerous. - <voice required="Name=ScanSoft Katerina_Full_22kHz"><rate absspeed="7"><volume level="70">Многочисленный. - </volume></rate></voice>
, то не делаются паузы после точки. Можно это как-то подправить? Стоит версия 2.2.0.496
И можно ли не выводить на экран то что в тегах?
И ещё, можно ли опустить вниз читаемый текст? В идеале ниже видимой области экрана, что бы не было соблазна его подсмотреть. |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Пт Мар 18 2011, 22:55 | Пт Мар 18 2011, 22:55 | |
| - sokir пишет:
- И ещё, можно ли опустить вниз читаемый текст? В идеале ниже видимой области экрана, что бы не было соблазна его подсмотреть.
Да, соблазн велИк. Но есть как минимум 2 способа не смотреть на текст; 1.) Свернуть Балаболку в трей или на панель задач. 2.) Воспользоваться красивым Хранителем экрана (НЕ от Windows), напр. от программы PerfectClock. https://redcdn.net/ihimizer/img199/6018/20100623224506.jpg
|
|
| | | sokir Новичок
Сообщений : 13
Репутация : 0
| sokir | :: Пт Мар 18 2011, 23:53 | Пт Мар 18 2011, 23:53 | |
| - evmir1 пишет:
- Да, соблазн велИк.
Но есть как минимум 2 способа не смотреть на текст; 1.) Свернуть Балаболку в трей или на панель задач. 2.) Воспользоваться красивым Хранителем экрана (НЕ от Windows), напр. от программы PerfectClock. Прежде чем такое писать хотя бы подумал, а не так лижбы тупо сообщение создать.
Слова, которые уже были озвучены надо видеть, по одной лишь озвучке их не выучить. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Сб Мар 19 2011, 01:04 | Сб Мар 19 2011, 01:04 | |
| sokir Посмотрю, что можно сделать с тем примером текста, что Вы привели. Сейчас программа, встречая теги XML, "перестраховывается" и захватывает "лишний" текст, чтобы быть уверенной, что каждому открывающему тегу начала будет соответствовать закрывающий тег. Попробую сделать так, чтобы программа более точно определяла конец предложения в таких случаях.
- sokir пишет:
- И можно ли не выводить на экран то что в тегах?
Нет, такая возможность в программе не предусмотрена (и вряд ли смогу и стану делать что-то подобное).
- sokir пишет:
- И ещё, можно ли опустить вниз читаемый текст? В идеале ниже видимой области экрана, что бы не было соблазна его подсмотреть.
Не совсем понял, что Вы имеете ввиду.
Можно, например, в настройках программы отключить слежение за читаемым текстом - тогда текст, произносимый компьютерным голосом, окажется за пределами видимой области окна программы. Пункт главного меню "Установки", закладка "Чтение", убрать "галочку" в пункте "Показывать текущее слово во время чтения вслух". |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Сб Мар 19 2011, 03:49 | Сб Мар 19 2011, 03:49 | |
| - sokir пишет:
- Слова, которые уже были озвучены надо видеть, по одной лишь озвучке их не выучить.
То надо видеть, то не надо - определитесь сначала, а потом уже будете мне указывать и тыкать! |
|
| | | sokir Новичок
Сообщений : 13
Репутация : 0
| sokir | :: Вс Мар 20 2011, 00:18 | Вс Мар 20 2011, 00:18 | |
|
- balabolka пишет:
- Не совсем понял, что Вы имеете ввиду.
Смысл в том, что мне сначала надо услышать текст и попытаться отгадать перевод. Если не получается, то подсмотреть. Но если, как сейчас, озвучиваемый текст виден посредине, то есть соблазн его подсмотреть на подсознательном уровне, а с подсознанием бесполезно бороться. Вот поэтому я и хочу озвучиваемый текст опустить ниже видимой области экрана, так чтобы самая нижняя видимая строка была последней озвученной.
Отключить слежение нельзя, т.к. текста много и я должен его видеть по ходу озвучки.
- balabolka пишет:
- Попробую сделать так, чтобы программа более точно определяла конец предложения в таких случаях.
Самое интересное - раньше паузы были. Потом установил ещё один голос и стали через раз, а немного погодя вообще исчезли. Может конечно и не из-за голоса. Без пауз плохо выученные слова бесполезно повторять - перегруз мозга. |
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Вс Мар 20 2011, 14:47 | Вс Мар 20 2011, 14:47 | |
| - sokir пишет:
- Вот поэтому я и хочу озвучиваемый текст опустить ниже видимой области экрана, так чтобы самая нижняя видимая строка была последней озвученной.
Теперь понятно, о чем идет речь; спасибо за разъяснения.
Я подумаю над таким вариантом слежения за текстом; но пока добавлять в программу не стану, это слишком специфическая опция.
- sokir пишет:
- Самое интересное - раньше паузы были. Потом установил ещё один голос и стали через раз, а немного погодя вообще исчезли
Это всё еще зависит и от текста: программа пытается точно определить конец предложения, а не просто поставить паузу после каждой точки в тексте. При этом также программа хочет быть уверенной, что не останется не закрытых тегов SAPI 5. В следующей версии постараюсь исправить ситуацию. |
|
| | | sokir Новичок
Сообщений : 13
Репутация : 0
| sokir | :: Пн Апр 04 2011, 21:06 | Пн Апр 04 2011, 21:06 | |
| Если сделать через Я_Билингва_SAPI5.rex, то паузы работают, но не работает громкость и скорость для англ. голоса, если настроить через файл: <eng>=<voice required="Name=Ryan22k"><rate absspeed="1"><volume level="70"></volume></rate></voice> срабатывает только имя голоса. Можно ли в это файле устанавливать громкость, скорость? |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Пн Апр 04 2011, 22:59 | Пн Апр 04 2011, 22:59 | |
| Кажется, надо написать что-то вот такое:
<eng>=<voice required="Name=Ryan22k"><rate absspeed="1"><volume level="70"> </eng>=</volume></rate></voice>
|
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| | | | sokir Новичок
Сообщений : 13
Репутация : 0
| sokir | :: Пн Апр 04 2011, 23:09 | Пн Апр 04 2011, 23:09 | |
| - evmir1 пишет:
- У читающего человека мозг мощнее всех компьютеров, программ, он корректирует ошибки за доли секунды.
Я учу англ. слова, занимаясь на орбитреке (полезное с полезным совмещаю), мне надо что бы всё было четко слышно под шум тренажера, причем англ. слова замедленные, а рус. побыстрее. Это не чтение на родном языке для удовольствия, поэтому мозгу и так будет чем заняться. Всё таки час чтения полу знакомых слов это и так нагрузка для мозга очень не малая и напрягаться ещё на что-то неприемлемо. |
|
| | | evmir_troll-hunter Admin
Сообщений : 616
Репутация : 208
| evmir_troll-hunter | :: Пн Апр 04 2011, 23:47 | Пн Апр 04 2011, 23:47 | |
| - sokir пишет:
- Я учу англ. слова, занимаясь на орбитреке (полезное с полезным совмещаю), мне надо что бы всё было четко слышно под шум тренажера, причем англ. слова замедленные, а рус. побыстрее.
Многие забывают, о качестве самих голосов, и предъявляют претензии авторам программ, просто передающих слова в буфер. Учить язык с помощью голосов Microsoft непрактично - нет эмоциональной выразительности и правильной интонации. Есть множество аудиокурсов англ. языка, начитанных великолепными голосами "живых" людей - дикторов радио и телевидения |
|
| | | sokir Новичок
Сообщений : 13
Репутация : 0
| sokir | :: Ср Апр 06 2011, 23:47 | Ср Апр 06 2011, 23:47 | |
| - flegont пишет:
- Кажется, надо написать что-то вот такое:
<eng>=<voice required="Name=Ryan22k"><rate absspeed="1"><volume level="70"> </eng>=</volume></rate></voice> Работает!
Осталось тока опустить озвучиваемый текст. Ну да ладно просто поверх балаболки буду ещё одно окно ставить. |
|
| | | Varnavara Наблюдатель
Сообщений : 2
Репутация : 0
| Varnavara | :: Вс Июл 03 2011, 23:14 | Вс Июл 03 2011, 23:14 | |
| balabolka, Объясните пожалуйста что мне нужно сделать для того, чтобы Николай не заменял перед прямой речью знак тире (-) на слово "пространство". Вот например, цитата:— А мы и соответствуем. Да, лейтенант? — Николай читает так: пространство А мы и соответствуем. Да, лейтенант? пространство. Это наверное связано со словарями? Наверное я что-то не так делаю. Подскажите пожалуйста какие по счету словари Николая надо скопировать в " Мои документы-Балаболка", а затем поставить галочки. С Аленой такой проблемы нет. Заранее благодарю за помощь. |
|
| | | Varnavara Наблюдатель
Сообщений : 2
Репутация : 0
| Varnavara | :: Вс Июл 03 2011, 23:53 | Вс Июл 03 2011, 23:53 | |
| Нашла ответ на свой вопрос в соседней теме. Попробую последовать рекомендациям по устранению данной проблемы. |
|
| | | Лёва V.I.P.
Сообщений : 134
Репутация : 173
| Лёва | :: Ср Июл 06 2011, 19:58 | Ср Июл 06 2011, 19:58 | |
| balabolka flegont Скажите пожалуйста, - почему надо разбивать текст на мелкие куски? Это связано с тем, что в реальном времени идёт обработка? Если не секрет, то (желательно на пальцах) объясните пожалуйста по какому принципу идёт взаимодействие текста и словарей? Со звёздочками всё понятно и с таблицами адресации, чтобы не весь словарь сканировать тоже понятно. Если по первой букве строить таблицу, от многословного правила пока абстрагируемся, то таблица достаточно маленькая получается, но с добавлением второй буквы - таблица растёт в квадрате, а если по трём ... Никто не пробовал двоичный поиск? (если это конечно применимо; если код буквы взять за индекс, -часть адреса и т.д.) Примерно так: строится таблица, причём автоматически т.е без словаря ,где ячейка памяти (пока пустая) содержит поле адресации начала перебора по букве - индекс. Второе поле конец перебора. Адреса туда записываются при одноразовом проходе словаря - инициализации и сортировки. Для сортировки словаря (по алфавиту, длине слова и количеству слов в правиле) вполне достаточно одного прохода. Первая буква (две три) слова и есть адрес в таблице где и читается адрес начала и следящая конец рассматриваемой области. далее двоичный поиск (больше-меньше, = сошлось).
|
|
| | | balabolka V.I.P.
Сообщений : 1228
Репутация : 986
| balabolka | :: Чт Июл 07 2011, 00:19 | Чт Июл 07 2011, 00:19 | |
| Лёва Текст надо разбивать на части потому, что буфер голоса, куда поступает текст, имеет ограничение на объем данных. У разных голосов по-разному: у старых голосов размер буфера был маленький, у современных он большой. Например, голоса eSpeak начинали сбоить, если на вход поступало более двух килобайт текста за один раз.
Также, если размер текста на входе велик (например, один мегабайт), голос может делать ощутимую паузу, пока сам осуществляет обработку данных ("разбирает" текста на слова, переводит слова в фонемы, ищет теги и т.п.). Для маленьких текстов эти паузы не так заметны.
Вторая причина деления текста на части - необходимость применения большого количества правил из пользовательских словарей. Если к тексту размером мегабайт применить сто тысяч правил - программа надолго "задумается" и перестанет реагировать на действия пользователя.
Есть и другие причины. Например, в "Балаболке" и других программах можно задать паузы между абзацами или предложениями. В таких случаях приходится сначала делить текст на мелкие части, а уже потом применять к ним правила (иначе какое-либо из правил может "затереть" конец предложения, и паузу уже некуда будет вставлять).
Поэтому программы "Балаболка" и "Демагог" обычно обрабатывают по одному абзацу за раз. Это разумный компромисс, учитывающий всё то, что я написал выше.
---
Я не до конца уверен, но хеш-таблица, которая используется в "быстром" методе, будет работать более эффективно, чем тот двоичный поиск, который Вы описали. Посмотрите, например, в Википедии информацию про хеш-таблицы. |
|
| | | Лёва V.I.P.
Сообщений : 134
Репутация : 173
| Лёва | :: Чт Июл 07 2011, 12:29 | Чт Июл 07 2011, 12:29 | |
| balabolka Весьма благодарен, за столь развёрнутый ответ! Просто я никак не мог связать разбиение текста с хеш-таблицей и поиском правил. Теперь понятно, что связи нет. Спасибо.
|
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Чт Июл 07 2011, 21:12 | Чт Июл 07 2011, 21:12 | |
| - Цитата :
- Поэтому программы "Балаболка" и "Демагог" обычно обрабатывают по одному абзацу за раз
Уточню по поводу "Демагога". Вот как прокомментирована в его исходном коде ф-ция Fragments():
Запомнить текст в TStringList фрагментами не менее заданного числа байт, с остановкой на первом абзаце (включительно!), выходящем за обозначенный предел. Если текст вообще не разделен на абзацы, то ищем строку, выходящую за предел.
Границами абзацев считаются (на равных правах) красная (т.е. с отступом) или вовсе пустая строка. Размер фрагмента можно регулировать в настройках, по умолчанию он равен 4096 символов - примерно книжная страница. С учетом вышесказанного - НЕ МЕНЕЕ книжной страницы. Такой размер читаемого за раз текста посилен практически любому движку.
P.S. С уверенностью подтверждаю мнение о бОльшей эффективности хеширования по сравнению с двоичным поиском - когда-то проверял сие экспериментально. Да, хеширование - более сложный прием, но очень, очень быстро работающий. По сути, поиска нет! Есть прямое обращение к хеш-таблице по уже известному (вычисленному в конкретный момент, для конкретного слова) адресу.
P.P.S. Почему в "Демагоге" быстрый метод работает еще и (примерно) в 2 раза быстрее чем в "Балаболке" - я не знаю. Возможно, причина в некоторых различиях в реализации данного алгоритма в обеих программах. |
|
| | | Лёва V.I.P.
Сообщений : 134
Репутация : 173
| Лёва | :: Чт Июл 07 2011, 22:23 | Чт Июл 07 2011, 22:23 | |
| flegont - Цитата :
- С уверенностью подтверждаю мнение о бОльшей эффективности хеширования по сравнению с двоичным поиском - когда-то проверял сие экспериментально.
Вот это и хотелось узнать, что бы не изобретать велосипед. Вот еще вопрос - как строится таблица для таких правил? * *тра та та=... Если их несколько сотен или тысяч Ведь звёздочка может содержать любой набор знаков кроме пробела?
flegont и balabolka - спасибо за ответы. P.S. - Цитата :
- Возможно, причина в некоторых различиях в реализации данного алгоритма в обеих программах
Такое впечатление, что различия кроются именно в нюансе обработки правил начинающихся со звёздочки. В остальных случаях, не вооружённым взглядом, разница минимальна, а может и совсем нет. |
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Чт Июл 07 2011, 23:05 | Чт Июл 07 2011, 23:05 | |
| Правило вида:
* *тра та та=пиф-паф
в хеш-таблице будет выглядеть, как:
*|* *тра та та=пиф-паф
Если есть еще правила, с отдельно стоящей впереди звездочкой, то они "сядут" в эту же строку таблицы, будучи разделенными символом |
То есть, это - "словарное гнездо" для ключа "*"
По принятому в быстром алгоритме соглашению, слова, попавшие под маску из отдельной звездочки, замене НЕ подвергаются.
Например, текст:
Ура блятра та та!
заменится на:
Ура бляпиф-паф!
Видим, что 1-е слово осталось в неизменности.
Аналогично: Ха-ха-ха блятра та та! Ха-ха-ха бляпиф-паф!
В общем, отдельно стоящие звездочки в правиле позволяют делать замены для "вариантных" словосочетаний, если так можно выразиться. Конечно, пользоваться этим инструментом надо с осторожностью.
P.S. Но мне представляется, что правила, начинающиеся с отдельной звездочки - не так уж и ценны, по сравнению с правилами, содержащими отдельно стоящие звездочки внутри правила. По-моему, любое правило вида * что-то-там-такое=что-то-там-другое полностью эквивалентно более привычному: что-то-там-такое=что-то-там-другое |
|
| | | Лёва V.I.P.
Сообщений : 134
Репутация : 173
| Лёва | :: Чт Июл 07 2011, 23:23 | Чт Июл 07 2011, 23:23 | |
| flegont Спасибо! Всё понятно! Очень доходчивое объяснение. P.S. Хотел снять вопрос до Вашего ответа потому что, получил хороший результат, но с разделителем "|" получается очень элегантно. Спасибо ещё раз! - Цитата :
- P.S. Но мне представляется, что правила, начинающиеся с отдельной звездочки - не так уж и ценны, по сравнению с правилами, содержащими отдельно стоящие звездочки внутри правила.
Это в качестве примера - абстракции. Правила, содержащими отдельно стоящие звездочки внутри правила вопросов не вызывают, а вот внутри слова... Такие правила нужны! Как это сделать в "стандарте" словарей.DIC, без громоздких вычислений для меня вопрос.
|
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| flegont | :: Пт Июл 08 2011, 09:13 | Пт Июл 08 2011, 09:13 | |
| - Цитата :
- а вот внутри слова...
Такие правила нужны! Пытаюсь представить себе вид этого правила. перед*зад=нос*корма
???
В правой части правила теперь без разделителя (хотя бы той же звездочки - не обойтись, чтобы определить, что на что заменяется) И хотелось бы найти более жизненный пример, нежели вышеприведенный искусственный
|
|
| | | Лёва V.I.P.
Сообщений : 134
Репутация : 173
| Лёва | :: Пт Июл 08 2011, 11:53 | Пт Июл 08 2011, 11:53 | |
| Примерно такие случаи: четырех*ую=четырёх-*ую четырех=четырёх черно=черно` черно*ая=чёрно-*ая военно*ое=вое`нно-*ое дефис ставится чтобы обе части составного слова были ударными. Есть и другие случаи. У меня их порядка 300. Сейчас листать словари не имеет смысла, а поиском этого сделать нельзя. - Цитата :
- военно*ое=вое`нно-*ое
это правило ставит ударение па первую часть. военнопленное -вое`нно-пленное - Цитата :
- *пленн*=*пле`нн*
вое`нно-пле`нное трехгранно*ый=трёх-гранно-*ый
|
|
| | | flegont V.I.P.
Сообщений : 355
Репутация : 476
| | | | | Балаболка |
---|
| |