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

Demagog (Демагог)

Предыдущая тема Следующая тема Перейти вниз
На страницу : Предыдущий  1, 2, 3, 4, 5  Следующий
АвторСообщениеDemagog (Демагог)
evmir_troll-hunter
Admin


Сообщений : 616

 evmir_troll-hunter :: Сб Дек 11 2010, 16:40
Сб Дек 11 2010, 16:40

Жаль, что на моей висте Anna\Анька не работает.:46:
Вот поставлю 7-ку, тогда развернусь!

Вернуться к началу Перейти вниз
evmir_troll-hunter
Admin
avatar


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

 evmir_troll-hunter :: Пт Дек 31 2010, 14:37
Пт Дек 31 2010, 14:37

Функция «Открыть файл мультимедиа» хороша! Алёна читает, Раммштайн играет, а оборотни «зажигают» по видеоSmile
Возможно кто-то сочтёт это излишним, мол зачем, ведь и так можно включить плееры. Таким скептикам скажу; прогресс господа, прогресс. То что мультимедиа теперь запускаются из программы-читалки – это прогресс.
Идеи носятся в воздухе как бабочки, но лишь единицы могу их поймать и осуществить. Вен и Илья их ловят, и дарят нам, и за это им огромное спасибо!

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


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

 flegont :: Пн Янв 31 2011, 18:09
Пн Янв 31 2011, 18:09

Очередной секретный эксперимент

Генератор словоформ для программы Demagog.
Это словарик типа REX. Smile
Не без огрехов, но начало положено. Альфа-версия:

http://aloys.narod.ru/sof/1/Sklonyator.zip


Вернуться к началу Перейти вниз
evmir_troll-hunter
Admin
avatar


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

 evmir_troll-hunter :: Вт Фев 01 2011, 08:30
Вт Фев 01 2011, 08:30

Склонятор это бизон! Жаль что у меня его раньше не было.
15000 словоформ я сделал за полтора часа!
Напр. с одного инфинитива он даёт 34 словоформы! Вот есть такое забавное словечко «облосьёнивать», и записывать вручную все его походные формы долго и путано;
После работы Склонятора, будет так;

Спойлер:
 

Таким образом теперь возможно обработать и исправить намного больше слов за меньшее время.
Спасибо автору!

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


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

 evilone_ :: Вт Фев 01 2011, 20:23
Вт Фев 01 2011, 20:23

да, словарик классный :hug:
жаль что словосочетания склоняются как отдельные слова
а в остальном намного удобнее

Вернуться к началу Перейти вниз
evmir_troll-hunter
Admin
avatar


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

 evmir_troll-hunter :: Вс Апр 10 2011, 12:34
Вс Апр 10 2011, 12:34

flegont пишет:
Кажется, надо написать что-то вот такое:

<eng>=<voice required="Name=Ryan22k"><rate absspeed="1"><volume level="70">
</eng>=</volume></rate></voice>
Для Microsoft Anna rate absspeed="-2"><volume level="100"
Но всё равно даже при стопроцентном уровне громкости, Anna звучит отвратительно тихо и невнятно, как из танка.:farmalin:

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


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

 evilone_ :: Чт Сен 01 2011, 15:34
Чт Сен 01 2011, 15:34

тут возник такой вопрос касательно правил с регулярными выражениями и очередностью применения правил к тексту

я знаю что все правила применяются последовательно к тексту
но, получается, что всего один раз, да?
т.е. если правило изменяет текст то этот измененный текст второй раз этим же самым правилом уже обработан не будет, даже если после первой замены он подходит к еще одной по тому же правилу?

вот простой пример:
Спойлер:
 
это так и должно быть, или что-то тут не так?mad

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


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

 flegont :: Чт Сен 01 2011, 20:38
Чт Сен 01 2011, 20:38

Так и должно быть.
Попробуем разобрать по полочкам. Правило: 1([abc]+)\;?=1
означает, что последовательность не менее чем из одного символа a, b и/или c впереди которой стоит символ 1, а позади точка с запятой - заменяется на символ 1.
Правило: 1= означает уничтожение символа 1.

1abc;abc;abc;abc;1

после применения 1-го правила будет:
1abc;abc;abc;1

применим 2-е правило (ОНО ТАКОЕ ЖЕ КАК 1-Е!!!) к уже измененному тексту:
1abc;abc;abc;1
будет:
1abc;abc;1

теперь применим 3-е правило к уже дважды измененному тексту, оно убьет единичку:
abc;abc;

Т.е. видим, что делается, как заявлено в Справке: правила в REX-словаре применяются к тексту в том порядке, в каком в нем расположены.
То что 2-е и 3-е правила одинаковые, роли не играет, это ничуть не помешало 2-му сработать так же, потому что опять нашелся подходящий фрагмент Smile

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


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

 evilone_ :: Чт Сен 01 2011, 22:26
Чт Сен 01 2011, 22:26

flegont пишет:
правила в REX-словаре применяются к тексту в том порядке, в каком в нем расположены.
угу, но получается что только один раз
почему-то думалось что пока не заменит все попадающие под маску фрагменты текста, для того примера - полностью удалить всю строку, а оказалось вот как - только один фрагмент :titanic:

flegont пишет:
То что 2-е и 3-е правила одинаковые, роли не играет, это ничуть не помешало 2-му сработать так же, потому что опять нашелся подходящий фрагмент
да, в этом и суть вопроса была, получается что для удаления\замены всей последовательности нужно угадывать к-во вариантов (нужных замен) и ставить это угаданное нужное к-во правил в словаре Sad

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


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

 flegont :: Чт Сен 01 2011, 22:39
