Skip to content

Hong0531/AI_Document_Analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AI 기반 λ¬Έμ„œ μΆ”μΆœΒ·μš”μ•½Β·μΉ΄ν…Œκ³ λ¦¬ λΆ„λ₯˜ μ‹œμŠ€ν…œ

Python FastAPI PostgreSQL SQLAlchemy React Vite Ollama PaddleOCR PaddlePaddle

λΉ„μ •ν˜• λ¬Έμ„œ(.hwp, .hwpx, .pdf, .docx, .ppt, .pptx)λ₯Ό μ—…λ‘œλ“œν•˜λ©΄ ν…μŠ€νŠΈ μΆ”μΆœ, OCR 보완, μš”μ•½ 및 μΉ΄ν…Œκ³ λ¦¬ λΆ„λ₯˜, PostgreSQL μ €μž₯κΉŒμ§€ μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€.

이 ν”„λ‘œμ νŠΈλŠ” FastAPI λ°±μ—”λ“œμ™€ React ν”„λ‘ νŠΈμ—”λ“œλ‘œ κ΅¬μ„±λ˜μ–΄ 있으며, λ¬Έμ„œ 처리 κ²°κ³Όλ₯Ό 비동기 μž‘μ—… λ‹¨μœ„λ‘œ 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.


μ£Όμš” κΈ°λŠ₯

  • λ¬Έμ„œ μ—…λ‘œλ“œ 및 비동기 처리
  • 포맷별 ν…μŠ€νŠΈ μΆ”μΆœ
  • OCR 기반 ν…μŠ€νŠΈ 보완
  • Ollama 기반 μš”μ•½ 및 μΉ΄ν…Œκ³ λ¦¬ λΆ„λ₯˜
  • PostgreSQL 이λ ₯ μ €μž₯ 및 검색
  • React UIλ₯Ό ν†΅ν•œ μ§„ν–‰ μƒνƒœ 및 κ²°κ³Ό 확인

지원 λ¬Έμ„œ ν˜•μ‹

  • .hwp
  • .hwpx
  • .pdf
  • .docx
  • .ppt
  • .pptx

처리 흐름

파일 μ—…λ‘œλ“œ
  -> 파일 μ €μž₯
  -> ν™•μž₯μžλ³„ μΆ”μΆœκΈ° μ‹€ν–‰
  -> ν…μŠ€νŠΈ/JSON 정리
  -> Ollama μš”μ•½ 및 μΉ΄ν…Œκ³ λ¦¬ λΆ„λ₯˜
  -> PostgreSQL μ €μž₯
  -> ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μƒνƒœ 쑰회 및 κ²°κ³Ό 확인

포맷별 처리 방식은 λŒ€λž΅ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • PDF: λ‚΄μž₯ ν…μŠ€νŠΈ μΆ”μΆœ ν›„ λΆ€μ‘±ν•œ νŽ˜μ΄μ§€λŠ” OCR둜 보완
  • DOCX: 문단/ν‘œ 직접 μΆ”μΆœ ν›„ 포함 이미지 OCR μˆ˜ν–‰
  • HWPX: XML 기반 직접 νŒŒμ‹±
  • HWP: 직접 ν…μŠ€νŠΈ μΆ”μΆœ μ‹œλ„ ν›„ ν•„μš” μ‹œ COM λ³€ν™˜ 및 OCR fallback
  • PPT/PPTX: μŠ¬λΌμ΄λ“œ ν…μŠ€νŠΈ μΆ”μΆœ, 일뢀 이미지 OCR 보쑰

기술 μŠ€νƒ

μ˜μ—­ μ‚¬μš© 기술
Backend FastAPI, Uvicorn
DB PostgreSQL, SQLAlchemy
LLM Ollama, httpx
OCR PaddleOCR, PaddlePaddle
λ¬Έμ„œ 처리 pdfplumber, pdf2image, PyMuPDF, python-docx, python-pptx, olefile
Frontend React, Vite, Axios

ν”„λ‘œμ νŠΈ ꡬ쑰

