k001
k001
:...

April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

k001 [userpic]
wiki spam checker

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

Тулза представляет из себя дикую смесь shell-скриптов с вкраплениями sed, awk, sort и т.п. Воткнул вызов в крон, получаю отчёты по почте. Вот пример отчёта:

-274.38	http://wiki.openvz.org/w/index.php?title=Talk:Main_Page&oldid=7616&diff=7852
  -8.00	http://wiki.openvz.org/w/index.php?title=Compiling_the_OpenVZ_kernel_(the_Debian_way)&oldid=6641&diff=7857
   0.00	http://wiki.openvz.org/w/index.php?title=Main_Page&oldid=7484&diff=7854
   0.00	http://wiki.openvz.org/w/index.php?title=Template:List_of_precreated_contrib_templates&oldid=7572&diff=7856
  31.22	http://wiki.openvz.org/w/index.php?title=Download_mirrors&oldid=7467&diff=7855
 100.67	http://wiki.openvz.org/w/index.php?title=A_managed_OpenVZ_installation&oldid=7834&diff=7846
 140.15	http://wiki.openvz.org/w/index.php?title=Multiple_network_interfaces_and_ARP_flux&oldid=7835&diff=7847
 187.22	http://wiki.openvz.org/w/index.php?title=Installing_Trixbox_2.0_in_CentOS_VE&oldid=7833&diff=7845
 233.31	http://wiki.openvz.org/w/index.php?title=PPP_in_container&oldid=7836&diff=7848
 274.38	http://wiki.openvz.org/w/index.php?title=Talk:Main_Page&oldid=7852&diff=7853


В каждой строчке оценка изменения и ссылка на него. Отчёт отсортирован так, чтобы вначале были изменения с самыми плохими оценками (более всего похожие на спам, с точки зрения программулины).

Буду примерно месяц эксплуатировать в тестовом режиме, чтобы понять, помогает ли. Пока ощущения скорее положительные.

Comments

Слушай, а слабо в MediaWiki проект его заслать? И можно ли сделать чтобы было не важно знают ли люди как с ним бороться или нет?

Метод основан на частотном анализе текстов (и поэтому не подойдёт as is для всяких крупных вик, типа wikipedia… хотя там можно поиграться с категориями). OpenVZ wiki имеет довольно узкую специфику, поэтому тут он подходит хорошо. Идея (в упрощённой форме) в том, что множество слов, используемых сейчас на вики, сравнивается с множеством слов, которые добавляет (и удаляет) правка, и на основании сравнения даётся оценка.

Раскрыть код я боюсь потому, что он даст идеальный инструмент для обхода себя самого. То есть, наверняка спамеры используют spam assassin для оптимизации своих спамных текстов (и бороться с этим можно только существенной перенастройкой этого спам отсосина в своей инсталляции). Я не хочу, чтобы тут было то же самое (а бороться перенастройкой особенно не могу, потому что у меня (пока?) мало настроечных ручек, верньеров, тумблеров и прочих рычажков).

Имей ввиду что частотный анализ работает на больших кусках текстаи и может не очень работать на маленьких правках.

Что касается категорий, то тут вполне можно использовать ибо в массе своей объём текста внутри категории будет стабилен по сравнению с объемом текста в одном документе. Но всё зависит от конкретной вики, конечно.

> частотный анализ работает на больших кусках текста
> и может не очень работать на маленьких правках

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

любая правка может стать сколь угодно "полезной" если в неё добавить кусок из другой статьи?

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

Суть вот в чём. Сделать вики по принципу DVCS: любой желающий может поменять любую страницу, регистрация не обязательна. Однако изменения будут видны только ему. Можно мержить разные версии (то есть версии разных пользователей) страниц в одну. Группа доверенных пользователей переключает ссылку на "активную" версию.

То есть я могу изменить страницу, но вместо /main будет ссылка /user/temoto/main, например. Я могу смержить свою версию с версией пользователя Х. И всё еще получу "свою" ссылку. Но доверенный пользователь М может переключить /main на показ моей версии. При условии неизменяемости конкретных версий страниц (каждое изменение порождает копию), это безопасно.

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

Существование различных копий контента позволяет сделать на /main ссылки типа "посмотрите также вариант юзера Х, Т, Г".