| name | hwp-parser |
| description | 한글(HWP/HWPX) 문서를 다양한 포맷(Text, HTML, ODT, PDF)으로 변환하고, Markdown/HTML을 HWPX로 생성하는 작업을 도와줍니다. LLM/RAG 파이프라인을 위한 문서 처리, 청킹, LangChain 연동을 지원합니다. |
HWP Parser 개발 도우미
한글(HWP/HWPX) 문서를 읽고 변환하는 모든 작업을 도와줍니다. Python API와 CLI 도구를 제공하며, LLM 활용을 위한 워크플로우를 지원합니다.
환경 확인
-
가상환경 활성화 확인
source venv/bin/activate
-
패키지 설치 확인
pip install -e .
pip install hwpparser[all]
-
시스템 의존성 확인
brew install --cask google-chrome
sudo apt install google-chrome-stable
sudo apt install chromium-browser
brew install pandoc
sudo apt install pandoc
요청 분류
사용자 요청을 분석하여 해당하는 기능 파악:
| 키워드 | 기능 | 참조 |
|---|
| 텍스트 추출, 읽기, 파싱 | HWP → Text | hwp_to_text() |
| HTML 변환, 웹페이지 | HWP → HTML | hwp_to_html() |
| ODT, OpenDocument | HWP → ODT | hwp_to_odt() |
| PDF 변환 | HWP → PDF | hwp_to_pdf() |
| 마크다운, 한글 생성 | Markdown → HWPX | markdown_to_hwpx() |
| 청킹, RAG, 벡터 DB | 문서 청킹 | hwp_to_chunks() |
| LangChain, 문서 로더 | LangChain 연동 | HWPLoader |
| 일괄 변환, 폴더 처리 | 배치 변환 | batch_convert() |
| 검색 인덱싱, JSONL | 인덱스 생성 | export_to_jsonl() |
| 메타데이터, 정보 추출 | 문서 메타데이터 | extract_metadata() |
작업 흐름
1. 단일 파일 변환
import hwpparser
doc = hwpparser.read_hwp("document.hwp")
print(doc.text)
print(doc.html)
doc.to_odt("output.odt")
doc.to_pdf("output.pdf")
text = hwpparser.hwp_to_text("document.hwp")
2. CLI 사용
hwpparser text document.hwp
hwpparser convert document.hwp output.txt
hwpparser convert document.hwp output.pdf
hwpparser batch ./hwp_files/ -f text -o ./text_files/
hwpparser formats
3. LLM/RAG 워크플로우
chunks = hwpparser.hwp_to_chunks("document.hwp", chunk_size=1000)
for chunk in chunks:
embedding = embed(chunk.text)
vector_db.insert(embedding, chunk.metadata)
from hwpparser import HWPLoader, DirectoryHWPLoader
loader = HWPLoader("document.hwp")
docs = loader.load()
loader = DirectoryHWPLoader("./documents", recursive=True)
docs = loader.load()
hwpparser.export_to_jsonl("./documents", "./index.jsonl", chunk_size=1000)
4. 배치 처리
result = hwpparser.batch_convert("./hwp_files", "./text_files", "txt")
print(f"변환 완료: {result.success}/{result.total}")
all_text = hwpparser.batch_extract_text("./documents")
5. HWPX 생성
hwpparser.markdown_to_hwpx("# 제목\n내용", "output.hwpx")
hwpparser.html_to_hwpx("<h1>제목</h1><p>내용</p>", "output.hwpx")
hwpparser.convert("input.md", "output.hwpx")
hwpparser.convert("input.docx", "output.hwpx")
지원 변환
| 입력 → 출력 | 함수/CLI |
|---|
| HWP → Text | hwp_to_text(), convert ... -f text |
| HWP → HTML | hwp_to_html(), convert ... -f html |
| HWP → ODT | hwp_to_odt(), convert ... -f odt |
| HWP → PDF | hwp_to_pdf(), convert ... -f pdf |
| Markdown → HWPX | markdown_to_hwpx(), convert file.md file.hwpx |
| HTML → HWPX | html_to_hwpx() |
| DOCX → HWPX | convert file.docx file.hwpx |
주요 작업 예시
단일 파일 텍스트 추출
요청: "이 HWP 파일 내용 읽어줘"
text = hwpparser.hwp_to_text("document.hwp")
print(text)
폴더 전체 일괄 변환
요청: "documents 폴더의 모든 HWP를 PDF로 변환해줘"
result = hwpparser.batch_convert("./documents", "./pdf_output", "pdf")
print(f"성공: {result.success}, 실패: {result.failed}")
RAG 파이프라인 구축
요청: "HWP 문서들을 청킹해서 벡터 DB에 넣을 수 있게 해줘"
chunks = hwpparser.hwp_to_chunks("document.hwp", chunk_size=1000)
for chunk in chunks:
embedding = your_embed_function(chunk.text)
vector_db.insert({
'embedding': embedding,
'text': chunk.text,
'metadata': chunk.metadata
})
LangChain 문서 로더
요청: "LangChain에서 HWP 문서들 사용하고 싶어"
from hwpparser import DirectoryHWPLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = DirectoryHWPLoader("./documents", recursive=True)
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
chunks = splitter.split_documents(docs)
검색 인덱스 생성
요청: "Elasticsearch에 넣을 JSONL 파일 만들어줘"
hwpparser.export_to_jsonl(
"./documents",
"./search_index.jsonl",
chunk_size=1000
)
마크다운을 한글 문서로 변환
요청: "README를 HWPX로 만들어줘"
hwpparser.convert("README.md", "README.hwpx")
메타데이터 추출
요청: "이 HWP 파일 정보 알려줘"
meta = hwpparser.extract_metadata("document.hwp")
print(f"글자 수: {meta['char_count']}")
print(f"단어 수: {meta['word_count']}")
예외 처리
from hwpparser.exceptions import (
HWPFileNotFoundError,
ConversionError,
DependencyError,
UnsupportedFormatError
)
try:
result = hwpparser.convert("document.hwp", "output.pdf")
except HWPFileNotFoundError:
print("파일을 찾을 수 없습니다")
except DependencyError as e:
print(f"의존성 누락: {e}")
except ConversionError as e:
print(f"변환 실패: {e}")
테스트
pytest tests/ -v
pytest tests/test_reader.py -v
pytest tests/ --cov=hwpparser
참고 문서
의존성 라이선스
중요: 이 프로젝트는 AGPL v3 라이선스의 pyhwp 라이브러리에 의존합니다.