Skip to content

Latest commit

 

History

History
39 lines (28 loc) · 2.5 KB

File metadata and controls

39 lines (28 loc) · 2.5 KB

PDF·HWPX 문서 넣기

방법은 세 가지다. 어느 쪽이든 KorQuAD 평가용 색인과는 분리된 컬렉션(기본 docs)에 들어간다.

방법 언제 쓰나
화면의 "문서 넣기"에 파일을 끌어다 놓는다 몇 개만 넣고 바로 물어볼 때
POST /upload (multipart files[], collection) 다른 시스템에서 연동할 때. 기존 청크는 그대로 두고 새 청크만 추가하며, 내용이 같은 청크는 다시 넣지 않는다
COLLECTION=docs python -m kdr.ingest_docs ./dir/ 파일이 많을 때. 이 방식은 컬렉션을 처음부터 다시 만들기 때문에 지운 문서가 남지 않는다

질문할 때는 화면에서 컬렉션을 고르거나 API에 {"collection": "docs"}를 넣는다.

처리 방식

형식 처리
PDF 페이지마다 본문 블록을 읽어 400~900자 단위로 묶는다. 괘선이 있는 표는 따로 찾아 markdown 표로 바꾸고, 표 하나를 청크 하나로 넣는다. 표 영역은 본문에서 제외한다
HWPX Contents/section*.xml의 문단(hp:p)을 읽는다. 표(hp:tbl)는 markdown 표로 바꾼다

청크마다 source(파일명), page(PDF는 쪽 번호, HWPX는 절 번호), kind(text 또는 table) 메타데이터가 붙는다. 인용 제목은 "파일명 p.N" 형식으로 API 응답에 그대로 나온다.

Q: 5년 이상 근속하면 연차가 며칠인가?
A: 17일 [2]
   [2] sample_policy.hwpx §1  [표] | 근속연수 | 연차일수 | ... | 5년 이상 | 17일 |
   path: retrieve → grade:2/4 → generate → verify:ok

확인한 범위

표가 들어 있는 PDF·HWPX 샘플(tests/fixtures/)과 위키백과에서 내려받은 PDF 3건으로 11문항을 물어봤다. 10문항은 정답이었고, 문서에 답이 없는 1문항은 "근거를 찾지 못했다"고 답했다. 모델은 Qwen3 8B, 구성은 그래프 RAG다.

한계

  • 괘선이 없는 표(위키백과 정보 상자 같은 것)는 표로 인식되지 않고 본문 텍스트로 들어간다. 답은 나오지만 표 구조는 잃는다. Docling이나 pymupdf_layout으로 바꾸면 나아질 것이다.
  • PDF의 줄바꿈이 단어 중간에 남을 수 있다("증 권사이다"). 형태소 분석과 임베딩이 어느 정도 흡수하지만 완전하지는 않다.
  • HWP 5.0(구형 바이너리 형식)은 지원하지 않는다. HWPX만 된다.
  • 스캔한 PDF는 OCR이 없어 빈 청크가 된다.
  • 여러 단으로 조판된 문서는 블록 순서가 섞일 수 있다.