AI_Document_Analyzer/
β”œβ”€ main.py                  # FastAPI μ§„μž…μ  및 API 라우트
β”œβ”€ database.py              # SQLAlchemy μ—”μ§„/μ„Έμ…˜ 생성
β”œβ”€ models.py                # Category, Document, Job ν…Œμ΄λΈ” μ •μ˜
β”œβ”€ document_pipeline.py     # ν™•μž₯μžλ³„ extractor λΌμš°νŒ…
β”œβ”€ llm_chain.py             # Ollama 호좜 및 μš”μ•½/λΆ„λ₯˜ κ²°κ³Ό νŒŒμ‹±
β”œβ”€ config.py                # μΆ”μΆœκΈ° 곡톡 μ„€μ •
β”œβ”€ app/
β”‚  β”œβ”€ config.py             # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν™˜κ²½μ„€μ •
β”‚  └─ schemas.py            # API 응닡 μŠ€ν‚€λ§ˆ
β”œβ”€ extractors/
β”‚  β”œβ”€ pdf_ext/              # PDF μΆ”μΆœκΈ°
β”‚  β”œβ”€ docx_ext/             # DOCX μΆ”μΆœκΈ°
β”‚  β”œβ”€ hwp_ext/              # HWP/HWPX μΆ”μΆœκΈ°
β”‚  └─ ppt_ext/              # PPT/PPTX μΆ”μΆœκΈ°
β”œβ”€ frontend/
β”‚  β”œβ”€ src/App.jsx           # μ—…λ‘œλ“œ/μƒνƒœ/κ²°κ³Ό UI
β”‚  β”œβ”€ src/api.js            # λ°±μ—”λ“œ API 호좜
β”‚  └─ package.json
β”œβ”€ data/
β”‚  β”œβ”€ uploads/              # μ—…λ‘œλ“œ 원본 μ €μž₯ 경둜
β”‚  β”œβ”€ work/                 # μž‘μ—…μš© μž„μ‹œ 경둜
β”‚  └─ ocr_output/           # μΆ”μΆœ JSON μ €μž₯ 경둜
└─ output/                  # 일뢀 μΆ”μΆœκΈ°μ˜ 쀑간 μ‚°μΆœλ¬Ό 경둜

μ‹€ν–‰ μ „ 쀀비사항

λ‹€μŒ ꡬ성 μš”μ†Œκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

  • Python 3.10 이상
  • PostgreSQL
  • Ollama
  • Node.js 및 npm

λ¬Έμ„œ ν˜•μ‹μ— 따라 μΆ”κ°€ μ˜μ‘΄μ„±μ΄ ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • PDF OCR: Poppler ν•„μš”
  • HWP 처리: Windows ν™˜κ²½μ—μ„œ Hancom Office/COM 기반 λ™μž‘μ΄ ν•„μš”ν•  수 있음

ν™˜κ²½λ³€μˆ˜

.env.exampleλ₯Ό 볡사해 .envλ₯Ό λ§Œλ“  λ’€ 값을 μ„€μ •ν•©λ‹ˆλ‹€.

# Windows PowerShell
copy .env.example .env
# macOS/Linux
cp .env.example .env

μ£Όμš” ν™˜κ²½λ³€μˆ˜λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

λ³€μˆ˜λͺ… μ„€λͺ… μ˜ˆμ‹œ
DATABASE_URL PostgreSQL μ—°κ²° λ¬Έμžμ—΄ postgresql+psycopg2://postgres:YOUR_PASSWORD@localhost:5432/document_db
APP_NAME FastAPI μ•± 이름 Document Analyzer
UPLOAD_DIR μ—…λ‘œλ“œ 파일 μ €μž₯ 경둜 ./data/uploads
WORK_DIR μž‘μ—…μš© μž„μ‹œ 경둜 ./data/work
OCR_OUTPUT_DIR μΆ”μΆœ JSON μ €μž₯ 경둜 ./data/ocr_output
OLLAMA_URL Ollama μ„œλ²„ μ£Όμ†Œ http://localhost:11434
OLLAMA_MODEL μ‚¬μš©ν•  Ollama λͺ¨λΈλͺ… llama3.1:8b
OLLAMA_TIMEOUT_SEC Ollama μš”μ²­ νƒ€μž„μ•„μ›ƒ 300

주의:

  • ν˜„μž¬ ꡬ쑰상 DATABASE_URL이 μ—†μœΌλ©΄ μ„œλ²„ μ‹œμž‘ μ‹œμ μ— μ‹€νŒ¨ν•©λ‹ˆλ‹€.
  • .env.exampleλŠ” μ˜ˆμ‹œ 파일이고, μ‹€μ œ μ‹€ν–‰μ—λŠ” .envκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

λ°±μ—”λ“œ μ‹€ν–‰

1. κ°€μƒν™˜κ²½ 생성 및 νŒ¨ν‚€μ§€ μ„€μΉ˜