Чт Сен 01 2011, 22:39

Цитата :
угу, но получается что только один раз
Цитата :
нужно угадывать к-во вариантов

С чего Вы это взяли???!!! Smile

Составленное Вами правило нашло именно тот фрагмент, на который рассчитано: единица + а и/или b и/или c + точка с запятой.
1([abc]+)\;?=1
Этот фрагмент в тексте только ОДИН, я его в предыдущем посте специально цветом выделил, чтоб понятней было Smile
Другие "abc;" БЕЗ ЕДИНИЦЫ В НАЧАЛЕ и под правило не попадают!
После того как правило сработало, текст "урезается" в начале за счет замены "1abc;" на "1"
и вновь возникает ОДИН подходящий фрагмент.
Правило срабатывает ОДИН раз потому что только ОДИН фрагмент подходит.

Уберите 1 в начале правила и оно подменит все "абс;" на "1"
Оставшаяся строка единиц будет убита правилом 1=

Вот и все :oldtimer:

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


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

 evilone_ :: Пт Сен 02 2011, 00:07
Пт Сен 02 2011, 00:07

flegont пишет:
Уберите 1 в начале правила и оно подменит все "абс;" на "1"
ой это сложно объяснить но требовалось немного другое - не удалять а сдвигать единицу последовательно по строке заменяя куски размера abc; на другие
это просто пример такой не совсем удачный но идея похожая...
...будем думать дальше Smile спасибо большое

Вернуться к началу Перейти вниз
evmir_troll-hunter
Admin
avatar


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

 evmir_troll-hunter :: Чт Сен 15 2011, 16:27
Чт Сен 15 2011, 16:27

flegont пишет:
Файлы jpg на моем компе ассоциированы с програмой FastStoneImage
Да, FastStone Image Viewer самый лучший и быстрый фотопросмотровщик на данный момент (для меня.) Люблю чёткие, качественные программы.
Открытие картинок фоторедакторами удобно, хоть я их и не терплю в тексте.Razz

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


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

 ptoton :: Сб Фев 18 2012, 16:41
Сб Фев 18 2012, 16:41

Столкнулся с проблемой. Демагог не записывает звуковой файл.
Язык Alyona (SAPI5).
Оставил вообще одно слово (любое, например "секунда").
Словари отключены.
Слово читается, но при записи - ошибка Floating point division by zero.
И это для WAV, MP3, OGG.
Английский голос в Демагоге записывается в MP3 без проблем.
То же слово в Балаболке Alyona (SAPI5) записывается в MP3 запросто.
Подскажите в чем может быть дело?

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


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

 flegont :: Сб Фев 18 2012, 21:11
Сб Фев 18 2012, 21:11

У меня Алена аудио пишет. Демагог билд 221, Алена версии 2.22.
Так что, навскидку, диагноз поставить к сожалению не могу. Sad

Помню еще, что ошибка Floating point division by zero при чтении и при записи была под SAPI4 у Алены версии 2.20. Это была именно ошибка движка, потом разработчиками исправленная. А при переключении программы на SAPI5 всё работало.

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


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

 ptoton :: Сб Фев 18 2012, 21:30
Сб Фев 18 2012, 21:30

Да у меня сейчас Демагог билд 221 и Алена версии 2.22.
С одной стороны Балаболка пишет и к голосу претензию трудно предъявить.
С другой стороны Демагог пишет английский голос. Т.е. тоже все должно быть нормально...
Не пойму, что может влиять.

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


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

 flegont :: Сб Фев 18 2012, 23:20
Сб Фев 18 2012, 23:20

хм... загадка, однако, за что бы тут зацепиться...
1) можно попробовать загрузить и записать какой-нить другой текст - проверить, на всех ли текстах ошибка или на каком-то конкретном
2) удалить файл настроек $.ini и перезапустить прогу, чтоб он создался "чистый" заново
3) перед записью пропустить файл через режим "литературного форматирования" - он удаляет разные вредные и невидимые символы
4) ... пока не знаю, что еще

ЗЫ. Пока это набирал, как раз очередное аудио с Аленой записалось Wink

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


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

 balabolka :: Сб Фев 18 2012, 23:55
Сб Фев 18 2012, 23:55

ptoton
"Зацепиться" тут можно за скриншот сообщения об ошибке, интересно было бы на него взглянуть. Скриншот может помочь понять, что именно выдает сообщение об ошибке - голос или программа.

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


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

 ptoton :: Вс Фев 19 2012, 00:32
Вс Фев 19 2012, 00:32

ошибка выглядит так



слово "секунда" почему-то пропадает, но возвращается, когда собираешься выйти


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


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

 flegont :: Вс Фев 19 2012, 10:05
Вс Фев 19 2012, 10:05

Провел контрольный эксперимент. Скачал со своей же странички Demagog.zip, распаковал, запустил, ввел одно слово "секунда", выбрал движок Алена и скорость 3 и нажал кнопку с рисунком CD - запись аудио. Секунда и все готово (извиняюсь за каламбур). Снял скриншот. Весь каталог Demagog вместе с аудиофайлом и скриншотом запаковал обратно в Demagog_.zip и выложил:
http://www.mediafire.com/?dj6ml51hv5q14v9

