네이버 맛집 정보 수집 + 소형 AI JSON 변환 기획서
1. 목표
- 키워드
성시경 맛집으로 네이버 검색을 수행한다.
- 검색 결과 목록의 요약문이 아닌, 각 결과의 상세 링크 페이지를 순회한다.
- 상세 페이지에서 맛집 관련 텍스트를 추출/정제한다.
- 라즈베리파이에서 구동 가능한 소형 모델(Qwen GGUF)을 사용해 정보를 구조화하고, 최종적으로 JSON 스키마로 출력한다.
2. 현재 문제와 개선 방향
- 현재 구현은 검색 결과 페이지의 snippet만 읽어서 정보 밀도가 낮다.
- 개선안은 다음 2단계 수집으로 전환한다.
- 검색 결과 페이지에서 상세 링크 목록 수집
- 각 상세 링크 페이지 본문에서 텍스트 수집 후 AI 분석
3. 전체 처리 파이프라인
- 검색 요청
- Query:
성시경 맛집
- User-Agent 포함
- 상세 링크 추출
- 네이버 검색 결과 DOM에서 외부/내부 상세 링크 URL 수집
- 광고/쇼핑/중복 링크 제거
- 상세 페이지 크롤링
- 링크별 HTML 요청
title, 본문 후보(article, main, 블로그 본문 영역 등) 추출
- 텍스트 정제
- 공백/줄바꿈 정규화
- 메뉴판/가격/주소/전화 패턴 우선 보존
- 페이지별 길이 제한 (메모리 보호)
- AI 구조화
- 소형 Qwen 모델로 스키마 기반 정보 추출
- page 단위 1차 JSON 생성
- 통합/중복 제거
- 최종 출력
restaurants 배열 JSON으로 저장/출력
4. 권장 JSON 스키마
{
"query": "성시경 맛집",
"generated_at": "ISO-8601 datetime",
"restaurants": [
{
"name": "상호명",
"address": "주소",
"contact": "연락처",
"menus": ["메뉴1", "메뉴2"],
"review_summary": "리뷰 요약",
"source_url": "정보를 추출한 상세 페이지 URL"
}
]
}
5. 라즈베리파이 소형 모델 전략
- 우선 모델:
Qwen/Qwen2.5-0.5B-Instruct-GGUF
- 권장 파일:
qwen2.5-0.5b-instruct-q4_k_m.gguf
- 이유: 낮은 메모리 사용량, 구조화 추출 작업에 충분한 품질
추론 권장 설정(초안)
n_ctx: 1024~2048
n_threads: 라즈베리파이 CPU 코어 수 기반(예: 4)
temperature: 0.0 (형식 안정성 우선)
- 출력 실패 시 재시도: 프롬프트에 “JSON만 출력” 강제 후 1회 재시도
6. Hugging Face에서 Qwen 모델 설치/다운로드
6.1 Python 패키지 설치
pip install --upgrade huggingface_hub llama-cpp-python requests beautifulsoup4
6.2 모델 다운로드 코드
from huggingface_hub import hf_hub_download
model_path = hf_hub_download(
repo_id="Qwen/Qwen2.5-0.5B-Instruct-GGUF",
filename="qwen2.5-0.5b-instruct-q4_k_m.gguf"
)
print(model_path)
6.3 모델 로드 예시
from llama_cpp import Llama
llm = Llama(
model_path=model_path,
n_ctx=1024,
n_threads=4,
verbose=False
)
7. 크롤링/분석 구현 포인트
- 링크 수집 개수 제한: 예) 상위 10~20개 상세 링크
- 요청 간 지연: 예) 0.5~1.0초(과도 요청 방지)
- 타임아웃/실패 처리: 실패 링크는 스킵하고 로그 기록
- 본문 선택자 다중 전략:
article, main, .se-main-container, #postViewArea 등 순차 시도
- 페이지별 추출 결과를 먼저 JSON으로 저장(디버깅 용이)
8. 프롬프트 설계 방향
- System Prompt:
- “맛집 정보 추출기”
- “설명문 금지, JSON만 출력”
- “스키마 외 키 금지”
- User Prompt:
- 페이지 URL + 정제 텍스트 전달
- 필드별 누락 허용 규칙(
null 또는 "") 명시
9. 품질 기준(Definition of Done)
- 상세 링크 기반으로 최소 N개(예: 5개 이상) 식당 후보가 JSON에 채워짐
- JSON 파싱 100% 성공(실패 시 재시도 로직으로 보완)
- 각 항목에
name 또는 address 중 최소 1개 이상 유효값 존재
source_url 추적 가능
10. 개발 단계 제안
- 링크 수집기 구현/검증
- 상세 페이지 본문 추출기 구현/검증
- Qwen JSON 추출 파이프라인 연결
- 병합/중복 제거 및 최종 JSON 생성
- 오류 처리/재시도/로그 보강
11. 주의사항
- 사이트 이용정책/robots.txt/요청 빈도 제한을 준수한다.
- 개인 정보 또는 민감 정보는 저장/출력하지 않는다.
- 모델 출력은 신뢰도 한계가 있으므로 원문 URL 추적 필드를 유지한다.
댓글 없음:
댓글 쓰기