274 lines
8.2 KiB
Markdown
274 lines
8.2 KiB
Markdown
# 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 결과가 부정확할 수 있습니다.
|
|
|
|
### 로그 확인
|
|
|
|
문제가 발생하면 터미널 출력을 확인하여 오류 메시지를 찾을 수 있습니다. 각 처리 단계별로 발생한 오류가 출력됩니다.
|