Pull to refresh
28
0
Виктор Кудлак @WriteX

DevOps

Send message

Yargy-парсер и библиотека Natasha. Извлечения структурированной информации из текстов на русском языке

Reading time12 min
Views85K
В 2020 году библиотека Natasha значительно обновилась, на Хабре опубликована статья про актуальную версию. Чтобы использовать инструменты, описанные в этом тексте, установите старую версию библиотеки pip install natasha<1 yargy<0.13.

Раздел про Yargy-парсер актуален и сейчас.


Есть стандартная задача извлечения именованных сущностей из текста (NER). На входе текст, на выходе структурированные, нормализованные объекты, например, с именами, адресами, датами:



Задача старая и хорошо изученная, для английского языка существует масса коммерческих и открытых решений: Spacy, Stanford NER, OpenNLP, NLTK, MITIE, Google Natural Language API, ParallelDots, Aylien, Rosette, TextRazor. Для русского тоже есть хорошие решения, но они в основном закрытые: DaData, Pullenti, Abbyy Infoextractor, Dictum, Eureka, Promt, RCO, AOT, Ahunter. Из открытого мне известен только Томита-парсер и свежий Deepmipt NER.

Я занимаюсь анализом данных, задача обработки текстов одна из самых частых. На практике оказывается, что, например, извлечь имена из русского текста совсем непросто. Есть готовое решение в Томита-парсере, но там неудобная интеграция с Python. Недавно появилось решение от ребят из iPavlov, но там имена не приводятся к нормальной форме. Для извлечения, например, адресов («ул. 8 Марта, д.4», «Ленинский проезд, 15») открытых решений мне не известно, есть pypostal, но он чтобы парсить адреса, а не искать их в тексте. C нестандартными задачами типа извлечения ссылок на нормативные акты («ст. 11 ГК РФ», «п. 1 ст. 6 Закона № 122-ФЗ») вообще непонятно, что делать.

Год назад Дима Веселов начал проект Natasha. С тех пор код был значительно доработан. Natasha была использована в нескольких крупных проектах. Сейчас мы готовы рассказать о ней пользователям Хабра.
Natasha — это аналог Томита-парсера для Python (Yargy-парсер) плюс набор готовых правил для извлечения имён, адресов, дат, сумм денег и других сущностей.
В статье показано, как использовать готовые правила из Natasha и, самое главное, как добавлять свои с помощью Yargy-парсера.
Читать дальше →
Total votes 87: ↑86 and ↓1+85
Comments33

Архитектура построения Single Page Application на основе AngularJS и Ruby on Rails

Reading time8 min
Views23K
Заинтересовавшись методологией построения SPA-приложений на Ruby on Rails, я пришел к некоторым идеям, которые реализуются теперь в каждом моем приложении и впоследствии даже были выделены в отдельный гем Oxymoron. На данный момент на Oxymoron написано более 20 достаточно крупных коммерческих рельсовых приложений. Хочу вынести гем на общественный суд. Поэтому дальнейшее свое повествование буду вести уже на его основе.

Пример готового приложения.
Читать дальше →
Total votes 17: ↑15 and ↓2+13
Comments5

Пишем форум с нуля на Ruby on Rails и AngularJS

Reading time27 min
Views39K
Не так давно я рассказывал о геме Oxymoron, позволяющем очень просто и быстро строить современные Single Page Application на AngularJS и Ruby on Rails. Статья была встречена весьма позитивно, поэтому пришло время написать более-менее сложное приложение, чтобы показать все возможности гема.
Читать дальше →
Total votes 36: ↑29 and ↓7+22
Comments31

Почему ваш веб-сайт должен быть меньше 14 КБ

Reading time6 min
Views71K

Чем меньше веб-сайт, тем быстрее он грузится, и это неудивительно.

Удивительно то, что страница на 14 КБ может грузиться гораздо быстрее, чем страница на 15 КБ, даже на 612 мс быстрее, хотя разница между страницами на 15 КБ и 16 КБ минимальна.

Так происходит из-за алгоритма медленного старта TCP. В этой статье я расскажу, что это такое, как оно работает и почему это важно. Но сначала мы вкратце расскажем об основах.
Читать дальше →
Total votes 137: ↑134 and ↓3+167
Comments204