Если этот же экземпляр у Вас работать не будет, то скорее всего - проблема с движком Алена.
Почему работает в Балаболке - не знаю. В Демагоге процедура записи аудио под SAPI5 - одна и та же для всех движков. Кажется, в какой-то из веток форума balabolka упоминал, что смотрел мой исходник (он-то у меня открытый Smile) и запись аудио сделана так же - это стандартная процедура и описана в документации по SAPI5.
Но, может и есть какие отличия, мне сие неведомо. Разве что еще одно: Демагог скомпилирован под Дельфи 2007, а Балаболка под Дельфи 2009.
Wink

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


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

 ptoton :: Вс Фев 19 2012, 12:05
Вс Фев 19 2012, 12:05

К сожалению, ничего не помогло. Заметил еще, что Алена SAPI4 у меня на компьютере (Windows 7 64-разр Service Pack 1 проц i7-2600K) в Демагоге не читает, опять пишет Floating point division by zero. В Балаболке Алена SAPI4 читает.
Если вдруг появятся какие-нибудь еще идеи о том, что еще можно проверить, буду очень благодарен.

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


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

 flegont :: Вс Фев 19 2012, 12:34
Вс Фев 19 2012, 12:34

Ну, идея пока одна. Различие выявлено: у Вас 64-разрядная винда 7. Если найду где-нибудь у себя на работе комп с 64-разрядной 7-кой - попробую потестировать. А еще, со временем, перекомпилить Демагога на Дельфи 2010.

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


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

 balabolka :: Вс Фев 19 2012, 15:35
Вс Фев 19 2012, 15:35

ptoton
Программа нормально работает на 64-битной Windows 7; выполняется запись аудиофайлов в MP3 и OGG. Проблема в чем-то другом.

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


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

 flegont :: Вс Фев 19 2012, 17:53
Вс Фев 19 2012, 17:53

balabolka
Спасибо за тестирование Smile

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


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

 ptoton :: Вс Фев 19 2012, 18:58
Вс Фев 19 2012, 18:58

Долго сбивало с толку, что Балаболка записывает, а Демагог - нет, но все-таки переустановил все голоса Acapella. Все теперь работает! Демагог теперь все записывает нормально.

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


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

 flegont :: Вс Фев 19 2012, 21:39
Вс Фев 19 2012, 21:39

Отлично! Разобрались, общими усилиями Smile

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


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

 evilone_ :: Вт Фев 21 2012, 13:12
Вт Фев 21 2012, 13:12

так а в чем была причина так и непонятно? надо что-то сюда написать?

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


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

 ptoton :: Вт Фев 21 2012, 14:05
Вт Фев 21 2012, 14:05

Какое-то время тому назад удалял один из голосов Acapela. Видимо что-то сбилось в реестре, хотя вроде все было в штатном режиме...
Тем не менее, установка переустановка голосов помогла. И хорошо!

Вернуться к началу Перейти вниз
evmir_troll-hunter
Admin
avatar


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

 evmir_troll-hunter :: Вт Мар 27 2012, 00:35
Вт Мар 27 2012, 00:35

Демагог 4.17.224 с хорошим обновлением – спасибо.
Думаю опытным пользователям дополнительный Стандартный метод понравится.
А интересно есть ли предел в убыстрении Быстрого метода.:bounce:
Я так понимаю, что можно применять совершенно «дикие» правила?
Был проведён забавный эксперимент – правила:

Спойлер:
 

интересно видоизменили редкую украинскую фамилию «Тимошенко».
Попробуйте сами.Smile

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


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

 evilone_ :: Вт Мар 27 2012, 01:00
Вт Мар 27 2012, 01:00

Цитата :
Добавлен альтернативный - т.н. "классический" алгоритм словарных замен.
ну наконец-то :prelest:
а у нас еще были несовпадения в ini\rex где-то, не помню сейчас точно где, но где-то в словаре числительных точно, надо будет поискать, но результаты в балаболке и в демагоге были разные Suspect

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


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

 flegont :: Вт Мар 27 2012, 06:40
Вт Мар 27 2012, 06:40

Цитата :
а у нас еще были несовпадения в ini\rex
ну, если этот rex-ini найдется... надо будет посмотреть, что-там такое

Но в новоклассическом и классическом алгоритме тоже есть различия в заменах,
вот (в центре демагоговский, внизу балаболкин вариант):

Как говорят агенты Госдепа: No comments
Спойлер:
 

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


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

 balabolka :: Вт Мар 27 2012, 12:56
Вт Мар 27 2012, 12:56

Возможно, нужны пояснения по поводу порядка применения правил в "классическом" методе. В этом методе правила применяются одно за другим, ко всему тексту, так что каждое последующее правило применяется к уже измененному тексту. Первое "сработавшее" правило может сделать следующее правило бесполезным. Поэтому порядок применения правил и имеет такое большое значение.

В "Балаболке" этот порядок таков:

  • данные из всех помеченных "галочками" словарей с расширением *.dic объединяются в один общий список; считывание данных происходит последовательно, в том же порядке, в котором файлы перечислены на панели словарей;
  • список сортируется следующим образом: сравниваются длины шаблонов из левой части правил (без символов "$" и "*"); правила с более длинными шаблонами будут располагаться в начале списка;
  • если длины шаблонов одинаковы, сравниваются позиции правил в исходном списке правил; те правила, которые располагались выше в исходном списке, будут находиться выше и в результирующем списке.