python -m venv .venv
# Windows PowerShell
.venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
# macOS/Linux
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

2. Ollama λͺ¨λΈ μ€€λΉ„

ollama pull llama3.1:8b

OLLAMA_MODEL을 λ‹€λ₯Έ κ°’μœΌλ‘œ λ°”κΏ¨λ‹€λ©΄ ν•΄λ‹Ή λͺ¨λΈμ„ 미리 받아둬야 ν•©λ‹ˆλ‹€.

3. Poppler μ„€μΉ˜ (Windows, PDF OCR μ‚¬μš© μ‹œ ν•„μˆ˜)

이 ν”„λ‘œμ νŠΈμ˜ PDF OCR κ²½λ‘œλŠ” pdf2imageλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ, Windowsμ—μ„œλŠ” Popplerκ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ„€μΉ˜ μˆœμ„œ:

  1. Windows용 Poppler μ••μΆ• νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ
  2. μ›ν•˜λŠ” μœ„μΉ˜μ— μ••μΆ• ν•΄μ œ
  3. μ••μΆ• ν•΄μ œν•œ ν΄λ”μ˜ Library/bin 경둜λ₯Ό μ‹œμŠ€ν…œ PATH에 μΆ”κ°€
  4. μƒˆ 터미널을 μ—΄κ³  μ•„λž˜ λͺ…λ ΉμœΌλ‘œ μ„€μΉ˜ μ—¬λΆ€ 확인

μ˜ˆμ‹œ 경둜:

C:\Users\<μ‚¬μš©μžλͺ…>\Downloads\poppler-xx\Library\bin

확인 λͺ…λ Ή:

where.exe pdfinfo
where.exe pdftoppm
python -c "import shutil; print(shutil.which('pdfinfo'))"

μœ„ λͺ…λ Ήμ—μ„œ κ²½λ‘œκ°€ μ •μƒμ μœΌλ‘œ 좜λ ₯되면 μ€€λΉ„κ°€ 된 μƒνƒœμž…λ‹ˆλ‹€.

4. μ„œλ²„ μ‹€ν–‰

uvicorn main:app --reload --port 8000

ν—¬μŠ€μ²΄ν¬:

  • GET http://localhost:8000/health

ν”„λ‘ νŠΈμ—”λ“œ μ‹€ν–‰

cd frontend
npm install
npm run dev

κΈ°λ³Έ 개발 μ„œλ²„ μ£Όμ†Œ:

λ°±μ—”λ“œ κΈ°λ³Έ μ£Όμ†Œ:


API μš”μ•½

1. 처리 μ‹œμž‘

  • POST /api/process/start
  • multipart/form-data
  • ν•„λ“œλͺ…: file

응닡 μ˜ˆμ‹œ:

