از Regex تا LLMها: مسیر من در استخراج داده‌های وب

من یک ابزار مقایسه قیمت ساختم. نیاز داشتم داده‌های محصولات را از ده‌ها سایت تجارت الکترونیک استخراج کنم. هر سایت ساختار متفاوتی داشت. برخی از CSS classهای تصادفی استفاده می‌کردند. برخی دیگر برای بارگذاری محتوا از JavaScript استفاده می‌کردند.

ابتدا روش کلاسیک را امتحان کردم. از Regex و BeautifulSoup استفاده کردم.

این روش برای دو سایت جواب داد. سپس، یکی از سایت‌ها چیدمان خود را تغییر داد و کد من از کار افتاد. سایت دیگری از محتوای پویا (dynamic) استفاده می‌کرد. من بیشتر از آنکه از داده‌ها استفاده کنم، وقتم را صرف اصلاح اسکرپرها (scrapers) می‌کردم.

سپس هوش مصنوعی را امتحان کردم. HTML خام را به یک LLM دادم.

نتایج بد بود. خروجی‌ها ناهماهنگ بودند. گاهی JSON دریافت می‌کردم و گاهی پاراگراف. مدل دچار توهم (hallucination) در داده‌ها می‌شد. هزینه هم بسیار بالا بود چون تعداد توکن‌های زیادی ارسال می‌کردم.

راه میانه را پیدا کردم. اکنون از یک رویکرد ترکیبی (hybrid) استفاده می‌کنم.

فرآیند من به این صورت است:

  • پیش‌پردازش HTML. من اسکریپت‌ها، استایل‌ها و نوار‌های ناوبری را حذف می‌کنم و فقط متن‌های قابل مشاهده را نگه می‌دارم. این کار باعث کاهش تعداد توکن‌ها و هزینه‌ها می‌شود.
  • استفاده از JSON mode یا function calling. این کار LLM را مجبور می‌کند تا داده‌های ساختاریافته برگرداند.
  • استفاده از منطق تلاش مجدد (retry logic). اگر JSON اشتباه بود، کد دوباره تلاش می‌کند.
  • کش کردن نتایج (Cache). من استخراج‌های موفق را برای هر URL ذخیره می‌کنم تا از پرداخت هزینه دوباره برای یک صفحه مشابه جلوگیری کنم.

Regex و BeautifulSoup همچنان برای سایت‌های استاتیک و با ساختار مشخص، بهترین گزینه هستند. آن‌ها سریع و رایگان‌اند.

LLMها برای سایت‌های نامنظم و غیرقابل پیش‌بینی بهتر هستند. اما برای پایین نگه داشتن هزینه‌ها، باید ابتدا داده‌ها را پاکسازی کنید.

درس‌هایی که آموختم:

  • هزینه‌ها و نرخ موفقیت خود را مانیتور کنید.
  • مراقب تأخیر (latency) باشید. فراخوانی‌های LLM ثانیه‌ها طول می‌کشند، نه میلی‌ثانیه.
  • خروجی را اعتبارسنجی کنید. بررسی کنید که آیا قیمت شبیه یک قیمت واقعی است یا خیر.
  • از یک سیستم ترکیبی استفاده کنید. برای سایت‌های ساده از یک parser و برای سایت‌های نامنظم از LLM استفاده کنید.

این تنظیمات ساعت‌ها در کار من صرفه‌جویی می‌کند. من می‌توانم یک فروشگاه جدید را در کمتر از یک ساعت اضافه کنم.

شما چگونه با داده‌های نامنظم وب برخورد می‌کنید؟ پارسرها را ترجیح می‌دهید یا LLMها را؟

منبع: https://dev.to/__c1b9e06dc90a7e0a676b/from-regex-to-llms-my-journey-extracting-unstructured-web-data-5gmh

انجمن یادگیری اختیاری: https://t.me/GyaanSetuAi