Regex முதல் LLM வரை: கட்டமைக்கப்படாத இணையத் தரவுகளைப் பிரித்தெடுப்பதில் எனது பயணம்
நான் ஒரு விலை ஒப்பீட்டு கருவியை (price comparison tool) உருவாக்க முயன்றேன். அதற்கு டஜன் கணக்கான இ-காமர்ஸ் தளங்களிலிருந்து தயாரிப்புத் தரவுகள் தேவைப்பட்டன.
ஒவ்வொரு தளமும் வெவ்வேறு HTML கட்டமைப்புகளைப் பயன்படுத்தின. சில தளங்கள் சீரற்ற CSS வகுப்புகளைப் (classes) பயன்படுத்தின. மற்றவை உள்ளடக்கத்தைப் பதிவேற்ற JavaScript-ஐப் பயன்படுத்தின.
எனது முதல் திட்டம் Regex மற்றும் BeautifulSoup ஆகியவற்றைப் பயன்படுத்தியது. அது இரண்டு தளங்களுக்குச் சரியாக வேலை செய்தது. பிறகு அனைத்தும் முறிந்துவிட்டன. ஒரு தளம் தனது அமைப்பை (layout) மாற்றியது. மற்றொரு தளம் டைனமிக் உள்ளடக்கத்தைப் (dynamic content) பயன்படுத்தத் தொடங்கியது. தரவைப் பயன்படுத்துவதை விட, ஸ்கிராப்பர்களை (scrapers) சரிசெய்வதிலேயே நான் அதிக நேரத்தைச் செலவிட்டேன்.
அடுத்து நான் ஒரு LLM-ஐப் பயன்படுத்த முயன்றேன். நான் மூல HTML-ஐ ஒரு AI-க்கு அனுப்பி தரவைக் கேட்டேன். இதுவும் தோல்வியடைந்தது. வெளியீடு சீரற்றதாக இருந்தது. AI தவறான மதிப்புகளைக் கற்பனை செய்து கூறியது (hallucinated). HTML அதிகப்படியான டோக்கன்களைப் (tokens) பயன்படுத்துவதால் எனது API செலவுகள் அதிகரித்தன.
நான் ஒரு இடைநிலையைக் கண்டறிந்தேன். இப்போது நான் ஒரு கலப்பு அணுகுமுறையைப் (hybrid approach) பயன்படுத்துகிறேன்.
இதோ எனது செயல்முறை:
- HTML-ஐ முன்செயலாக்கம் (Preprocess) செய்கிறேன். நான் ஸ்கிரிப்ட்கள், ஸ்டைல்கள் மற்றும் நேவிகேஷன் பட்டுகளை நீக்குகிறேன். கண்ணுக்குத் தெரியும் உரையை மட்டும் வைத்திருக்கிறேன். இது டோக்கன் எண்ணிக்கையைக் குறைவாக வைத்திருக்க உதவுகிறது.
- JSON mode-ஐப் பயன்படுத்துகிறேன். LLM கட்டமைக்கப்பட்ட தரவைத் தருவதை உறுதி செய்ய நான் function calling முறையைப் பயன்படுத்துகிறேன்.
- ஒரு மறுமுயற்சி தர்க்கத்தை (retry logic) சேர்க்கிறேன். JSON தோல்வியடைந்தால் நான் மூன்று முறை வரை மீண்டும் முயற்சிக்கிறேன்.
- முடிவுகளைச் சேமித்து வைக்கிறேன் (Cache). மீண்டும் மீண்டும் செலவைத் தவிர்க்க, வெற்றிகரமான பிரித்தெடுப்புகளை URL வாரியாகச் சேமிக்கிறேன்.
நிலையான மற்றும் நன்கு கட்டமைக்கப்பட்ட பக்கங்களுக்கு Regex மற்றும் BeautifulSoup இப்போதும் சிறந்தவை. அவை வேகமானவை மற்றும் இலவசமானவை.
குழப்பமான அல்லது அடிக்கடி மாறும் தளங்களுக்கு LLM-கள் சிறந்தவை. அவை மந்திரம் அல்ல. பணத்தைச் சேமிக்க நீங்கள் முதலில் உங்கள் உள்ளீட்டைச் (input) சுத்தப்படுத்த வேண்டும்.
எனது தற்போதைய பணிப்பாய்வு (workflow):
• எளிமையான தளங்களுக்கு ஒரு லேசான (lightweight) பார்சரைப் பயன்படுத்துகிறேன். • கணிக்க முடியாத தளங்களுக்கு ஒரு LLM-ஐப் பயன்படுத்துகிறேன். • ஒவ்வொரு பிரித்தெடுப்பிற்கும் (extraction) ஆகும் செலவைக் கண்காணிக்கிறேன். • விலைகள் உண்மையானவை என்பதை உறுதிப்படுத்த வெளியீட்டைச் சரிபார்க்கிறேன் (Validate).
இந்த மாற்றம், ஒரு நாளைக்குப் பதிலாக ஒரு மணி நேரத்தில் புதிய கடைகளைச் சேர்க்க எனக்கு உதவியது.
குழப்பமான இணையத் தரவுகளுக்கான உங்கள் உத்தி என்ன? நீங்கள் LLM-களைப் பயன்படுத்துகிறீர்களா அல்லது பாரம்பரிய ஸ்கிராப்பர்களையே பின்பற்றுகிறீர்களா?