Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | | | |
Вот я его и хочу написать (все равно делать нечего), поэтому... 03.12.04 03:10 Число просмотров: 3243
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member Отредактировано 03.12.04 03:14 Количество правок: 1
|
> Видимо, чтобы учесть все - нужно писать таки громоздкий > алгоритм :( Вот я его и хочу написать (все равно делать нечего), поэтому учитываю сейчас все пожелания и предложения.
Единственное, в чем загвостка - это даже не средненькие знания по Perl, а слабое знание "великого и могучего". Может, к русоведу сходить? Или проще не считать слова из одной-двух букв (ну, пусть это будут предлоги, союзы и т.д.)? Но тогда будут проскакивать хакИрские сообщения, типа: "А А А А А А А А А А" =)
|
<web building>
|
[Perl] Защита от сообщений, состоящих из повторяющихся слов в гостевой 02.12.04 08:11
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
Потребовалось сделать защиту от сообщений, сотсоящих из повторяющихся слов.
Что-то вроде:
балбес балбес балбес балбес балбес балбес балбес
---
Можно, конечно решить эту проблему, запретив писать такие сообщения (что-то вроде "если все слова равны - сообщение добавить нельзя"). Но хакИр может обойти эту защиту, поставив в конце (ну или начале, середине, - без разницы), например, смайлик или что-то в этом духе.
Можно попытаться поставить подсчет одинаковых слов, и если их будет больше установленного лимита, запрещать добавлять такое сообщение. Но тут тоже проблема - есть часто повторяемые слова и тогда защита эта будет обрезать и некоторые "нормальные" сообщения.
Другого я пока не придумал, поэтому обращаюсь за помощью к вам.
Что посоветуете? ;)
|
|
Поставь 2 порога 02.12.04 08:25
Автор: whiletrue <Роман> Статус: Elderman Отредактировано 02.12.04 08:27 Количество правок: 1
|
> Потребовалось сделать защиту от сообщений, сотсоящих из > повторяющихся слов. > Что-то вроде: > > балбес балбес балбес балбес балбес балбес балбес
> ---
> Можно, конечно решить эту проблему, запретив писать такие > сообщения (что-то вроде "если все слова равны - сообщение > добавить нельзя"). Но хакИр может обойти эту защиту, > поставив в конце (ну или начале, середине, - без разницы), > например, смайлик или что-то в этом духе. > Можно попытаться поставить подсчет одинаковых слов, и если > их будет больше установленного лимита, запрещать добавлять > такое сообщение. Но тут тоже проблема - есть часто > повторяемые слова и тогда защита эта будет обрезать и > некоторые "нормальные" сообщения. > Другого я пока не придумал, поэтому обращаюсь за помощью к > вам. > Что посоветуете? ;)
Сабж
1. Через сколько промежуточных слов считать повторяющимся
2. Через сколько повторений (согласно 1) считать часто повторяющимся
Потом просто настроишь эти параметры. ИМХО должно быть: (2, 3) - тогда, например, такие выражения как "точь в точь" будут считаться с повторяющимися словами, но не с часто повторяющимися.
|
| |
А это поможет, если, например, будет повторяться не одно... 02.12.04 08:32
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
А это поможет, если, например, будет повторяться не одно слово, два, или три?
Что-то типа:
вася балбес вася балбес вася балбес вася балбес
---
И можно примерный код ,плз, а то я слабо себе представляю, как это реализовать?
|
| | |
[upd] Вообще поможет, но для фраз этот метод не гибкий, хотя... 02.12.04 09:01
Автор: whiletrue <Роман> Статус: Elderman Отредактировано 02.12.04 09:21 Количество правок: 2
|
> А это поможет, если, например, будет повторяться не одно > слово, два, или три? > Что-то типа: > > вася балбес вася балбес вася балбес вася балбес
> ---
Вообще поможет, но для фраз этот метод не гибкий, хотя простой (фактически это обобщение того, что ты говорил). Вопрос был вроде про слова, вначале... сори не так понял. По-хорошему, с предложениями тебе придется тогда на "лексемы" все разбивать и проверять не по словам, а по "лексемам". Такое разбиение будет, имхо, громоздким и как его реализовать - еще надо подумать...
Втупую - это сначала проверяешь повторения отдельных слов, потом пар слов, потом троек слов... Все это можно, конечно, оптимизировать. Вроде бы архиваторы занимаются подобной фигней, так что алгоритмы, имхо, надо искать где-то в той степи.
> И можно примерный код ,плз, а то я слабо себе представляю, > как это реализовать?
Нее... код писать лениво, сори. Могу только "морально" поддержать :)
|
| | | |
Можно сделать проще 02.12.04 17:26
Автор: Heller <Heller> Статус: Elderman
|
1. Считаешь общее количество слов.
2. Считаешь общее количестворазныхслов.
3. Вычисляешь их отношение.
4. Если отношение больше (или меньше, в зависимости от того, что на что делил), сообщение не пропускаешь.
Замечание 1:
При подсчёте можно не учитывал предлогов, союзов, междометий и подобного. Хотя над этим надо ещё дополнительно подумать.
Замечание 2:
В статистике доказывается, что такое отношение существует и для русского сообщения равно константе, если длина текста стремится к бесконечности. Ссылки сейчас не найду - можешь поверить на слово. В общем, способ действительно рабоет - научный факт.
|
| | | | |
больше чего? той самой константы из "Замечания №2"? 03.12.04 03:21
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
> 1. Считаешь общее количество слов. > 2. Считаешь общее количестворазныхслов. > 3. Вычисляешь их отношение. > 4. Если отношение больше (или меньше, в зависимости от > того, что на что делил), сообщение не пропускаешь.
больше чего? той самой константы из "Замечания №2"?
> Замечание 1: > При подсчёте можно не учитывал предлогов, союзов, > междометий и подобного. Хотя над этим надо ещё > дополнительно подумать. > > Замечание 2: > В статистике доказывается, что такое отношение существует и > для русского сообщения равно константе, если длина текста > стремится к бесконечности. Ссылки сейчас не найду - можешь > поверить на слово. В общем, способ действительно рабоет - > научный факт.
|
| | | | |
Я из чего исходил 02.12.04 21:00
Автор: whiletrue <Роман> Статус: Elderman
|
> 1. Считаешь общее количество слов. > 2. Считаешь общее количестворазныхслов. > 3. Вычисляешь их отношение. > 4. Если отношение больше (или меньше, в зависимости от > того, что на что делил), сообщение не пропускаешь. > > Замечание 1: > При подсчёте можно не учитывал предлогов, союзов, > междометий и подобного. Хотя над этим надо ещё > дополнительно подумать. > > Замечание 2: > В статистике доказывается, что такое отношение существует и > для русского сообщения равно константе, если длина текста > стремится к бесконечности. Ссылки сейчас не найду - можешь > поверить на слово. В общем, способ действительно рабоет - > научный факт.
Да, способ простой в реализации и вобщем-то эффетивный.
Но, я так предположил вот такую штуку: флудер может набрать достаточно большое сообщение и скопировать его Copy-paste раз 5-6, тогда твой метод его пропустит.
Видимо, чтобы учесть все - нужно писать таки громоздкий алгоритм :(
|
| | | | | |
Вот я его и хочу написать (все равно делать нечего), поэтому... 03.12.04 03:10
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member Отредактировано 03.12.04 03:14 Количество правок: 1
|
> Видимо, чтобы учесть все - нужно писать таки громоздкий > алгоритм :( Вот я его и хочу написать (все равно делать нечего), поэтому учитываю сейчас все пожелания и предложения.
Единственное, в чем загвостка - это даже не средненькие знания по Perl, а слабое знание "великого и могучего". Может, к русоведу сходить? Или проще не считать слова из одной-двух букв (ну, пусть это будут предлоги, союзы и т.д.)? Но тогда будут проскакивать хакИрские сообщения, типа: "А А А А А А А А А А" =)
|
| | | | | | |
А может заюзать какой-нибудь стандартный алгоритм сжатия (типа LZH)? 03.12.04 14:47
Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 03.12.04 14:51 Количество правок: 3
|
Subj... Вроде в perl есть либы для этого...
Сжимаем. Смотрим коэфф. сжатия.
Если слишком большой — похоже на флуд с повторениями.
Если слишком маленький — похоже на флуд с использованием генератора ПСЧ.
Убиваем сразу двух зайцев ;-)
Правда, метод не канает для слишком маленьких сообщений... Но флуд на то и флуд, чтобы быть большим ;-)
|
| | | | | | | |
Несколько постов выше я предлагал метод подсчёта отношения... 03.12.04 19:30
Автор: Heller <Heller> Статус: Elderman Отредактировано 03.12.04 19:33 Количество правок: 1
|
Несколько постов выше я предлагал метод подсчёта отношения количества слов и различных слов. Если применять архивацию, итог получается на самом деле тот же, только гораздо более трудоёмкий.
Что касается выделения "основы" слова, про которую писал paganoid, то такой скрипт можно и самому написать - достаточно отрезать все приставки (их список вполне определён) и все окончания (аналогично), но вот только такой способ мало чего даст.
Вообще, написание громоздкого алгоритма, который будет предусматривать все варианты, вполне возможно, но он будет неоправданно трудоёмким, имхо.
Проще вырезать все повторяющиеся слова (с учётом, если надо, предлогов перед ними) - человек вполне может пообшибке написать одно и то же дважды, а потом уже подсчитать отношение.
По поводу константы: её надо находить самому, но это не так уж и сложно. Если делить количество разных слов на общее количество слов (не учитывая вспомогательных частей речи), то соответственно 1 - все слова разные, 0.5 - это уже слишком мало, каждое слово повторяется дважды, 0.75 - четверть всех слов повторяется дважды, вполне возможно, если это какой-то афоризм, анекдот или шуточная рифма. Значит, 0.75 можно использовать как минимально допустимое значение. Не точно, конечно, но со временем можно будет подправить, если будут ошибки.
Один момент на тему ПСЧ. Дело в том, что в HTML-форму действительно ПСЧ запихнуть невозможно. Допустим, написали мы случайную последовательность 314259867 (последовательность натуральных чисел не больших 9). Вроде, ПСЧ. А если представить каждое число такой последовательности в двоичном виде? Уже не ПСЧ. Кстати, такую последовательность можно ужать всего до 10 бит (без учёта алфавита).
|
| | | | | | | | |
имеется ввиду повторяющиеся подряд слова? 04.12.04 05:21
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member Отредактировано 04.12.04 05:23 Количество правок: 1
|
> Проще вырезать все повторяющиеся слова (с учётом, если > надо, предлогов перед ними) - человек вполне может > пообшибке написать одно и то же дважды, а потом уже > подсчитать отношение. имеются ввиду повторяющиесяподрядслова?
> Вообще, написание громоздкого алгоритма, который будет > предусматривать все варианты, вполне возможно, но он будет > неоправданно трудоёмким, имхо. а по-моему проще один раз написать алгоритм и забыть об этой проблеме, чем мучаться, администрируя...
|
| | | | | | | | | |
Именно. 04.12.04 21:31
Автор: Heller <Heller> Статус: Elderman
|
> > Проще вырезать все повторяющиеся слова (с учётом, если > > надо, предлогов перед ними) - человек вполне может > > пообшибке написать одно и то же дважды, а потом уже > > подсчитать отношение. > имеются ввиду повторяющиесяподрядслова? Именно.
> > > Вообще, написание громоздкого алгоритма, который будет > > предусматривать все варианты, вполне возможно, но он > будет > > неоправданно трудоёмким, имхо. > а по-моему проще один раз написать алгоритм и забыть об > этой проблеме, чем мучаться, администрируя... Это только до тех пор, пока твой проект маленький и не примечательный. А вот как будет у тебя каждый день по 5000 хостов, вот тогда окажется, что сайт почему-то несколько тормозит. Да и потом, такие флудеры встречаются крайне редко. Ну и на самом деле я продолжаю твердо обеими ногами стоять на той позиции, что подсчёт отношения повторяющихся слов - самое надёжное средство. Можно, конечно, обмануть, но это только в том случае, если флудер знает что у Тебя за алгоритм применён и помимо этого он ещё и мозгом обладает, что редко.
ЗЫ. Тут несколько постов выше я приводил числовую последовательность (9 байт) и говорил, что её можно ужать до 10 бит. Наврал по ошибке. До 45 бит. Странно, что никто не поправил.
|
| | | | | | |
волшебное слово stemming 03.12.04 13:00
Автор: paganoid Статус: Member
|
Есть такая хрень - stemming , используется для определения основы слова в языке. Для русского уже такой
модуль есть, поищи в гугле. Заодно есть список "общих" слов , типа "я ты он она вместо вообще такой какой". Если в сообщении нету ни одного "общего слова", как в твоем "дурак дурак дурак" и есть повторения, то сообщение не канает. Но опять же, никто не мешает повторять фразы. Это вечный процесс.
|
|
|