{
  "job_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

2. μž‘μ—… μƒνƒœ 쑰회

  • GET /api/process/{job_id}

응닡 μ˜ˆμ‹œ:

{
  "job_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "completed",
  "progress": 100,
  "stage": "completed",
  "message": "처리 μ™„λ£Œ",
  "result": {
    "filename": "sample.pdf",
    "raw_text": "...",
    "ocr_text": "",
    "merged_text": "...",
    "summary": "...",
    "category": "기술",
    "main_category": "기술",
    "sub_category": "AI",
    "confidence": 0.0,
    "category_reason": ""
  }
}

3. 처리 이λ ₯ 쑰회

  • GET /api/history

쿼리 νŒŒλΌλ―Έν„°:

  • limit: κΈ°λ³Έ 50, μ΅œλŒ€ 200

4. 처리 이λ ₯ 검색

  • GET /api/history/search

쿼리 νŒŒλΌλ―Έν„°:

  • q: 검색어
  • limit: κΈ°λ³Έ 50, μ΅œλŒ€ 200

νŠΈλŸ¬λΈ”μŠˆνŒ…

1. DATABASE_URL is required in environment (.env)

원인:

  • .env 파일이 μ—†κ±°λ‚˜ DATABASE_URL이 λΉ„μ–΄ 있음

ν•΄κ²°:

  1. .env.exampleλ₯Ό .env둜 볡사
  2. DATABASE_URL 값을 μ‹€μ œ PostgreSQL ν™˜κ²½μ— 맞게 μˆ˜μ •
  3. PostgreSQL μ‹€ν–‰ μ—¬λΆ€ 확인

2. Ollama λͺ¨λΈ κ΄€λ ¨ 였λ₯˜

예:

  • λͺ¨λΈμ„ 찾을 수 μ—†μŒ
  • Ollama μ—”λ“œν¬μΈνŠΈ μ—°κ²° μ‹€νŒ¨

ν•΄κ²°:

  1. Ollama μ„œλ²„ μ‹€ν–‰ μ—¬λΆ€ 확인
  2. .env의 OLLAMA_URL 확인
  3. .env의 OLLAMA_MODEL 확인
  4. ollama pull <λͺ¨λΈλͺ…> μ‹€ν–‰

3. PDF OCR 였λ₯˜

예:

  • Unable to get page count
  • pdfinfo not installed

원인:

  • Popplerκ°€ μ„€μΉ˜λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ PATH에 μ—†μŒ

ν•΄κ²°:

  1. Poppler μ„€μΉ˜
  2. Library/bin 경둜λ₯Ό PATH에 μΆ”κ°€
  3. μƒˆ ν„°λ―Έλ„μ—μ„œ where.exe pdfinfo둜 확인

4. HWP 처리 μ‹€νŒ¨

원인:

  • Hancom Office COM μžλ™ν™” ν™˜κ²½ 문제
  • λ³€ν™˜ νƒ€μž„μ•„μ›ƒ
  • 파일 ν˜•μ‹/인코딩 이슈

ν•΄κ²°:

  1. Windows ν™˜κ²½μ—μ„œ ν•œκΈ€ ν”„λ‘œκ·Έλž¨ μ„€μΉ˜ μƒνƒœ 확인
  2. HWP 파일이 μ •μƒμ μœΌλ‘œ μ—΄λ¦¬λŠ”μ§€ μˆ˜λ™ 확인
  3. ν•„μš” μ‹œ OCR fallback 경둜 μ‚¬μš© μ—¬λΆ€ 둜그 확인

μ£Όμ˜μ‚¬ν•­

  • μž‘μ—… μƒνƒœ 좔적은 λ©”λͺ¨λ¦¬ κΈ°λ°˜μ΄λ―€λ‘œ μ„œλ²„ μž¬μ‹œμž‘ μ‹œ μ§„ν–‰ 쀑인 job_id μƒνƒœλŠ” μœ μ§€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 이λ ₯ μ‘°νšŒλŠ” PostgreSQL μ €μž₯ κ²°κ³Όλ₯Ό κΈ°μ€€μœΌλ‘œ ν•©λ‹ˆλ‹€.
  • 일뢀 μΆ”μΆœκΈ°λŠ” 쀑간 μ‚°μΆœλ¬Όμ„ output/에 μ €μž₯ν•˜κ³ , API νŒŒμ΄ν”„λΌμΈμš© JSON은 data/ocr_output/에 μ €μž₯ν•©λ‹ˆλ‹€.
  • CORSλŠ” ν˜„μž¬ 전체 ν—ˆμš©μœΌλ‘œ μ„€μ •λ˜μ–΄ μžˆμ–΄ 운영 ν™˜κ²½μ—μ„œλŠ” 별도 μ œν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€.

κ°œμ„  아이디어

  • 비동기 μž‘μ—… 큐 λ„μž…
  • μž‘μ—… μƒνƒœλ₯Ό DB에도 μ €μž₯ν•˜λ„λ‘ ν™•μž₯
  • ν”„λ‘ νŠΈμ—”λ“œ 이λ ₯ UI κ°œμ„ 
  • μΆ”μΆœκΈ°λ³„ 좜λ ₯ 경둜 일관성 정리
  • μ˜ˆμ™Έ λ©”μ‹œμ§€ 및 운영 둜그 κ°œμ„ 
  • ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€

λΌμ΄μ„ μŠ€ / 배포 λ©”λͺ¨

μ™ΈλΆ€ OCR, PDF, HWP 처리 도ꡬ 및 λͺ¨λΈ μ˜μ‘΄μ„±μ΄ μžˆμœΌλ―€λ‘œ μ‹€μ œ 배포 μ „μ—λŠ” λ‹€μŒ ν•­λͺ©μ„ λ³„λ„λ‘œ μ κ²€ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

  • μ„œλ²„ OS별 μ˜μ‘΄μ„± μ„€μΉ˜ μ—¬λΆ€
  • PostgreSQL μ—°κ²° 정보 λ³΄μ•ˆ 관리
  • .env 및 μ—…λ‘œλ“œ 파일의 Git μ œμ™Έ 처리
  • 운영 ν™˜κ²½μš© CORS 및 둜그 μ •μ±…

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors