Парсинг через нейронки и LangChain

Раньше парсинг сайта выглядел так
1. скачать страницу через браузер без интерфейса (headless)
2. пропустить ее через ряд правил CSS и регулярных выражений, чтобы вычленить нужные данные.
Второй пункт был самым мучительным и злобным, опытные профессионалы жаловались, что смены дизайнов и стандартов регулярно ломают налаженный процесс.
Теперь парсинг сайта выглядит так - https://www.youtube.com/watch?v=0gPh18vRghQ (туториал на 24 минуты), код из туториала на GitHub - https://github.com/trancethehuman/entities-extraction-web-scraper
0. (один раз) раскуриваем LangChain - этакий фреймворк-кукловод, под которым могут плясать нейронки
1. скачать страницу...
2. тупо кинуть ее в нейронку со словами - "вот схема данных, пожалуйста вычлени из этой страницы все подходящие данные и забей массив с такой схемой".
LangChain нужен, чтобы не делать все это вручную - хотя вручную похожий подход работает. Я проверил его как теорию, закинул в Клода страницу с Википедией и сказал "Act like data extractor, read this text and fill array of objects in format { character: string; actor: number; }" - и он на первый взгляд провел адекватную экстракцию.
Помню, как вздрогнул, когда увидел это - это что же получается, эпоха императивного программирования все же близится к финалу, будем теперь только описания желаемого результата закидывать? Прощай, немытый CSS и страна регулярных выражений-господ, просто кидаем в топку нейронок пожелания!

В общем, как я баловался с 12 стульями, извлекая списки персонажей - так можно баловаться и с неформатированными данными, извлекая массивы с нужным форматом.
Я предполагаю, что точность такого "парсинга" не идеальная, в отличие от старомодных регулярок и CSS. Зато диапазон форматов чудовищный, и нет предела автоматизации. Для серьезной науки не подойдет, но для каких-то практических задач - хм.
pS: проверил, закидывая голый HTML, только кусок страницы, так как, вы не поверите, со всей разметкой страница Вики весит около мегабайта. Для того и нужен LangChain, чтобы нарезать данные по окну промпта. Собственно в туториале по ссылке вверху показан пример работы с нейронкой очень узкого окна контекста.
PPS: самое интересное, что LangChain можно подключить к локальной нейронке, а 7B-модели будут шустро работать почти на любой машине благодаря llama.cpp. А если еще и натаскать модель специально на парсинг!!!
ppps: Если вы внимательно прочтете мой промпт, то увидите там ошибку в описании формата. Нейронка в данном случае восприняла все так, как и было надо. Но следует учесть, что точно так же она сможет "исправить" и какой-то редкий случай, который не поймет.
|
</> |