Skip to content

1byung/tech-doc-summarizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tech Doc Summarizer

기술문서 자동 크롤링 및 다국어 요약 시스템

프로젝트 개요

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

설치 방법

1. 저장소 클론

git clone <repository-url>
cd tech-doc-summarizer

2. 가상 환경 생성 (권장)

python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

3. 의존성 설치

pip install -r requirements.txt

4. 환경 변수 설정

.env 파일 생성:

OPENAI_API_KEY=your_openai_api_key
GOOGLE_API_KEY=your_google_api_key

사용 방법

기본 사용 예제

from 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)

크롤러 사용

GitHub 크롤링

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)

Medium 크롤링

from src.crawlers import MediumCrawler

crawler = MediumCrawler()

# 특정 태그의 글
urls = crawler.get_article_urls(category='artificial-intelligence')

# 크롤링
docs = crawler.crawl_multiple(urls[:10])

Arxiv 논문 크롤링

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)

요약 및 번역

OpenAI 요약

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'])

Google Gemini 요약

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)

지원하는 소스

크롤링 가능한 사이트

  1. GitHub

    • README 문서
    • 트렌딩 저장소
    • 토픽별 검색
  2. Medium

    • 기술 블로그
    • 태그별 글
    • 트렌딩 아티클
  3. Arxiv

    • AI/ML 논문
    • 카테고리별 최신 논문
    • 키워드 검색

지원 언어

요약 및 번역:

  • 한국어 (ko)
  • 영어 (en)
  • 일본어 (ja)
  • 중국어 (zh-cn, zh-tw)
  • 스페인어 (es)
  • 프랑스어 (fr)
  • 독일어 (de)
  • 러시아어 (ru)

환경 설정

config.yaml 예시

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"

API 키 설정

OpenAI

https://platform.openai.com/api-keys

Google Gemini

https://makersuite.google.com/app/apikey

개발 로드맵

  • 기본 크롤러 구조
  • GitHub, Medium, Arxiv 크롤러
  • OpenAI, Gemini 요약기
  • 번역 모듈
  • 데이터베이스 저장
  • 스케줄링 (자동 크롤링)
  • 웹 UI (Flask/FastAPI)
  • 더 많은 소스 지원
  • 캐싱 시스템
  • 통계 및 분석

문제 해결

크롤링 오류

일부 사이트는 User-Agent 검사를 하므로 헤더를 설정해야 합니다:

crawler = GitHubCrawler(headers={
    'User-Agent': 'Mozilla/5.0 ...'
})

API 제한

OpenAI나 Gemini API는 사용량 제한이 있으므로:

  • 요약 길이를 적절히 설정
  • 배치 처리 시 딜레이 추가
  • 캐싱 활용

라이선스

MIT License

기여

Pull Request를 환영합니다!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages