Pull to refresh

Вышла библиотека PyWhat для автоматического парсинга трафика

Reading time 2 min
Views 4.7K
Дата-центр «Миран» corporate blog Information Security *Python *Programming *Machine learning *


Разработана удобная библиотека PyWhat, которая помогает классифировать данные в неструктурированном массиве. Например, у вас несколько мегабайт трафика, записанного в стандартном формате .pcap. Что с ним делать? PyWhat спарсит все строки, выделит:

  • кошельки криптовалют,
  • номера социального страхования,
  • кредитные карточки,
  • заголовки видеороликов Youtube ID,
  • любые хэши,
  • другие известные типы данных.
Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 0

Суд запретил Double Data использовать данные пользователей «ВКонтакте»

Reading time 2 min
Views 4.8K
Big Data *Legislation in IT Social networks and communities IT-companies

Девятый арбитражный апелляционный суд Москвы отменил решение суда первой инстанции и признал в действиях компании Double Data нарушение прав на использование базы данных «ВКонтакте».

Читать далее
Total votes 12: ↑11 and ↓1 +10
Comments 6

Возможно это ваш аватар, %username%

Reading time 2 min
Views 2.8K
Interfaces *
Совсем недавно гуляя от нечего делать по просторам Интернет, решил поискать все мои загруженные аватары через всем известные поисковики картинок. И тут, как оно всегда бывает, пришло озарение…

При регистрации на всякие веб-сооружения будто форумы блоги и др. дозволяется использовать свой аватар, загружая его из компьютера, вводя его URL или же выбирая одну из аватар в галерее. // юзер на распутье
Первый путь не хорош тем, что не каждый пользователь хранит свою аватрау на видном месте и ему приходится искать по всему компьютеру.
Второй аналогичен первому, только искать приходится в закладках и др.
Третий путь — euronews на этом месте бы показал часть галереи аватар рядового форума с подписью «no comment».
Есть и четвертый путь.
Читать дальше →
Total votes 73: ↑62 and ↓11 +51
Comments 35

Парсим выдачу Яндекса

Reading time 10 min
Views 36K
PHP *
Приветствую всех читателей!

Я начал заниматься SEO недавно, и сразу же столкнулся с задачей определения позиций продвигаемых сайтов по ключевым словам в поисковиках. Задача тривиальная и решается на ура различным ПО, которое у всех SEO-специалистов на устах: Semonitor, AllSubmitter, etc. Помимо проприетарности, которой попахивает от всех подобного рода программ, в них есть, как это не парадоксально, ряд технических моментов, из-за которых хочется выбросить компьютер в окно.
Я бы не прочь купить Semonitor, но попользовав демо-версию, решил от этой идеи отказаться — на оф.сайте программы доступная для скачивания версия у меня глючила, требовала обновить себя, а после выпрошенного у меня обновления и вовсе отказывалась заниматься анализом позиций. Самому настроить, как Вы понимаете, нельзя.
AllSubmitter в этом плане получше, позволяет даже кастомизировать регулярные выражения для поисковиков, что вроде как делает этот софт устойчивым к смене формата выдачи, однако и с ним не все слава богу — когда 18.08.2008г. Яндекс вдруг изменил формат выдачи результатов поиска, вместе с тем поменяв и URL ссылок (возможно, эксперименты с вводом учета переходов, подробнее об этом писалось здесь), то и AllSub оказался бессилен. Правда, на следующий день Яндекс снова вернулся к старому формату выдачи, но прецедент, тем не менее, произошел.
Читать дальше →
Total votes 51: ↑29 and ↓22 +7
Comments 17

Выкусывание текстовой даты из абстрактной текстовой строки

Reading time 1 min
Views 827
Lumber room
Это пока что пост-вопрос, я уже в процессе и обещаю поделиться наработками. Для одного из сервисов мне нужен некий механизм — мы даём пользователю возможность ввести дату в любом текстовом виде, но в момент парсинга должны точно понять, что он имел в виду. Задача немного упрощается тем, что всё происходит на английском языке. Например вот:
Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Comments 17