Автоматизация аналитики Jira средствами Apache NiFi

Reading time7 min
Views5.3K
Приветствую, господа. Я Маша, мне 23, и я уже полгода изучаю и внедряю на практике Apache NiFi.

В тот час, когда технически Apache NiFi — мощное связующее звено между различными сервисами (осуществляет обмен данными между ними, по пути позволяя их обогащать и модифицировать), смотрю я на него с точки зрения аналитика. А все потому, что NiFi весьма удобный инструмент для ETL. В часности, в команде мы ориентируемся на построение им SaaS архитектуры.

Опыт автоматизации одного из своих рабочих процессов, а именно формирование и рассылка еженедельной отчетности по Jira Software, я и хочу раскрыть в данной статье. К слову, методику аналитики таск-треккера, которая наглядно отвечает на вопрос — а чем же занимаются сотрудники — я также опишу и опубликую в ближайшее время.

Несмотря на посвящение данной статьи новичкам, считаю правильным и полезным если более опытные архитекторы (гуру, так скажем) отрецензируют ее в кромментариях или поделятся своими кейсами использования NiFi в различных сферах деятельности. Много ребят, включая меня, скажет вам спасибо.
Читать дальше →
Total votes 12: ↑10 and ↓2+12
Comments13

Импорт ЕГРЮЛ ФНС средствами Apache NiFi. Шаг 2 — преобразование XML в JSON

Reading time31 min
Views4.8K

В одном из проектов возникла необходимость перевести процессы импорта данных сторонних систем на микросервисную архитектуру. В качестве инструмента выбран Apache NiFi. В качестве первого подопытного выбран импорт ЕГРЮЛ ФНС.


В предыдущей статье было описано, как получить файлы XML с данными ЕГРЮЛ, которые требуется импортировать.


В данной статье описан способ преобразования XML в JSON.


Читать дальше →
Total votes 4: ↑3 and ↓1+5
Comments3

Импорт ЕГРЮЛ ФНС средствами Apache NiFi. Шаг 1 — загрузка файлов по HTTPS

Reading time6 min
Views6.6K

В одном из проектов возникла необходимость перевести процессы импорта данных сторонних систем на микросервисную архитектуру. В качестве инструмента выбран Apache NiFi. В качестве первого подопытного выбран импорт ЕГРЮЛ ФНС.


Данные ЕГРЮЛ публикуются в виде XML-файлов, упакованных в ZIP-архивы. Архивы ежедневно выкладывают на ресурс https://ftp.egrul.nalog.ru/ в отдельный каталог для соответствующей даты. Для доступа выдается ключ #PKCS12.


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

Читать дальше →
Total votes 3: ↑1 and ↓2-1
Comments8

Как писать свой процессор или расширяем функционал в NiFi

Reading time6 min
Views8.4K
Все большую популярность набирает NiFi и с каждым новым релизом он получает все больше инструментов для работы с данными. Тем не менее, может появиться необходимость в собственном инструменте для решения какой-то специфичной задачи.



Apache Nifi имеет в базовой поставке более 300 процессоров.

NiFi Processor это основной строительный блок для создания dataflow в экосистеме NiFi. Процессоры предоставляют интерфейс, через который NiFi обеспечивает доступ к flowfile, его атрибутам и содержимому. Собственный кастомный процессор позволит сэкономить силы, время и внимание пользователей, так как вместо множества простейших элементов-процессоров будет отображаться в интерфейсе и выполняться всего один (ну или сколько напишете). Так же, как и стандартные процессоры, кастомный процессор позволяет выполнять различные операции и обрабатывать содержимое flowfile. Сегодня мы поговорим о стандартных инструментах для расширения функционала.
Читать дальше →
Total votes 11: ↑9 and ↓2+10
Comments1

Orange Pi 2G-IOT: карта минного поля

Reading time8 min
Views25K