Когда приходит пора применить правила к тексту, программа берет первое правило из получившегося списка и применяет его ко всему тексту. Затем берет второе правило и применяет его к тексту, измененному первым правилом, и т.д.

---

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

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


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

 flegont :: Вт Мар 27 2012, 21:15
Вт Мар 27 2012, 21:15

1. Порядок применения правил в ново-классическом (пишу так, только чтобы отличать от уже существующей реализации) практически такой же.
Единственное отличие - символ $ входит в подсчет длины левой части правила. А звездочки - НЕТ, и это правильно, тут никаких расхождений с Балаболкой не имеется.
Почему $ считается - я полагаю, что правила, требующие замен с учетом регистра, должны иметь приоритет перед такими же, но регистр не учитывающими. Это, конечно - эвристика, но тесты показывают, что - очень хорошая. Буду ее придерживаться в дальнейшем.

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

3. Что касается "глубины" отработки правил, то дело здесь именно в строгом учете этой самой объективной реальности: каждое последующее правило применяется к уже измененному тексту. Первое "сработавшее" правило может сделать следующее правило бесполезным.
Абсолютно верно. И если "муха" в ходе применения правил превратилось в "слон", то к этому уже другому слову могут подходить совсем другие правила! А это значит, что однократный прогон по словарю иногда оказывается недостаточным.
Подобная ситуация возникает довольно редко, и эффектные примеры подобрать не так просто. Я взял текст размером с толстую книжку и обработал 2-мя классическими методами. Тексты выгнал в столбик и сравнил оба файла. Получил 30 отличающихся замен на 200000 (двести тысяч) слов.
Кстати, отключивши (при отладке) повторные прогоны, я получил всего 12 слов, отличных от замен, которые сделала Балаболка. Что подтверждает мои предположения в п.2. Разница в основном из-за того, что Демагог делит текст на слова только по пробелам, а Балаболка и другие специфические символы учитывает, типа дефиса или собаки (как я понял из натурных наблюдений Smile ).

4. Было, конечно интересно, как отработает приведенные ранее простые тесты "бабушка" Говорилка, с которой все когда-то и началось. Измененный текст она не показывает, так что годятся лишь примеры, хорошо воспринимаемые на слух. Говорилка сочла, то Тутин - чиновник - сработало 3 замены подряд. Балаболка предположила, что Тутин - премьер - 1-на замена. Демагог отработал все до конца и сделал полное логическое заключение. Smile

5. Использовать ли повторные прогоны или нет - дело вкуса. Ну получаю я бОльшую точность замен в 0,01..0,1% случаев. Ну и что? Стоила ли игра свеч, не считая испытанного мною чувства глубокого морального удовлетворения? Все равно от 99,9% до 99,99% случаев совпадение будет полным.

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

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


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

 flegont :: Ср Апр 18 2012, 20:07
Ср Апр 18 2012, 20:07

P.S. ЕЩЕ О ТОМ, СТОИЛА ЛИ ИГРА СВЕЧ
Цитата :
"Это так просто, что я не понимаю, почему до этого никто не додумался раньше" (с) инженер Гарин
Как было сказано, в словарях формата DIC правила применяются к тексту в порядке убывания длин их левых частей. Символ * в подсчет длины не входит. Если эта длина для 2-х правил - одинакова, то они применяются в порядке их следования в словаре.

ПРИМЕР 1

Правила:

*^*=
муха=слон


Текст: м^у^ха

Словарные замены по классическому алгоритму:
Первым применяется правило с самой длинной левой частью: муха=слон. Оно - не подходит к тексту - замен нет; Затем выполняется правило *^*= - оно подходит, две замены. Просмотр словаря закончен, останов.

Измененный текст: муха

Всё верно. Но отчего-то кажется, что здесь что-то не так... А, вот оно что! Интуитивно мы ожидали, что правило *^*= сработает ПЕРВЫМ. Ведь оно и предназначено для предварительной подготовки текста. Увы - это противоречит давно устоявшемуся стандарту словарей DIC, по которому сначала проверяются ДЛИННЫЕ замены (что, кстати, вполне логично).

Но... Если к измененному тексту снова применить тот же словарь? Итак, всё сначала. Правило: муха=слон - теперь подходит! Одна замена. Правило: *^*= уже не подходит, свою службу сослужило раньше. Словарь исчерпан, останов.

Вторично измененный текст: слон

!!!!
Приходим к очевидному обобщению. Применять замены к тексту НЕ однократным проходом по словарю, а повторяя этот процесс до тех пор, пока он приводит к изменению текста.

Однако, на этом пути нас подстерегает засада.

ПРИМЕР 2

Словарь: *чертя*=чертя<

Текст: очертя

Измененный текст при многократном обращении к словарю:

очертя<
очертя<<
очертя<<<

...
и т.д. до морковкина заговенья.

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

Насколько будут отличаться тексты, измененные классическим и ново-классическим (скажем так), методами? Примерно на 0.1% Smile если тестировать большие объемы текстов со словарем Michelangelo.dic

Стоила ли игра свеч?
Полагаю, что да. Ведь текст (на любом языке) представляет собой т.н. "последовательность редких событий". Многие слова, несущие реальную смысловую нагрузку, встречаются в нем всего лишь несколько, а то и вовсе один раз! Оставаясь при том важными для понимания текста.

Поэтому, улучшение алгоритма словарных замен, касающееся даже небольшой доли слов в тексте, может оказаться полезным.

