Кто-нибудь тут знает perl ? Напишите бота для форума

Тема в разделе "Машинное отделение", создана пользователем drowsy, 30 сен 2007.

  1. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Нужно написать бота для приёма голосований/подсчёта и публикации результатов.
    А то Amati уже совсем замучился, думаю. По сотне прогнозов каждый день вводить/обсчитывать и на форум выкладывать ручками...
     
  2. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    хотя я может сам напишу...
     
  3. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    уже написал большую часть. Основная проблема в том, что в постах ещё и обсуждение есть,
    и нужно как-то выдирать текст с предсказаниями.
    Вот если бы всех заставить писать так
    в стандартном формате, то было бы гораздо легче. Но тогда я мог бы делать вид, что пощу предсказания из под ника Креста, что нехорошо, ник нужно из текста страницы выдирать. Ещё и время проверить, чтобы не читерили. Скоро добью прогу...
     
  4. vasa
    Оффлайн

    vasa Опытный перворазрядник Команда форума Команда форума

    Репутация:
    585
    И очень просто. Кто не напишет так ,как надо, того прогноз просто не учитывать и всё! Разочек "попадут" и сразу все научатся.
     
  5. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    vasa, лол. Процентов на 80 написал уже, но скоро спать пора :) Потом на чемпионате протестирую(темы не удаляйте, пожалуста!!! мне для тестов бота надо)
     
  6. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Никого не надо заставлять. Если уж делать, так сразу по уму - просто четыре радиобаттона, на каждую партию - в каждом три варианта исходов.
    Имя пользователя и так форумному движку известно.

    Суть в том, что это должно быть именно расширение функциональности движка, а не сторонняя перловая приблуда.
     
  7. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    ну да, так было бы проще. WinPooh — напишите ?!
     
  8. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    На самом деле и так уже всех почти приучили копировать первый пост и менять только ник и результаты, осталось
    только "прогноз" в начале попросить добавить, чтобы было легче отделять посты с прогнозами от постов без. Завтра проснусь и допишу, думаю.
     
  9. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Увы, я давно отошёл от веб-программирования. Мне дольше вспоминать PHP и разбираться в устройстве конкретного движка, чем настоящему мастеру на коленке за пять минут написать :)
     
  10. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    WinPooh, я тоже лет 5 не программировал(на перле так вообще никогда, но он простой очень). Мне просто Amati жалко.
     
  11. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

    Репутация:
    8
    Хорошая идея. Сам не возьмусь, пока со временем напряг. Но есть пара мыслей.

    Ничего не нужно встраивать в движок форума. Простенький скрипт просматривает ветку и выбирает посты с прогнозами, по паттерну. Это несложно всё. Не нужно слова "прогноз", это некрасиво. Просто поиск постов с паттерном типа "<имя> - <имя>[:] <результат>\n" x N. Имена из списка имён по текущему турниру (в конфигурации скрипта), результат - нужно учесть все популярные способы как люди пишут результат: 1/2, 0.5-0.5, и так далее.

    Результаты работы скрипт либо постит в форум либо показывает сам, не принципиально. Преимущества такого подхода: 1. Не нужно возиться с интеграцией кода в форумный движок. 2. Нет завязки на конкретный движок (легко настроить на другие движки, например phpBB). 3. Движок форума можно безболезненно обновлять не боясь что что-нибудь заглючит.

    EDIT: хотя может и сделаю если никто не сделает до момента когда смогу этим заняться.
     
  12. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Kirr, у меня уже почти всё написано(perl мощный язык для таких вещей), осталось отладить и оттестить.
     
  13. romm
    Оффлайн

    romm KMC баннер

    Репутация:
    0
    Перл - слишком мощный язык... Мне тут довелось править проект, написанный людьми на перле по ходу изучения. Такое болото. Так что с нуля на перле лучше не надо, говорю, как человек, кормящийся перлом уже 12+ лет...
     
  14. Crest
    Оффлайн

    Crest Админ, МГ Команда форума Команда форума

    Репутация:
    628
    Неужели вам удастся предусмотреть все варианты написания прогнозов?
    Распознавание образов...

    Фамилии, результаты, предварительные записи...

    0,5
    0,5 - 0,5
    0,5-0,5
    1/2
    1/2-1/2
    1/2 - 1/2
    ничья,
    рыба! :)

    Наверное, все.
     
  15. Amati
    Оффлайн

    Amati Команда форума Команда форума

    Репутация:
    0
    Большое спасибо drowsy за заботу обо мне, грешном! :)

    А по поводу распознавания, я лично поступил бы по совету Крылова: "там речей не тратить по-пустому, где нужно власть употребить". Иначе говоря: если вы хотите проголосовать - вот вам стандартная форма подачи прогноза. Кто ей не следует (не может, не хочет, забыл и т.п.) - извините, ваша проблема. Если человеку действительно интересно поучаствовать в конкурсе прогнозов, у него достанет серого вещества отформатировать четыре строчки дОлжным образом. В конце концов, краеугольным камнем хорошего программирования всегда был девиз "Минимум свободы пользователю, а еще лучше - никакой!", потому что "дураки очень изобретательны". :)
     
  16. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Плюс всё то же самое с двоеточием вместо дефиса.
     
  17. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

    Репутация:
    8
    Плюс то же самое с точкой вместо запятой. И ещё была 1/2 одним символом. :)
     
  18. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    На перле я не писал, просто читал/слегка модифицировал код одного проекта(блин, нафига гигантские программы на перле писать...). Код обработки форума для выдирания прогнозов/проверки времени/выдирания из исходников html ника мне написали гораздо более опытные программисты(причём очень быстро...). То бишь даже читеров, которые правят посты/постят поздно уже отрезали. Вот с просьбами о ничейных болванах сложнее, тут AI нужно.
     
  19. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Код:
    #       check for white win
            if ($result =~ /^(1\s*(-|:|\s)\s*0)/) {$result = "1-0";}
    #       check for black win
            if ($result =~ /^(0\s*(-|:|\s)\s*1)/) {$result = "0-1";}
    #       check for draw
            if ($result =~ /^((1\s*(\\|\/|:|\s)\s*2)|((0\s*(\\|\/|:|,|.|\s)\s*5))|(ничья)|рыба)/)
                    {$result = "1/2";}
    Вот такое у меня на 3-х турах сработало для 100% прогнозов. Может когда по всем турам пройдусь ещё каких-нибудь извращенцев найду, но их всё меньше непокрытых этими выражениями. 1/2 одним символом никто постить не будет. Кто запостит — тому в лоб :)

    Сrest, это вам только кажется, что у вас всё. А как по всем прогнозам пройдёшься, столько нетривиальных вариантов находится. :)
     
  20. apm
    Оффлайн

    apm Учаcтник

    Репутация:
    0
    Могу помочь с перловым кодом, если есть необходимость.
     
  21. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    да не, поздно помогать, уже вовсю тестирую. Смотрю почему мои результаты и Amati не сходятся.

    Пока вылазят всякие смешные причины типа кто-то в приват прогноз послал, или написал "мне ничейного болвана" или ещё у всех фамилии игроков по русски, некоторые индивиды хотят отличиться, по английски пишут :)
     
  22. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    e217 зарежу — это блин надо "1-0" написать как "1.0"

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

    loque отличился, написал ничью как "½"(одним символом) :)
     
  23. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    блин, час искал ошибку(почему-то мои результаты не сходились с вычислениями Амати), оказалось опять один товарищ выдал Швиндель — фамилии написал по английски. Блин !
     
  24. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Попробуй брать автора поста.
    <dt><strong><a href="profile.php?id=353">drowsy</a></strong></dt>
    Блин, не заметил. Фамилии участников?
     
  25. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Да, фамилии игроков он по своему написал. Офигели совсем :)
    Nickname у меня выдирается из поста, время поста теперь тоже проверяется.
     
  26. Amati
    Оффлайн

    Amati Команда форума Команда форума

    Репутация:
    0
    А что я говорил в №15? ;)
     
  27. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

    Репутация:
    8
    Главное чтобы имя автора прогноза бралось не из содержимого поста, а то можно будет постить свои прогнозы и заодно корректировать прогнозы конкурентов. :)
     
  28. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    я имел в виду выдираеться из кода страницы, в запарке ошибся :(
     
  29. Crest
    Оффлайн

    Crest Админ, МГ Команда форума Команда форума

    Репутация:
    628
    Народы! Устроитель опроса может и, видимо, должен делать в первом посте приписку - мол, прошу копировать пары из этого поста. Методом копи-пейст. Не менять язык! И тот же порядок пар оставлять.

    Уверен, что народ сможет это воспринять, тем более что большинство уже сейчас так и делает.
     
  30. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Crest, порядок пар мне пофигу, лишь бы фамилии были те же самые. Некоторую свободу я заложил — порядок прогнозов не важен, можно после прогноза комментарии писать типа Karpov-Kasparov 1-0(ляляля), можно ставить не на все пары, результат можно приписывать в любом формате и с пробелами в случайном формате, всё срабатывает на тех турах, которые рассчитывал Амати.

    Но если фамилии игроков писать на разных языках и в разных варантах — это, конечно, финиш.
     
  31. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Амати, верните людям честно заработанные:
    второй тур:

    nickname 97:"ПАвел"
    Крамник-Морозевич 1-0
    Аронян-Ананд 1/2
    Гельфанд-Грищук 1/2
    Свидлер-Леко 1/2

    По 3 очка: Павел

    третий тур:

    Faust
    Морозевич - Свидлер 1-0
    Ананд - Крамник 1/2
    Грищук - Аронян 0-1
    Леко - Гельфанд 1/2
    По 3 очка: ... Faust
    Мой бот пишет 4: Faust...

    nickname 5:"thenewone"
    Морозевич-Свидлер 1/2
    Ананд-Крамник 0-1
    Грищук-Аронян 1/2
    Леко-Гельфанд 1-0

    Одно очко ему. А Амати записал 3, о чём thenewone благоразумно умолчал :) Болгары, они все такие :)

    nickname 103:"ajax111"
    Морозевич-Свидлер 1/2
    Ананд-Крамник 1/2
    Грищук-Аронян 0-1
    Леко-Гельфанд 1-0

    Одно очко ему. У Амати 2. Щас мы всех прижучим расхитителей социалиссицеской собственности...
     
  32. drowsy
    Оффлайн

    drowsy Учаcтник

    Репутация:
    0
    Прогнал бота по всем турам, посчитались все, кроме 6-го тура. Там такая неразбериха была, что даже бот сдох. Так что финальные результаты у меня только без 6-го тура. Посмотрел очки первой тройки, мои, ivank'a, если очки за 6-ой тур прибавить, то всё сходится прекрасно. До 6-го тура очки бота и Amati сходились полностью. Сегодня-завтра я очки за 6-ой тур боту введу вручную, и посмотрю, сходяться ли очки за 14-й тур после этого.

    Теперь о проблемах:
    1. Прогнозы, посланные в приват, бот не учитывает. Ну хоть убей.

    2. так же не понимает фамилии написанные на английском( Aronyan and Aronian встретились даже).
    3. Некто loque пишет ничью как ½, одним символом. Это у меня пока не обрабатывается. Также и "ничья" c "рыбой". Такие строчки боту слишком тяжело отличить от обычного текста, вероятность ошибки резко повышается. Но любые варианты с
    1/2 1\2 0.5 0,5 работают. 0/5 и 0\5 включать не буду — 0/5 равен нулю, и баста.

    4.
    Бот не телепат :)

    5.
    e271 ещё такую гадость постил. Хотя программа выдала предупреждение и я его видно сразу...

    6.
    И прогноз на следующие туры в посте
    Такое боту не канает...

    7.
    Нет уж :) Да и зачем тогда в прогнозе участвовать...

    8.
    Просьба править свой пост с первым прогнозом. Если будет два прогноза, то бот не знает какой из них учитывать, а какой нет. Редактирование поста боту не помеха.

    9.
    У меня уже почти готов Искусственный Интеллект, который такие посты обрабатывает...

    10.
    no comments

    11.
    Бот вырезает ник из текста html страницы, а не из поста, а ваши ники в начале воспринимает как обычное обсуждение тура. Если вырезать ники из текста поста, то начнутся проблемы — описки, читеры, которые пишут чужое имя и т.п.

    12.
    Лучше никогда, и уж тем более не в тех же самых ветках, что и голосование. Бот на такие посты ругаеться.

    Болгарин ещё раз отличился — предложил свою систему и везде её пихал. Зачем везде было её пихать ?

    13.
    Бот не принимает голосования, сделанные позже чем 1 минута после начала тура(Я так решил:) ).
    Хотя константу можно и поменять :)

    14.
    DOOM, 1-2-1-2=-4 !!!!!!

    15.
    А редактирование на форуме зачем? Нет, пусть редактируют...

    16.
    17.
    1/0 неопределено, 0/1=0 :) Я, конечно, могу сделать, чтобы бот такое обрабатывал, но это уже бессмыслица. Никто же не пишет 1/0, это деление.
    мда, это я сам отличился.


    PS комментарии в прогнозе типа "Карпов-Каспаров 1-0 (Каспаров сегодня сольёт)"
    и обсуждение выше/ниже прогноза бот замечательно игнорирует. С ними проблем нет. Порядок пар в прогнозе тоже не важен, но фамилии должны совпадать 100%.

    Предлагаю такую систему — все копируют прогноз из первого поста и только меняют результат
    победа белых 1:0 1-0 (+случайные пробелы разрешены) Так же обрабатывается "1 0" и 1.0
    победа белых 0:1 0-1 (+случайные пробелы разрешены) Так же обрабатывается "0 1" и 0.1
    ничья: 1/2, 1\2 , 0.5 , 0,5 и их парные аналоги. Слова типа ничья и рыба мне не нравятся тем, что строчка
    "Карпов-Каспаров рыба" очень похожа на обычное обсуждение, а не на прогноз.


    Бот автоматически скачивает все страницы из thread'а с туром, отрезает все посты после начала тура,
    и вытаскивает nicknames людей, которые постили и их предсказания. Сохраняет в файл и его обрабатывает,
    для каждого тура отдельно сохраняеться таблица очков и log-file c вычислениями и с иррегулярностями, которые бот
    не смог обработать(их мало, в основном бота донимали loque и thenewone). Красивая печать таблицы как у Amati тоже есть. Когда там следующий турнир ? :)

    Часть, которая обрабатывает html код форума и выдирает ники/предсказания/проверяет время мне помогли написать
    fedechka и olleg с форума МГУ. Им за это спасибо! :) Особенно olleg'у.
     
  33. Crest
    Оффлайн

    Crest Админ, МГ Команда форума Команда форума

    Репутация:
    628
    Ах, если бы он еще и понимал просьбы зачесть ничейного болвана... :)

    Ключевые слова напрашиваются... Дорогой, любезный вы наш Амати, не будете ли вы столь добры, пойти мне навстречу, оказать мне такую услугу, буду премного благодарен...
     
  34. ivank
    Оффлайн

    ivank Учаcтник

    Репутация:
    0
    Да, это самые главные результаты :).
     
  35. Kirr
    Оффлайн

    Kirr Команда форума Команда форума

    Репутация:
    8
    Теоретически можно дать боту аккаунт и пусть читает приват и парсит так же как ветку. Только нужно придумать как он распознает к какой ветке относится сообщение. Например в заголовке личного сообщения должен содержаться заголовок темы.


    EDIT: можно даже чтобы бот отвечал "ваш прогноз принят" (или не принят) :)