Введение в поиск по тексту

Reading time 5 min
Views 2.5K
Search engines *
Наверное любой программист хоть раз в жизни стоял перед задачей поиска в строке какой-нибудь подстроки. Когда-то столкнуться с этим пришлось и мне. С тех пор это дело мне весьма полюбилось. Не сказать, что я в этом многого достиг, но останавливаться не собираюсь.
Потому и решил написать, но, чтоб начать более или менее плавно, вступление сделать в виде нескольких вводных статеек по основам текстового поиска.

читать дальше
Total votes 59: ↑57 and ↓2 +55
Comments 16

Альтернатива брутфорсу. Текстовый поиск с хеш-функцией

Reading time 7 min
Views 1.9K
Information Security *
Ранее я уже писал об азах текстового поиска, теперь хочу продолжить и написать о том, как развиваются алгоритмы в сторону эффективности.
Итак, как Майкл Рабин и Ричард Карп разогнали алгоритм?

читать далее
Total votes 61: ↑57 and ↓4 +53
Comments 19

Gmail grabber — класс парсинга контактного листа

Reading time 5 min
Views 822
Lumber room
Собственно говоря читайте сабж.

Функции:

Login — Вход в gmail. Возвращает стандартно — true/false
Сразу после входа в систему проиходит импорт контактного листа в переменную ContactList
Читать дальше →
Total votes 19: ↑11 and ↓8 +3
Comments 9

Prett Parsing — метод Вогана Пратта для разбора выражений

Reading time 3 min
Views 5.1K
Algorithms *
В тему компиляций и вычислений выражений.

В далёком 1973 году Воган Прэтт (Vaughan Pratt) предложил простой и эффективный метод разбора выражений, не использующий ни автоматы, ни грамматику как таковую.

Идея заключается в том, что каждый символ (token) наделяется свойствами:
lbp = приоритет связывания символа слева,
nud = функция, определяющая результат применения оператора в начале выражения,
led = функция, определяющая результат применения в середине выражения.

Основной разбор осуществляется по схеме:
разбор(приоритет продолжения):
    вытолкнуть символ из входного потока
    результат = вызов nud этого символа
    пока приоритет lbp следующего в потоке символа > приоритета продолжения:
        вытолкнуть символ из входного потока
        результат = применени led этого символа к текущему результату

Константы и переменные имеют приоритет связывания 0, а функция nud возвращает их значение (или ссылку). Поэтому применение разбора к константам сразу возратит их значение.
Для бинарных операторов функция led рекурсивно вызывает продолжение разбора (справа) вплоть до более низкого приоритета, и делает что-нибудь с уже накопленым (слева) результатом, и полученным рекурсивно.
Результат применения оператора аггрегируется для внешнего вызова.
Много-арные операторы — получают аргументы дополнительным вызовом функции разбора.
Префиксные операторы делаются с помощью определения для них функции nud.
Для правостороннего связывания меняется приоритет продолжения рекурсивного разбора.

На сайте effbot.org приводится подробная реализация на питоне.
Там же есть ссылки для жаваскрипта и схемы.
наглядный пример на питоне
Total votes 38: ↑36 and ↓2 +34
Comments 15

Еще о парсинге на Prolog'е