Кроме того, нисколько не погрешив против принципа применения правил в порядке убывания длин их левых частей, мы фактически сняли это ограничение. А именно, когда короткие правила используются для очистки текста от "мусора". Более "содержательные" правила уже будут успешно применены при последующих проходах по словарю.

Аналогично - при раскрытии условных сокращений и аббревиатур. И т.д. и т.п.

ПРИМЕР 3

Словарь: Michelangelo.dic

Текст: Devochka Nina - korr. CNN

Измененный текст (Demagog 4.17.227):

Де<вочка Нина - корреспонде<нт Си энээ<нн

Примененные правила:

(1-й проход: а) раскрыта аббревиатура; б) текст очищен от транслита)
cnn=си энээ<нн
*ch*=ч
*a*=а
*d*=д
*e*=е
*i*=и
*k*=к
*n*=н
*o*=о
*r*=р
*v*=в

(2-й проход: а) применено правило постановки ударения; б) раскрыто условное сокращение)
девочк*=де<вочк
*корр.=корреспондент

(3-й проход - применено правило постановки ударения)
корреспондент*=корреспонде<нт

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


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

 balabolka :: Чт Апр 19 2012, 02:13
Чт Апр 19 2012, 02:13

flegont пишет:
Во избежание подобных казусов, должен вестись список уже примененных правил, и каждый раз применяться лишь те правила из словаря, которых еще нет в этом списке.
Хорошо придумано, это действительно позволит избежать проблем с повторным применением правил. (Хотя, теоретически, опять какие-то правила не будут применены к тексту, измененному другими правилами; идеал недостижим.)

Мне лично всё равно, сколько проходов использовать в "классическом" методе. Положусь на мнение пользователей: если найдутся люди, которые поддержат Ваш вариант применения правил, - готов внести изменения в свою программу, для обеспечения единообразия. (Это несколько строчек программного кода.)

Проблема с новым методом, по сути, одна - время применения правил увеличится как минимум вдвое; всегда придется тратить время на одну безрезультатную проверку всех правил. 0,1% увеличения количества примененных правил или 100% увеличения времени их применения - вот какой выбор надо сделать.

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


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

 flegont :: Чт Апр 19 2012, 09:11
Чт Апр 19 2012, 09:11

Приведенное мною описание "циклического" или "рекурсивного" (или черт его знает, как назвать) подхода к словарным заменам - НЕ является предложением к кому бы то ни было следовать моему примеру.

Это просто рассказ о любопытном (имхо) вычислительном эксперименте. Конечно, теоретически увеличение времени может быть довольно заметным. Меня полученный результат (в смысле временнЫх характеристик: +10..15%) устроил и я включил соответствующие изменения в прогу. В оба алгоритма.

А поскольку различие состоит лишь в том, что 0.1% замен стал выполняться правильно, а остальные 99.9% как правильно работали, так и работают, то пользователей за такой мелочью беспокоить не стал, а принял решение самостоятельно. Smile

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


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

 flegont :: Чт Апр 19 2012, 10:10
Чт Апр 19 2012, 10:10

Еще один постскриптум.
Оставив в стороне любопытные, но спорные вычислительные эксперименты, хочу сделать одно замечание чисто терминологического характера.

Последняя реализация классического алгоритма в Балаболке обладает весьма удовлетворительными временнЫми характеристиками. На уже известном тестовом примере в 15 мб и словаре Микеланджело, мы имеем:

Демагог: "быстрый" метод ( с повторными прогонами по словарю) - 6:51
Демагог: классический метод (с повторными прогонами) - 10:05

Балаболка: "быстрый" метод - 22:12
Балаболка: классический метод - 7:37

Таким образом, рабочее название хеш-алгоритма - "быстрый метод" в значительной мере утратило свою актуальность.
А применительно к Балаболке - оно даже анекдотически звучит. Smile

Настало время придумать для хеш-алгоритма другое название.
Его единственное отличие от классического перебора состоит лишь в том, что формат словарей DIC трактуется расширенно. Допускаются звездочки ВНУТРИ левых частей правил: в словах - слева и/или справа; а также отдельно стоящие.
Что несколько расширяет сферу применения DIC-словарей и позволяет, в ряде случаев, не обращаться к сложным для пользователей REX-словарям регулярных выражений.

Кто сочинит краткий и емкий термин, тот получит заслуженные аплодисменты и войдет в анналы. Smile Smile


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


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

 evilone_ :: Чт Апр 19 2012, 19:16
Чт Апр 19 2012, 19:16

flegont пишет:
Балаболка: "быстрый" метод - 22:12
Балаболка: классический метод - 7:37
а как так? второй метод теперь быстрее первого или первый стал медленнее второго?
flegont пишет:
Настало время придумать для хеш-алгоритма другое название
а почему сразу нельзя было его не смешивать со словарями *.dic? переименовали бы как-то по-своему и описали все возможные варианты правил как это сделано например тут а теперь приходится долго думать какое правило и как лучше добавлять чтобы оно и так и так

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


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

 flegont :: Чт Апр 19 2012, 20:25
Чт Апр 19 2012, 20:25

1) Я имею ввиду название метода в меню программы! "Быстрый" метод в Балаболке всегда был довольно тормозным по сравнению с его изначальной реализацией в Демагоге. Сперва разница составляла 1.5..2 раза, сейчас уже более чем в 3 раза медленнее. Почему так - вопрос не ко мне. Но он все же был быстрее классического.
В последней версии Балаболки автор усовершенствовал именно классический метод - в плане скорости, см. вышеприведенные результаты теста Smile

