기술문서 자동 크롤링 및 다국어 요약 시스템
AI 관련 기술문서, 프로그래밍 언어 문서, 논문 등을 자동으로 크롤링하고, 선택한 언어로 요약해주는 시스템입니다.
- 자동 크롤링: GitHub, Medium, Arxiv 등 주요 기술 문서 사이트 크롤링
- AI 요약: OpenAI GPT, Google Gemini를 활용한 지능형 요약
- 다국어 번역: 한국어, 영어, 일본어, 중국어 등 지원
- 키워드 추출: 핵심 키워드 및 기술 스택 자동 추출
- 데이터 저장: SQLite 데이터베이스로 문서 및 요약 저장
- 크롤링: BeautifulSoup4, Selenium, Scrapy
- AI/NLP: OpenAI API, Google Gemini, Transformers
- 번역: Google Translate, deep-translator
- 데이터베이스: SQLite
- 비동기 처리: aiohttp, asyncio
tech-doc-summarizer/
├── src/
│ ├── crawlers/ # 크롤러 모듈
│ │ ├── base_crawler.py
│ │ ├── github_crawler.py
│ │ ├── medium_crawler.py
│ │ └── arxiv_crawler.py
│ │
│ ├── summarizers/ # 요약 모듈
│ │ ├── openai_summarizer.py
│ │ └── gemini_summarizer.py
│ │
│ ├── translators/ # 번역 모듈
│ │ └── google_translator.py
│ │
│ ├── storage/ # 데이터 저장
│ │ └── database.py
│ │
│ └── utils/ # 유틸리티
│
├── data/
│ ├── raw/ # 크롤링된 원본
│ ├── processed/ # 요약된 문서
│ └── cache/ # 캐시
│
├── configs/ # 설정 파일
├── scripts/ # 실행 스크립트
├── logs/ # 로그
└── requirements.txt
git clone <repository-url>
cd tech-doc-summarizerpython -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activatepip install -r requirements.txt.env 파일 생성:
OPENAI_API_KEY=your_openai_api_key
GOOGLE_API_KEY=your_google_api_keyfrom src.crawlers import GitHubCrawler
from src.summarizers import OpenAISummarizer
from src.translators import GoogleTranslator
from src.storage import Database
# 1. 크롤러 초기화
crawler = GitHubCrawler()
# 2. GitHub 트렌딩 저장소 크롤링
urls = crawler.get_trending_repos(language='python')
docs = crawler.crawl_multiple(urls[:5])
# 3. 요약기 초기화
summarizer = OpenAISummarizer()
# 4. 한국어로 요약
for doc in docs:
if 'readme' in doc:
summary = summarizer.summarize(
text=doc['readme'],
language='ko',
max_length=500
)
print(f"제목: {doc['title']}")
print(f"요약: {summary['summary']}")
print("-" * 80)from src.crawlers import GitHubCrawler
crawler = GitHubCrawler()
# 트렌딩 저장소
trending = crawler.get_trending_repos(language='python')
# 특정 토픽 검색
urls = crawler.get_article_urls(category='machine-learning')
# 크롤링
for url in urls[:5]:
doc = crawler.crawl(url)
print(doc)from src.crawlers import MediumCrawler
crawler = MediumCrawler()
# 특정 태그의 글
urls = crawler.get_article_urls(category='artificial-intelligence')
# 크롤링
docs = crawler.crawl_multiple(urls[:10])from src.crawlers import ArxivCrawler
crawler = ArxivCrawler()
# 최신 논문
urls = crawler.get_article_urls(category='cs.AI') # AI 카테고리
# 키워드 검색
urls = crawler.search_papers(query='transformer neural network')
# 크롤링
docs = crawler.crawl_multiple(urls)from src.summarizers import OpenAISummarizer
summarizer = OpenAISummarizer()
# 기본 요약
summary = summarizer.summarize(
text="Your long text here...",
language='ko',
max_length=500
)
# 키워드 포함 요약
result = summarizer.summarize_with_keywords(
text="Your text...",
language='ko'
)
print(result['content'])from src.summarizers import GeminiSummarizer
summarizer = GeminiSummarizer()
# 요약 (Gemini는 긴 컨텍스트 지원)
summary = summarizer.summarize(
text="Very long text...",
language='ko'
)from src.translators import GoogleTranslator
translator = GoogleTranslator()
# 영어 → 한국어 번역
result = translator.translate(
text="This is a technical document about machine learning.",
source_lang='en',
target_lang='ko'
)
print(result['translated'])from src.storage import Database
db = Database()
# 문서 저장
doc_id = db.save_document({
'url': 'https://github.com/...',
'title': 'Awesome Project',
'source': 'github',
'category': 'python',
'text': 'README content...',
'language': 'en'
})
# 요약 저장
summary_id = db.save_summary(doc_id, {
'summary': '요약 내용...',
'language': 'ko',
'model': 'gpt-4',
'keywords': ['python', 'machine-learning']
})
# 문서 조회
doc = db.get_document(doc_id)
summaries = db.get_summaries(doc_id)-
GitHub
- README 문서
- 트렌딩 저장소
- 토픽별 검색
-
Medium
- 기술 블로그
- 태그별 글
- 트렌딩 아티클
-
Arxiv
- AI/ML 논문
- 카테고리별 최신 논문
- 키워드 검색
요약 및 번역:
- 한국어 (ko)
- 영어 (en)
- 일본어 (ja)
- 중국어 (zh-cn, zh-tw)
- 스페인어 (es)
- 프랑스어 (fr)
- 독일어 (de)
- 러시아어 (ru)
crawling:
delay: 1.0 # 요청 간 대기 시간 (초)
max_retries: 3
timeout: 30
summarization:
default_model: "gpt-4-turbo-preview"
default_language: "ko"
max_length: 500
database:
path: "data/tech_docs.db"
logging:
level: "INFO"
file: "logs/app.log"https://platform.openai.com/api-keys
https://makersuite.google.com/app/apikey
- 기본 크롤러 구조
- GitHub, Medium, Arxiv 크롤러
- OpenAI, Gemini 요약기
- 번역 모듈
- 데이터베이스 저장
- 스케줄링 (자동 크롤링)
- 웹 UI (Flask/FastAPI)
- 더 많은 소스 지원
- 캐싱 시스템
- 통계 및 분석
일부 사이트는 User-Agent 검사를 하므로 헤더를 설정해야 합니다:
crawler = GitHubCrawler(headers={
'User-Agent': 'Mozilla/5.0 ...'
})OpenAI나 Gemini API는 사용량 제한이 있으므로:
- 요약 길이를 적절히 설정
- 배치 처리 시 딜레이 추가
- 캐싱 활용
MIT License
Pull Request를 환영합니다!