Некоторое время назад мне предложили немного поработать с одноплатным ПК Orange Pi 2G-IOT (встроенный 2G и цена выглядят очень привлекательно). Прочитав пост об апельсиновом рае, я подумал, что без затруднений повторю этот путь, тем более, что с Linux я на «ты» (вернее, так я думал недели три назад) и уже имел опыт общения с Raspberry Pi 2 B+. На практике этот путь оказался намного длиннее. Создавалось ощущение, что наши китайские друзья намеренно создавали сложности (причём иногда с особым цинизмом). Если вы захотели сэкономить и купить эту плату, то сначала прочитайте этот пост и подумайте ещё раз.

По возможности, я постараюсь сдерживать эмоции или как минимум переводить их в юмор.
Итак, вот мне в руки попадает плата и SD карточка десятого класса. Поехали.
Читать дальше →
Total votes 42: ↑42 and ↓0+42
Comments17

Загадки быстрого преобразования Фурье

Reading time10 min
Views13K

• Метод фазово-амплитудной интерполяции (ФАИ)

• Точное определение частоты, амплитуды и фазы гармоник сигнала

• Выявление резонансов

Алгоритм быстрого преобразования Фурье (БПФ) - важный инструмент для анализа и обработки сигналов различной природы.

Он позволяет реконструировать амплитудный и фазовый спектры сигнала в частотной области представления по его амплитудным отсчётам во временной, при этом метод вычислительно оптимизированный при скромном расходе памяти.

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

В статье представлен действенный способ преодоления таких "неудобных" особенностей алгоритма.

Читать на английском

Читать на русском
Total votes 12: ↑11 and ↓1+12
Comments94

Envoy. 1. Введение

Reading time6 min
Views50K

Приветствую! Это небольшая статья, отвечающая на вопросы: "что такое envoy?", "зачем он нужен?" и "с чего начать?".


Что это


Envoy — это L4-L7 балансировщик написанный на С++, ориентированный на высокую производительность и доступность. С одной стороны, это в некотором роде аналог nginx и haproxy, соизмеримый с ними по производительности. С другой, он больше ориентирован под микросервисную архитектуру и обладает функционалом не хуже балансировщиков на java и go, таких как zuul или traefik.


Таблица сравнения haproxy/nginx/envoy, она не претендует на абсолютную истину, но дает общую картину.


nginx haproxy envoy traefik
звезд на github 11.2k/mirror 1.1k/mirror 12.4k 27.6k
написан на C C C++ go
API нет socket only/push dataplane/pull pull
active healthcheck нет да да да
Open tracing внешний плагин нет да да
JWT внешний плагин нет да нет
Расширение Lua/C Lua/C Lua/C++ нет
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments19

Прием спутников через WEBSDR

Reading time5 min
Views41K
image
Многие, наверное слышали, что для исследования космоса есть удаленные телескопы для наблюдения неба. Такой телескоп позволяет подключаться к нему через интернет, проводить с него наблюдения и делать открытия. Но телескопами не ограничивается интерес к космосу и участие в научных работах. На орбите достаточно миниатюрных спутников, которые тоже выполняют различные эксперименты и каждый в этом может поучаствовать.

Для этого нужно собрать небольшую приемную станцию для «снятия» научной информации с них. Не у каждого есть возможность установить на крыше сложные антенны на поворотном устройстве, проложить кабеля, приобрести приемники, их настроить и многое другое. Но с недавнего времени появились удаленные приемники для прослушивания эфира — WEBSDR.

WebSDR это программно-независимый радиоприемник, подключенный к интернету, который позволяет большому количеству слушателей принимать и настраивать его одновременно зайдя на web-сайт через интернет.
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments18

Отрабатываем Git hooks на автоматизации commit message

Reading time8 min
Views36K

Привет, Хабр! В этой статье я расскажу о Git hooks и о том, как они могут помочь с некоторыми насущными кейсами организации создания commit’ов и commit message. Пост основан на реальном опыте из моей практики: как я упрощал то, что всем надоело делать руками. Я уверен, что хуки могут оказаться полезны почти каждому разработчику. Ведь все мы пишем в сообщении коммита чуть больше, чем «fixed what was broken», верно?