И названия пунктов меню в Балаболке: Метод применения правил - Классический/Быстрый (Демагог) - стали противоречить реальному положению дел (в Балаболке).

В Демагоге хеш-метод как был быстрым, так и остался и до сих пор еще быстрее "балаболко-классического" ~ 10% и быстрее "демагого-классического" ~ 30% Smile

Т.е. в Демагоге еще можно писать "Классический/Быстрый", не вводя в заблуждение пользователя. А в Балаболке это уже выглядит комично.

2)
Цитата :
а почему сразу нельзя было его не смешивать со словарями *.dic?
:oldtimer: Потому что цель была - максимальная совместимость с существующими словарями! С предоставлением некоторых дополнительных возможностей в рамках привычного пользователям формата dic.
Эти дополнительные возможности сохранены и в "демагого-классическом" алгоритме, в котором правила применяются традиционно, просмотром всего словаря в порядке убывания длин левых частей правил + повторные прогоны по словарю для уточнения замен, если это возможно.

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

Например, правило: все * *ло=всё ло

Текст:

Все вокруг потемнело.
Все мне надоело.
Все давно прошло.


Измененный текст (в быстром и новоклассическом алгоритмах):

Всё давно прошло. Всё вокруг потемнело. Всё мне надоело.

Wink

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


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

 evilone_ :: Чт Апр 19 2012, 22:42
Чт Апр 19 2012, 22:42

flegont пишет:
В принципе я уже сейчас могу исключить "быстрый" метод из Демагога, оставив лишь "новоклассический"
да, было бы здорово все притянуть к одному формату, будет меньше путаницы
flegont пишет:
"Быстрый" метод в Балаболке всегда был довольно тормозным по сравнению с его изначальной реализацией в Демагоге
а балаболку любят не за скорость pale это демагог виноват - заразил всех "быстрым" методом Rolling Eyes
Код:
все * *ло=всё ло
Цитата :
Все друзья весело уселись за стол...
Сгрудились все кучей около круглой печурки...
тапочки выставила все пять около шкафа...
Инку церемонно обласкали, все крутились около ее стола...

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


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

 flegont :: Чт Апр 19 2012, 23:22
Чт Апр 19 2012, 23:22

Цитата :
Все друзья весело
Да знаю я! Smile То правило придумано на скорую руку для иллюстрации, и имеет исключения.
А что в Демагоге замены работают быстро (какой бы метод я ни использовал), так я не виноват, у меня это само-собой получается.

Smile

все * *ло=всё ло
всё друзья=все друзья

Текст:
Все друзья весело уселись за стол...
Но вдруг все вокруг потемнело!


Измененный текст (Демагог 4.17.227):
Все друзья весело уселись за стол... Но вдруг всё вокруг потемнело!

tongue

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


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

 flegont :: Пт Апр 20 2012, 10:23
Пт Апр 20 2012, 10:23

Цитата :
да, было бы здорово все притянуть к одному формату, будет меньше путаницы
Я - не против.
Но изъятие "быстрого" метода (во избежание еще большей путаницы) должно быть произведено согласованно в Демагоге и Балаболке. Чтобы в один день, раз! - и его нет. Я "подготовку к акции" уже провел, и могу сделать это за 10 сек (время перекомпиляции программы).

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


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

 evilone_ :: Сб Апр 21 2012, 02:20
Сб Апр 21 2012, 02:20

flegont, если он меняться в дальнейшем больше уже не будет, в чем у меня есть сомнения :kak_dam:, или он повторяет старый то да, а иначе лучше назовите его как-то по-другому и будет новый "быстрый":spruce:

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


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

 flegont :: Сб Апр 21 2012, 09:01
Сб Апр 21 2012, 09:01

ново-классический :pioneer:

1) Правила применяются в целом по словарю в порядке убывания длин их леых частей (* в подсчет длины не входит) - это надежная, проверенная классика.

2) Правила со * внутри левой части выполняются также, как в "быстром" методе - это для совместимости. В старом классическом методе подобные правила просто игнорируются.

3) Проходы по словарю выполняются не по старинке - один раз, а столько, сколько нужно - это новое. На практике разница весьма невелка (~0.1%), но иногда это бывает существенно. Примеры приводлись выше.

P.S. Если повторные проходы отключить, то тест дает степень совпадения со старым классическим до 3-х девяток: 0,99906 uraa иначе = 0,99850 - чуть меньше, т.к. за счет более полного использования правил появляются замены, отсутсвующие в старом классическом.

P.P.S. Кому интересно, в том же тесте "демагого-быстрый" дает совпадение со старым классическим: 0,99797; "балаболко-быстрый": 0,98744

P.P.P.S. А с учетом приводившихся ранее временнЫх характеристик - видим, что особой необходимости в дальнейшем использовании "быстрого метода" - нет.



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


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

 balabolka :: Сб Апр 21 2012, 15:27
Сб Апр 21 2012, 15:27

flegont пишет:
А применительно к Балаболке - оно даже анекдотически звучит.

А в Балаболке это уже выглядит комично.
Не очень-то приятно читать такие слова: выглядит так, как будто бы взял хороший алгоритм и испортил его при вставке в свою программу. Я уже объяснял, что это неизбежная "плата" за поддержку программой Юникода; алгоритм не будет работать быстрее, если каждый символ вместо одного байта станет занимать два.

