# DB Sonbo Project Database Sonbo Project는 데이터베이스 관련 자료를 수집하고 주제별로 요약하는 프로젝트입니다. 이 프로젝트는 비디오와 PDF 문서에서 텍스트를 추출하고, GPT-4를 활용하여 주제별로 정리된 요약을 생성합니다. ## 프로젝트 개요 ### 주요 기능 - **다양한 문서 형식 지원**: 비디오 파일(.mp4, .avi 등)과 PDF 문서 처리 - **자동 텍스트 추출**: 비디오에서 오디오를 추출하고 음성 인식으로 변환, PDF에서 텍스트 추출 - **OCR 지원**: 스캔된 PDF 문서에서 광학 문자 인식(OCR)을 통해 텍스트 추출 - **주제별 요약 생성**: 추출된 텍스트를 GPT-4 모델을 사용하여 주제별로 정리 - **통합된 처리 파이프라인**: 모든 과정을 하나의 명령어로 실행 가능 ### 처리 과정 1. **문서 전처리**: - 비디오 → 오디오 추출 → 음성 인식 → 텍스트 생성 - PDF → 텍스트 추출 (필요시 OCR 적용) 2. **주제별 요약**: - 추출된 텍스트를 GPT-4 API를 사용하여 주요 주제별로 구조화된 요약 생성 - 결과를 텍스트 파일로 저장 ## 프로젝트 구조 ``` db_sonbo/ ├── data/ # 처리할 원본 파일을 이 폴더에 저장 ├── preprocessed/ # 전처리된 텍스트 파일이 저장되는 폴더 ├── topic_summaries/ # 생성된 주제별 요약이 저장되는 폴더 ├── temp/ # 임시 파일 저장 폴더(비디오 처리 중 생성되는 오디오 등) ├── src/ # 소스 코드 │ ├── base_processor.py # 문서 처리를 위한 기본 추상 클래스 │ ├── video_processor.py # 비디오 처리 클래스 │ ├── pdf_processor.py # PDF 처리 클래스 │ ├── document_processor.py # 통합 문서 처리 클래스 │ ├── topic_summarizer.py # 주제별 요약 생성 클래스 │ └── main.py # 메인 실행 스크립트 └── prompts/ # GPT 프롬프트 템플릿 ``` ## 주요 컴포넌트 설명 ### BaseDocumentProcessor 모든 문서 처리기의 기본이 되는 추상 클래스입니다. 다양한 문서 형식을 일관된 방식으로 처리할 수 있도록 공통 인터페이스를 정의합니다. ### VideoProcessor 비디오 파일에서 오디오를 추출하고, Whisper 모델을 사용하여 음성을 텍스트로 변환합니다. 다양한 비디오 형식(.mp4, .avi, .mov, .mkv 등)을 지원합니다. ### PDFProcessor PDF 파일에서 텍스트를 추출합니다. 텍스트 레이어가 있는 PDF는 직접 추출하고, 스캔된 PDF는 OCR을 적용하여 텍스트를 추출합니다. 또한 일반 텍스트 파일(.txt)도 처리할 수 있습니다. ### DocumentProcessor 파일 형식을 감지하고 적절한 처리기(VideoProcessor 또는 PDFProcessor)를 선택하여 처리합니다. 시스템의 주요 진입점입니다. ### TopicSummarizer 전처리된 텍스트를 받아 GPT-4를 사용하여 주제별로 구조화된 요약을 생성합니다. ## 로컬 설치 방법 ### 요구사항 - Python 3.11 이상 - Poetry - FFmpeg (비디오 처리용) - Tesseract OCR (스캔된 PDF 처리용) ### Python 의존성 설치 ```bash # Python 의존성 설치 poetry install ``` ### 외부 의존성 설치 방법 #### FFmpeg 자동 설치 (권장) ```bash # 스크립트에 실행 권한 부여 chmod +x install_ffmpeg.sh # FFmpeg 설치 스크립트 실행 ./install_ffmpeg.sh ``` #### Tesseract OCR 설치 **macOS:** ```bash # Homebrew를 통해 Tesseract 설치 (한국어 데이터 포함) brew install tesseract brew install tesseract-lang # 다국어 지원 brew install poppler # PDF 이미지 변환에 필요한 라이브러리 # 또는 수동으로 한국어 데이터 설치 mkdir -p ~/tessdata curl -o ~/tessdata/kor.traineddata https://github.com/tesseract-ocr/tessdata/raw/main/kor.traineddata echo 'export TESSDATA_PREFIX=~/tessdata' >> ~/.zshrc # 또는 ~/.bashrc ``` **Ubuntu/Debian:** ```bash sudo apt-get update sudo apt-get install tesseract-ocr sudo apt-get install tesseract-ocr-kor # 한국어 언어 팩 sudo apt-get install poppler-utils # PDF 변환 도구 ``` **Windows:** 1. [Tesseract 다운로드 페이지](https://github.com/UB-Mannheim/tesseract/wiki)에서 설치 프로그램 다운로드 2. 설치 과정에서 "추가 언어 데이터" 옵션에서 한국어 선택 3. 환경 변수에 Tesseract 설치 경로 추가 4. [Poppler for Windows](https://github.com/oschwartz10612/poppler-windows/releases/)에서 Poppler 다운로드 및 설치 5. Poppler의 bin 폴더를 환경 변수 PATH에 추가 #### 수동 FFmpeg 설치 **macOS:** ```bash brew install ffmpeg ``` **Ubuntu/Debian:** ```bash sudo apt-get update sudo apt-get install ffmpeg ``` **CentOS/RHEL:** ```bash sudo yum install ffmpeg ``` **Windows:** FFmpeg 공식 사이트에서 다운로드: [https://ffmpeg.org/download.html](https://ffmpeg.org/download.html) ## 사용 방법 ### 준비 1. `.env` 파일을 프로젝트 루트에 생성하고 OpenAI API 키를 설정합니다: ``` OPENAI_API_KEY=your_api_key_here ``` 2. 처리할 비디오 또는 PDF 파일을 `data` 폴더에 넣습니다. ### 실행 옵션 1. **전체 파이프라인 실행** (문서 처리 및 요약): ```bash poetry run python src/main.py ``` 2. **전처리만 실행** (요약 생성 건너뛰기): ```bash poetry run python src/main.py --only-process ``` 3. **요약만 생성** (이미 전처리된 파일 사용): ```bash poetry run python src/main.py --only-summarize ``` 4. **특정 파일만 처리**: ```bash poetry run python src/main.py --process-file 파일명.pdf ``` 5. 결과는 `preprocessed` 및 `topic_summaries` 폴더에서 확인할 수 있습니다. ### 각 모듈 개별 실행 개별 모듈을 직접 실행할 수도 있습니다: - 비디오 처리: ```bash poetry run python src/video_processor.py ``` - PDF 처리: ```bash poetry run python src/pdf_processor.py ``` - 주제별 요약 생성: ```bash poetry run python src/topic_summarizer.py ``` ## 결과물 형식 ### 전처리 결과 `preprocessed` 폴더에 저장되는 파일은 다음과 같은 형식으로 구성됩니다: - 비디오 파일: 파일명, 파일 정보, 추출된 트랜스크립트 텍스트 - PDF/텍스트 파일: 파일명, 파일 타입, 문자 수, 추출된 텍스트 ### 요약 결과 `topic_summaries` 폴더에는 주제별로 정리된 요약 문서가 저장됩니다. 각 파일은 원본 문서에서 추출된 주요 토픽과 그에 대한 요약 내용을 포함합니다. ## 지원 파일 형식 ### 비디오 - mp4, avi, mov, mkv, wmv 등 주요 비디오 형식 ### 문서 - PDF 문서 파일 (.pdf) - 디지털 PDF (텍스트 레이어 포함) - 스캔된 PDF (OCR 처리) - 텍스트 파일 (.txt) ## 의존성 ### Python 패키지 (Poetry로 관리) - moviepy (비디오 처리) - openai (GPT API) - python-dotenv (환경 변수) - openai-whisper (음성 인식) - PyPDF2 (PDF 텍스트 추출) - pytesseract (OCR 처리) - pdf2image (PDF를 이미지로 변환) - requests - pandas - sqlalchemy ### 외부 의존성 (시스템 레벨) - FFmpeg: 비디오 및 오디오 처리용 라이브러리 - Tesseract OCR: 이미지에서 텍스트 추출용 OCR 엔진 ## 문제 해결 ### 일반적인 문제 1. **OpenAI API 오류**: API 키가 올바르게 설정되었는지 확인하세요. 2. **FFmpeg 오류**: FFmpeg가 올바르게 설치되었는지 확인하세요. 3. **Tesseract OCR 오류**: - Tesseract가 올바르게 설치되었는지 확인하세요. - 한국어 언어 팩이 설치되었는지 확인하세요. - `pytesseract.pytesseract.tesseract_cmd` 경로가 올바른지 확인하세요 (Windows). 4. **비디오 처리 실패**: 비디오 파일 형식이 지원되는지 확인하세요. 5. **PDF 텍스트 추출 실패**: 스캔된 PDF의 이미지 품질이 낮거나 너무 복잡한 경우 OCR 결과가 부정확할 수 있습니다. ### 로그 확인 문제가 발생하면 터미널 출력을 확인하여 오류 메시지를 찾을 수 있습니다. 각 처리 단계별로 발생한 오류가 출력됩니다.