К содержимому
Кирилл Юсуповработает само.Обсудить задачу

47 000 сообщений из чатов в базе на 83 000 объектов

Рынок недвижимости Дубая живёт в Telegram-группах: предложения приходят обычным текстом, вперемешку с болтовнёй, и через час тонут в ленте. Собрал пайплайн, который читает эти группы, достаёт из сообщений поля и складывает объекты в базу и в Excel. Точность извлечения около 97%, и это измеренная цифра, а не самооценка.

47 000

сообщений прочитано и разобрано

83 000

структурированных карточек объектов на выходе

~97%

точность извлечения полей, проверена сверкой с исходниками

Задача

Брокеры в Дубае обмениваются объектами в Telegram. Не в базе и не в CRM, а в обычных группах, обычными сообщениями: район, проект, площадь, этаж, условия, контакт. Формат у каждого свой, половина сообщений идёт с эмодзи и сокращениями, одно и то же предложение ходит по пяти группам сразу.

Пока лента идёт, работать с ней можно только глазами. Вопрос клиента «что есть в этом районе с такой площадью» превращается в перелистывание чатов и в память конкретного человека. Найденное вчера сегодня уже не находится, а объект, который был показан три часа назад, всплывает снова, от другого посредника и с другими деталями.

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

Решение

01

Сбор

Чтение групп через Telethon, с личного аккаунта и только там, где доступ есть законно. Забирается история и всё новое, что появляется дальше. Никаких «выкачать чужую закрытую базу»: работаем с тем, что человек и так видит у себя в приложении.

02

Разбор сообщения на поля

Здесь регулярные выражения ломаются: у живого текста брокера нет формата. Разбор делает языковая модель по жёсткой схеме полей: район, проект, тип объекта, площадь, этажность, условия сделки, кто разместил. Одно сообщение часто содержит не один объект, а список из нескольких, поэтому карточек на выходе оказалось больше, чем сообщений на входе: 83 000 против 47 000.

03

Склейка дублей

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

04

Проверка точности идёт отдельно от разбора

Проверял не тот процесс, который извлекал: случайные карточки сверялись с исходными сообщениями поле за полем. Отсюда цифра ~97% и её прямое следствие: примерно три карточки из ста нуждаются в человеческом взгляде. Поэтому я и называю 97 и не пишу «полная точность».

05

Выдача в двух видах

SQLite нужен, чтобы задавать вопросы запросом и подключать к чему угодно. Excel нужен, чтобы открыть и отфильтровать без всякого обучения. Плюс карточки объектов в виде, пригодном для отправки клиенту: брокер выбирает объект и отправляет готовое описание и не пересобирает его руками из чужого сообщения.

Результат

  • 47 000 сообщений превратились в 83 000 карточек, по которым можно искать и фильтровать.
  • Подбор под запрос клиента занимает минуты вместо перелистывания групп и опоры на память.
  • Дубли сведены: объект в базе один, даже если он прошёл по нескольким чатам.
  • Точность измерена, а не заявлена: ~97% по сверке с исходниками.
  • Пайплайн работает дальше: новые сообщения проходят тот же путь и добавляются к базе.

Есть похожая задача?

Напишите в двух-трёх предложениях, что происходит сейчас. Отвечу, реально ли собрать похожее у вас, за сколько и что понадобится с вашей стороны.

Отвечу лично. Без рассылки и обязательного созвона. Можно начать с обезличенных данных.

Что из этого можно повторить у вас

Недвижимость тут не главное. Главное, что ценные данные лежат в переписке. Тем же способом я разбирал офлайн-экспорты рабочих чатов с поставщиками: 17 400 структурированных офферов с ценами и условиями плюс Excel-дашборд поверх них.

Это работает везде, где предложения, заявки или прайсы приходят текстом: закупки в чатах с поставщиками, входящие запросы в рабочих группах, объявления в отраслевых каналах. На вход идёт доступ к чатам или их экспорт. На выходе таблица с полями, по которой можно искать, считать и строить отчёты.

Если объём небольшой и всё помещается в голове одного менеджера, я скажу об этом прямо и не возьмусь: пайплайн окупается тогда, когда поток не помещается в человека.

Стек

Python и Telethon для сбора · языковая модель для разбора неструктурированного текста · SQLite как база · Excel как выдача для людей · отдельная проверка качества извлечения.

Короткие ответы по темеЧастые вопросы и ответы, если нужно быстро разобраться.

Коротко о проекте

Как превратить объявления из Telegram-групп в базу данных?

Кирилл Юсупов, Москва, собрал пайплайн, который прочитал 47 000 сообщений из групп по недвижимости Дубая и разложил их в 83 000 структурированных карточек объектов в SQLite и Excel. Сообщения написаны живым текстом без формата, поэтому поля извлекает языковая модель по заданной схеме, регулярные выражения тут не работают; дубли одного объекта из разных групп сводятся в одну запись.

Насколько точно данные извлекаются из живой переписки?

Около 97% полей это измеренная цифра: случайные карточки сверялись с исходными сообщениями отдельной проверкой, независимой от процесса, который извлекал данные. Практический вывод честный: примерно три карточки из ста требуют человеческого взгляда, поэтому в проекте называется 97%, без формулировки «полная точность».

Кому имеет смысл структурировать данные из чатов?

Тем, у кого предложения, заявки или прайсы приходят обычным текстом в мессенджер: закупки в чатах с поставщиками, отраслевые каналы с объявлениями, входящий поток в рабочих группах. Тем же способом Кирилл Юсупов разобрал экспорты чатов с поставщиками и получил 17 400 структурированных офферов с Excel-дашбордом. Если поток небольшой и его держит в голове один менеджер, он говорит об этом на разборе и не берётся.

Пришлите экспорт чата, и я покажу, что из него можно достать

Разберу структуру ваших сообщений и скажу, какие поля извлекаются надёжно, а какие придётся проверять руками.

Москва · работаю только с чатами, доступ к которым у вас есть законно