Мне тоже стало интересно, что же такое происходит с "быстрым" методом в моей программе. Взял для тестов текстовый файл размером 2 Мб и словарь "Микеланджело". Измерил скорость быстрого метода в "Балаболке" - 2:05. Скачал исходники "Демагога", откомпилировал в Delphi 2007, засек время - 1:06. В моей программе "быстрый" метода работает в 2 раза медленнее.

Откомпилировал исходники "Демагога" в Delphi 2009, засек время - 1:41. При переходе с ANSI на Юникод метод замедлился в 1,5 раза. Да, не в два раза, как в "Балаболке". Но в моей программе функции "быстрого" метода также пришлось адаптировать к Юникоду. Речь о таких функциях, как "Body", "DollBody", "Tail", "Nose" - для различных языков границу слова придется искать по-разному. Именно здесь и теряю эти 50% скорости.

В качестве эксперимента восстановил вышеперечисленные функции в "Балаболке", скопировав из "Демагога"; замерил время - 1:34. То есть, тот же результат, что в "Демагоге" на Delphi 2009.

---

В следующей версии "Балаболки" уберу "быстрый" метод, оставлю только "стандартный". Хэш-таблица - это здорово, но слишком много дополнительных действий выполняется над строками в формате Юникод, это и приводит к потере времени.

Насколько я понимаю, "новоклассический" метод также делит исходный текст на отдельные слова - чтобы затем выполнять сравнение каждого слова с шаблоном. Если так, потенциальное падение скорости при переходе с ANSI на Юникод заложено и в этом алгоритме. В "Балаболке" пока будет применяться обычный "стандартный" метод, с возможностью использования "звездочек" только на краях шаблонов.

Еще раз спасибо Венедикту Ли за разрешение использовать его алгоритм "быстрого" метода.

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


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

 flegont :: Сб Апр 21 2012, 15:44
Сб Апр 21 2012, 15:44

Это я, наверное, неуклюже выразился, ведь хотел сказать комплимент: что успешное усовершенствование классического метода в Балаболке, сделало "быстрый" метод (заметили, что с некоторых пор я пишу это слово в кавычках? Smile ) не сильно востребованным, а его название - несколько анекдотичным. Да и в Демагоге тоже - превосходство в скорости над новоклассическим +20% - не такая уж и быстрота. Smile

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

Искренне благодарю Илью Морозова за сотрудничество и полезные обсуждения.

Вернуться к началу Перейти вниз
evmir_troll-hunter
Admin
avatar


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

 evmir_troll-hunter :: Пн Июн 25 2012, 07:21
Пн Июн 25 2012, 07:21