Reading time 7 min
Views 3.8K
Prolog *
Вот тут наткнулся на, в общем-то, простую задачку состоящую в парсинге текстового файла, содержащего 5 миллионов float'ов (и подсчете их суммы). Файл генерируется следующим C#-кодом:
static void Main(string[] args)
{
  using (Stream stm = new FileStream(@"d:\numbers_large.txt", FileMode.Create))
  {
    TextWriter wr = new StreamWriter(stm);
    System.Random r = new System.Random();
    for (int i = 0; i < 5000000; i++)
    {
      double d=10000*r.NextDouble() * (r.NextDouble() > 0.7 ? -1.0 : 1.0);
      wr.Write("{0} ", d);
    }
    wr.Flush();
  }



Задача ставилась в контексте обсуждения производительности haskell'я в применении его к задачам парсинга. Я знал, что на прологе подобные задачи решаются красиво и непринужденно используя технику DCG (Definite clause grammar: 1, 2, 3, 4). Фактически, это описание грамматик на языке Пролог, и парсинг по ним, основанный на переборно-откатном принципе работы пролога.

Ну то есть обычно получается очень кратко и красиво (например, вот решение задачки о сбалансированности скобок этим методом: программа из 7 строк), но, я подозревал, что не всегда быстро. Собственно, это мне захотелось проверить.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Comments 7

Musifire — поиск музыки по заданным пользователем сайтам

Reading time 2 min
Views 730
Lumber room
Musifire screenshot

Сначала


Как-то давно, когда у меня внезапно поломался плеер last.fm, я решил, что напишу свой плеер с блекджеком и шлюхами. Так появился первый Musifire — программа, написанная на Flex+AS3 под Adobe AIR, которая искала музыку на паре отличных ресурсов, умела брать похожих исполнителей и песни с last.fm'а и составлять по ним плейлисты. Благодаря фидбеку от десятка юзеров удалось довести программу до более-менее приличного вида, хотя всякие мелкие неприятные баги остались там и по сей день. После этого я ее забросил, потому что мне совсем не нравилось, как был написан код, а переписывать было жутко лень. :) Его я, кстати, выложил на Sourceforge, каждый может сходить, посмотреть, чекаутнуть и поужасаться :)

Сейчас


Вторым стимулом в написании такого рода программы была практика разработки на as3, и практика обработки данных разных форматов. И вот недавно снова возникла потребность в улучшении своих навыков программирования и обработки данных.
И поэтому я решил, что все должно быть круче, чем в первый раз.
Total votes 36: ↑35 and ↓1 +34
Comments 66

Текст любой ценой: DOCX и ODT

Reading time 4 min
Views 61K
PHP *
Недавно возникла задача получения чистого текста из различных форматов документооборота — будь-то документы Microsoft Word или PDF. Задача была выполнена даже с чуть более широким списком возможных входных данных. Итак, этой статьёй я открываю список публикаций о чтении текста из следующих типов файлов: DOC, DOCX, RTF, ODT и PDF — с помощью PHP без использования сторонних утилит.

Читать дальше →
Total votes 113: ↑98 and ↓15 +83
Comments 60

Текст любой ценой: PDF

Reading time 12 min
Views 84K
PHP *
Продолжаем разбирать текстовые форматы на предмет получения текста. Итак, обещанный ранее PDF.

С portable document format'ом не всё так просто, как DOCX или ODT, что мы рассматривали в прошлый раз, но всё же это всё ещё изначально текстовый, а не бинарный формат. Вы удивлены? Тогда давайте посмотрим на то, что там внутри. Дальше действительно много текста.

Читать дальше →
Total votes 77: ↑75 and ↓2 +73
Comments 20

Текст любой ценой: RTF

Reading time 14 min
Views 83K
PHP *
Что ж продолжим наши изыскания на предмет получения текста из различных форматов данных. Не так давно мы с вами научились вытаскивать текст из zipped-xml-based файлов (odt и docx), а также, в начале этой недели, из pdf. Сегодня мы продолжим с обещанным rtf.

Rich Text Format (он же rtf), вы могли бы подумать, достаточно забытый, хотя и не очень сложный формат представления текстовых данных. Что ж, относительно несложный для получения текста, но за свою историю: от своей первой версии до текущей 1.9.1 — он приобрёл под 300 страниц официально документации и огромное количество надстроек, которые в большей степени нам будут мешать при получении plain text'а. Попробуем их обойти…
Читать дальше →
Total votes 67: ↑60 and ↓7 +53
Comments 49

Текст любой ценой: WCBFF и DOC

Reading time 9 min
Views 27K
PHP *
Несколько позже, чем хотелось, но продолжаем наш разговор о получении текста из разных форматов данных. Мы с вами уже познакомились с тем, как работать с изначально XML-base файлами (docx и odt), прочитали текст из pdf, преобразовали содержимое rtf в plain-text. Теперь перейдём в вкусненькому да сладенькому — формату DOC.
Читать дальше →
Total votes 72: ↑67 and ↓5 +62
Comments 25

PHP: массивы, возвращаемые функцией

Reading time 4 min
Views 10K
Abnormal programming *
Мне нравится PHP (если вам не нравится — пожалуйста, забудьте про этот топик. Не надо холиварить) и еще мне нравится одна штука, которая прям везде есть, а в PHP отсутствует:

superFunction(foo, bar)[2];


Что делает этот код? Правильно! Возвращает третий элемент массива, который возвращает superFunction() с аргументами foo и bar.

В PHP-синтаксисе это выглядело бы так:

superFunction($foo, $bar)[2];


Вот только этот код выдает Parse Error. «И поделом!» — раздаются уж крики ненавистников синтаксического сахара. Я предлагаю им тоже отправиться подальше от этого топика, чтобы не холиварить и не доказывать, что это не нужно (посмотрите, в каком я блоге это разместил, в конце-то концов).

На сайте PHP я узнал, что такого синтаксиса разработчики позволять не планируют даже в 6 версии. Ну, блин. Я и сам — молодец! Итак, за ночь я написал небольшой класс, который, если его правильно использовать, разрешает работать с массивами по-человечески.

мне не страшно
Total votes 78: ↑43 and ↓35 +8
Comments 113

Текст любой ценой: PPT

Reading time 3 min
Views 4.8K
PHP *
Некоторое время назад мы с вами обсуждали получение чистого текста из различных форматов данных: будь то PDF или DOC. В одном из обсуждений был высказано предположение, что при парсинге презентаций PowerPoint я заработаю геморрой или другую страшную болезнь мягкой точки. Что ж, волей судеб мне пришлось доставать текст и из этого «сладенького» формата. Скажу честно, геморрой заработать не удалось, а вот класс для парсинга презентаций вышел.
Читать дальше →
Total votes 54: ↑46 and ↓8 +38
Comments 31

LogParser — привычный взгляд на непривычные вещи

Reading time 5 min
Views 52K
SQL *
Когда я в очередной раз использовал LogParser, то чтобы проникнуться и чужим опытом, ввел его название в поиск на Хабре. Как результат — сообщение «Удивительно, но поиск не дал результатов». Вот уж воистину удивительно, когда столь интересный инструмент обойден вниманием. Пришла пора восполнить этот пробел. Итак, встречайте LogParser. Маленькая, но чертовски полезная утилита для любителей SQL.

Из названия инструмента, казалось бы, очень непросто понять, что он делает в разделе SQL. А правда заключается в том, что он такой же LogParser, как и ChartGenerator. В то смысле, что он справляется с обоими задачами с одинаковыми успехом. В целом я бы его охарактеризовал как SQL-процессор гетерогенных данных. Концепция работы в общем такова, что он берет данные из некоторого формата и преобразует их в табличный вид (собственно говоря, только на этом этапе и выполняется иногда парсинг). Затем, посредством выполнения над этими табличными данными некоторого SQL-запроса формирует таблицу с результатом и сохраняет ее опять же в некотором формате. Если коротко, то цепочка выглядит как подготовка входных данных->SQL-процессинг->генерация выходных данных.
Читать дальше →
Total votes 56: ↑46 and ↓10 +36
Comments 17

MODx и парсер таблички с чужого сайта

Reading time 4 min
Views 2.1K
Lumber room
Наверное любой программист слэш администратор сайта сталкивается с проблемой импорта данных с чужих сайтов. Задача эта очень тривиальна, и не требует каких-то особых знаний… вопрос только в обертке. Чтобы дополнить коллекцию статей по MODx пишу эту статью, быть может кому и пригодится.
Внимание! Никакой практической ценности данная запись не несет, только теоретическую нагрузку а-ля «Простой пример работы с back-end'ом MODx».
А задача была: таблицу со страницы example.com распарсить, переоформить и себе на сайт засунуть.
Читать дальше →
Total votes 13: ↑10 and ↓3 +7
Comments 9