Как-то давно (лет 5 назад), досталась мне база одного билетного агенства, которую надо было привести в порядок.
Но проблема лежала не в плоскости архитектуры, а в плоскости контента.
На одно и то же мероприятие билеты продают разные ресселеры. Одни и те же места у них называются по-разному и стоят по разному. На фестивали билеты могут быть описаны как «вип на первый день с парковкой в крыле b, на остальные без парковки». Есть опечатки.
Группировки ни по событиям, ни по продавцам не было.
Каких-то понятных ML инструментов тогда не было, поэтому я запасся энергетиком и загнал все в postgres.
За неделю я отнормализовал процентов 80 контента.
Пофиксил опечатки (выбираются самые популярные слова, самые редкие, считается
расстояние Левенштейна, для редких слов с ld меньше 3 делается замена на частые).
Разделил что мог на группы - стало понятно что в билет включена парковка, на сколько дней действует и тд.
Узнал много нового о делении концертных площадок на куски, их названия и ценообразование.
Что могу сказать... FTS (full text search) у postgres отличный :)
Но его мне все-равно не хватило.
Пришлось написать около 200 regexp’ов, которые парсили всю базу для подготовки текста под FTS.
Возможно, не последнюю роль тут сыграли 4 банки энергетика в день, но где-то на 150 regexp’е мне показалось, что я могу видеть время...
Причем до этого момента я был с regexp’ами на ВЫ. Я знал, что на regexp разговаривают перловики, и один знакомый сисадмин.
Все мои эксперименты выглядели как копипаста с http://php.spb.ru/php/regexp.html (алярм, БИТАЯ КОДИРОВКА!) с небольшими правками.
Это сейчас все знают про regex101.com, а тогда никто не знал :)
Короче, с того момента я regexp не боюсь :) Ими очень удобно парсить всякое, в том числе прям в IDE. Все IDE поддерживают поиск с regexp.
Есть, конечно, совершенно неподходящее приложение этого инструмента - например, парсинг сорцов. Вот знаменитый топик на SO про парсинг html:
https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
Сорцы парсят совершенно другим способом. За час можно разобраться с этим проектом? там все максимально понятно, даже если js не ваш родной язык:
https://github.com/jamiebuilds/the-super-tiny-compiler
Но в моем анализаторе все-равно нашлось место регуляркам. С их помощью я очищаю DDL от команд, которые есть в psql, но которые не понимает AST-парсер.
Поэтому анализатору можно скармливать файлы с многострочными каментами и с коммандами вида
\c dbname
Но я, собственно, чего начал то...
Show HN принес такой проект:
RegEx for Regular Folk
https://refrf.shreyasminocha.me/
Все доступным языком, с хорошими примерами.
Btw, вы видели полный regexp валидатор для email?
https://stackoverflow.com/questions/20771794/mailrfc822address-regex
PS: хотел было изобрести reactions с regexp, так этот бот не пропустит :(
Post #433
457