Калькулятор в говорящем текстовом редакторе!.. Как же я был поражён в детстве этой маленькой коробочкой - наилучшая игрушка.Smile Возможность проделывать разные арифметические "штуки" восхищала.
Потом школа... к сожалению, учительниице не удалось увлечь меня математикой и объяснить хитрости в работе с калькулятором.(((
Автору спасибо за опцию и инструкцию - было интересно почитать и переводить.

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


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

 flegont :: Пн Июн 25 2012, 12:12
Пн Июн 25 2012, 12:12

В самом деле... Программа, помимо стандартных функций текстового редактора, умеющая читать текст вслух! Могущая записать для Вас аудиокнигу! А также проверить орфографию текста!

И при том неспособная ответить на вопрос: "Сколько будет дважды два"?!
Или: "Какой налог должна уплатить телеведущая Ксения Собчак с найденных у нее в сейфе полутора миллионов евро?"

Это было странно.
Но, отныне, сей пробел в талантах Демагога мною устранен Smile

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


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

 flegont :: Вс Июл 15 2012, 21:29
Вс Июл 15 2012, 21:29

ЭКСПЕРИМЕНТЫ С FB2

(Версия Демагога не ниже 4.18.234)

Предварительно. "Сервис - Общие настройки - Прочее - Распознаваемые типы текстовых файлов" указываем: *.fb2; *.jpg; *.jpeg; *.png; *.bmp; *.gif

1. Преобразование fb2 из utf-8 в win-кодировку.
1.1. Открыть. ( В силу сделанных выше настроек, ф-л откроется, как есть - в виде xml-текста)
1.2. Сразу в 1-строке заменить utf-8 на windows-1251
1.3. Сохранить. (экономия в размере файла составит ~ 40..50% Smile)

2. Изменить картинку в fb2
2.1. Открыть в любом свободном окне нужную картинку. ( В силу сделанных выше настроек, картинка откроется в виде т.н. транспортного кода Base64)
2.2. Скопировать полученный транспортный код и вставить его в fb2-файл взамен кода, соответствующего заменяемой картинке.

3. А если надо отредактировать уже имеющуюся в fb2 картинку?
Очень просто. При открытии fb2-файла, если в настройках стояла галочка "Показывать картинки", то все они будут декодированы из имеющихся в fb2 блоков транспортного кода и помещены в отдельный каталог. Делайте с ними, что хотите, с помощью фотошопа, а потом... п.2
Обычно, задача редактирования состоит лишь в том, чтобы уменьшить размер ф-лов картинок. Что, в итоге, сократит потом и размер fb2 на 10..15%

Вернуться к началу Перейти вниз
evmir_troll-hunter
Admin
avatar


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

 evmir_troll-hunter :: Ср Июл 18 2012, 22:32
Ср Июл 18 2012, 22:32

flegont пишет:
(экономия в размере файла составит ~ 40..50% )
Да, разница ощутимая (раньше я как-то не обращал внимания).
В FictionBook Editor с .fb2 можно вытворять всё что угодно, но есть минус! Программа требовательна к ресурсам компьютера. Большой файл открывает до полутора минут, зависает при редактировании...
Возможность правки .fb2 непосредственно в Демагоге удобна и практична.
Но нужно быть чрезвычайно внимательным с тегами. А я рассеянный!!!Surprised

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


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

 flegont :: Вс Авг 26 2012, 21:32
Вс Авг 26 2012, 21:32

И вновь секретный эксперимент

В версии Демагога 4.18.237 изменена опция "Сервис - Статистика - Найти по списку". На то, как она выглядела раньше - наплевать и забыть. А вот как это работает сейчас.

Автоматически выбираются все слова из текста, подходящие под заданный список шаблонов. Шаблоны должны находиться в файле с расширением txt, кодировка, естественно, Windows.

Это именно ВЫБОРКА, а не поиск. Мы получаем информацию о том, что данное слово в тексте есть, но не о том, где оно находится.

Итак, загрузим в Демагога, в Окно 1 какой-либо текст, размером с хорошую книжку. В Окно 2 поместим Очень Большой Текст (есть у меня такой, 20 мб художественного чтива). В 3-м окне введем:

$Вовочк*
бля*
муд*
ху*
* кивн* *


Сохраним этот текст под именем wanted.txt ("Разыскивается" Smile)

Во-первых, видим, что шаблоны задаются в точности так, как левые части правил в словарях формата DIC. Согласитесь - это удобно.
Используется расширенный формат словарей DIC, применяемый в Демагоге: когда позволительны звездочки в начале и/или конце любого слова в левой части правила; и отдельно стоящие звездочки.

Во-вторых, начнем наш эксперимент. Возвращаемся в Окно 1. Выполняем "Сервис - Статистика - Найти по списку". В открывшемся диалоге выбора файлов указываем wanted.txt
Через несколько секунд в Окне Статистики появляется отчет. Смотрим, и убеждаемся, что выбранная книжка не содержит, помимо безобидных слов "блямба", "мудрец" и "художник", других, более сильных народных слов. А также графоманских ляпов типа "кивнул головой". И эта книжка не является сборником анекдотов про Вовочку. Или наоборот: содержит и является Smile

Заметим, что дубликаты в отчете не показываются. Закомментируем или удалим прежние шаблоны. Введем новый, из одного слова: все. Проведем поиск по заново сохраненному списку и в отчете увидим одно это же слово. Т.е. это слово в тексте есть. Не сильно полезная информация. Нетрудно было и так догадаться Smile

Однако, усложним наш шаблон: все * *
Т.е. слово "все" в контексте 2-х следующих за ним слов.
Сохраняем изменения в wanted.txt, повторяем поиск.
О-о! Вот это уже серьезно! В отчете больше полутысячи строк. Гляньте на фрагмент. ("Слова" ~Z~ и ~E~ означают, соответствено, абзацный отступ и пустую строку)

Спойлер:
 

Отчет отсортирован по алфавиту и даже при беглом его просмотре правила для разрешения омографа все/всё сами лезут в голову:

все больше=всё больше
все время=всё время
все еще=всё еще


и т.д. и т.п.

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

все * *ло=всё ло

все давно прошло | все вокруг потемнело | все мне надоело | все мне мало ...

и множестов др. вариантов замечательно под него подходят. Мне тут же привели контрпример (см. эту ветку форума несколькими постами выше):

все друзья весело уселись за стол

и я стал юлить, витиевато объясняя, что всякие там отдельные исключения исправляются дополнительными правилами...
Вопрос о том, не потонет ли само правило в трясине исключений к нему, так и остался открытым. Закрытием его мы сейчас и займемся.

Итак, пусть наш список wanted.txt содержит одну строку шаблона: все * *ло
Посмотрим, что под нее подходит. Раз-два и готово:

все больше темнело
все время пересыхало
все выше, русло
все еще имело
все остальное стало
все четче проступало

Понятно, что: а) правило - редкое, на целую книжку сработало всего 6 раз; б) довольно надежное - ни разу не ошиблось.
Для уточнения откроем наш Очень Большой Текст и проведем выборку по нему. Вот:

Спойлер:
 

6 исключений из 154. Т.е. надежность этого правила составляет (+154-6)/154 = 0.961
Вполне удовлетворительно.

Таким же образом можно тестировать любые другие правила для словарей формата DIC.

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


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

 flegont :: Сб Окт 27 2012, 08:28
Сб Окт 27 2012, 08:28

Экспериментальный словарик для разрешения омографа ВСЕ/ВСЁ
http://aloys.narod.ru/sof/1/YOhmg.zip

Только для программы Demagog версии 241 и выше.

Предварительное тестирование дало следующие результаты. Правильность применения правил ~ 94%. Ошибочные применения распределились так: 1% - подстановка ё где не надо, и 5% - не подстановка ё там где надо Smile

P.S. "Только для Демагога" - это не потому, что я жлоб, а потому, что только Демагог поддерживает расширенный формат DIC-словарей, допускающий звездочки внутри правил, а не только в начале/конце правила; а также отдельно стоящие звездочки в правилах.
И только Демагог применяет правила многократным проходом по DIC-словарю, выполняя замены до тех пор, пока это возможно.

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




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


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

Demagog (Демагог)

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

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