Меня зовут Роман Горбатенко, я Java-разработчик в компании DINS, на момент написания текста тружусь в команде Contact Center. Занимаюсь разработкой больше 3-х лет и прошел путь от личинки стажера до middle разработчика. Считаю Git одним из самых полезных инструментов разработчика. Многие не используют его возможности на полную, возможно, мне удастся это немного исправить.

Узнать больше о Git hooks
Total votes 13: ↑13 and ↓0+13
Comments23

Режим высокой доступности HashiCorp Vault (HA)

Reading time14 min
Views16K

Hashicorp Vault — open-source инструмент для управления секретами (пароли, ключи API и т.д.),


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

Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments6

Consul: Service Discovery это просто, или прощаемся с конфиг-файлами

Reading time8 min
Views127K
Что здесь интересного:

image

Обзорная статья о Consul (http://consul.io) — системе для поддержания обнаружения сервисов и распределенного хранилища ключ-значение. Кроме самого Consul, рассмотрим Consul-Template — средство для управления конфигурациями сервисов автоматически отражающее изменения в топологии. Статья будет интересна DevOps инженерам, системным архитекторам, тим-лидам проектов и прочим интересующимся микросервисными архитектурами.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments28

Fail2ban и nginx: блокируем нежелательный трафик к определенному URL

Reading time2 min
Views56K
Доброго времени суток!

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

Читать дальше →
Total votes 23: ↑21 and ↓2+19
Comments17

Ember.js: (снова) время попробовать

Reading time8 min
Views17K

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


Вы учите Ember.js один раз, а потом применяете эти знания на всех Ember.js проектах. Этот тезис я попытаюсь раскрыть под катом.

Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments16

Векторное управление электродвигателем «на пальцах»

Reading time17 min
Views321K
— Что такое векторное управление?
— Держать ток под 90 градусов.


Термин «векторное управление» электродвигателями знаком всем, кто хоть как-то интересовался вопросом, как с помощью микроконтроллера управлять двигателем переменного тока. Однако обычно в любой книге по электроприводу глава про векторное управление находится где-нибудь ближе к концу, состоит из кучи волосатых формул с отсылками ко всем остальным главам книги. Отчего разбираться в этом вопросе совсем не хочется. И даже самые простые объяснения всё равно держат путь через дифференциальные уравнения равновесия, векторные диаграммы и кучу другой математики. Из-за чего появляются примерно вот такие вот попытки как-то закрутить двигатель без использования мат.части. Но на самом деле векторное управление – это очень просто, если понимать принцип его работы «на пальцах». А там уже и с формулами разбираться в случае надобности будет веселее.
Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments48

Знакомство с OsmocomBB: 0x03 Software

Reading time15 min
Views46K


И снова здравствуйте! Пришло время рассказать о сборке програмного обеспечения для работы с OsmocomBB. На данном этапе у начинающих исследователей могут возникнуть трудности, поэтому постараюсь разложить все по полочкам. В этой части я расскажу о структуре проекта, принципах взаимодействия телефона и компьютера, а также подробно опишу процесс компиляции. Рекомендую вооружиться каким-нибудь дистрибутивом Linux, потому-что серверная часть проекта разрабатывалась именно под данное семейство операционных систем. Также советую воздержаться от использования виртуальных машин, так как возможны проблемы с запуском приложений на телефоне из-за временных задержек.
Читать дальше →
Total votes 19: ↑18 and ↓1+17
Comments12

VHDL для начинающих. Brainfuck

Reading time5 min
Views76K
Как известно, VHDL – высокоуровневый язык описания аппаратуры (если это вызывает сомнения, можно посмотреть здесь и здесь). Из всего разнообразия задач мне приглянулся именно brainfuck благодаря лёгкости в реализации с одной стороны и волшебству создания программируемого (пусть и весьма ограниченно) вычислителя с другой.
В рамках данной статьи я не буду углубляться в дебри синтаксиса и настройки среды, сконцентрировавшись на реализации конкретной задачи.
Испытательным стендом будет Altera Cyclone II Starter Kit (EP2C20F484C7)


Любителей мигающих лампочек прошу под кат.
Читать дальше →
Total votes 44: ↑43 and ↓1+42
Comments29

Information

Rating
Does not participate
Registered
Activity