Jump to content

LlamaIndex로 MS 워드, PDF, HWP, TXT 파일 손쉽게 불러오는 방법


Recommended Posts

지난 RAG 3부작 시리즈에서는 클로바 스튜디오를 활용하여 RAG를 구현하는 방법에 대해 자세히 설명했습니다.
이번 포스팅에서는 LlamaIndex를 이용하여 MS 워드, PDF, HWP, txt 등 다양한 형식의 파일을 불러오는 방법을 소개하고자 합니다.
 
RAG 3부작 시리즈
✔︎ (1부) RAG란 무엇인가 링크
✔︎ (2부) RAG 구현 단계 알아보기 링크
✔︎ (3부) CLOVA Studio를 이용해 RAG 구현하기 Cookbook 링크
 

image.png.e0863244358b0336743c54c07979ad4f.png

 

RAG(Retrieval-Augmented Generation)를 구현하기 위해서는 문서를 효과적으로 불러오고 처리할 수 있는 작업이 필요합니다. LlamaIndex는 이를 위해 MS 워드, PDF, HWP, txt 등 다양한 형식의 파일을 읽어들여 LLM 모델이 사용할 수 있는 형태로 변환해주는 Loader를 제공합니다. LlamaIndex는 불러올 파일의 개수에 따라 두 가지 방법을 제시합니다.

 

1. 단일 파일만 불러오는 방식입니다. 데이터 유형에 맞는 parser를 단독으로 사용하여 개별 파일을 불러옵니다. 이 방식은 문서 자체에 대한 메타데이터를 포함하고 있어, 문서 내용뿐만 아니라 문서와 연계된 다른 작업에 용이합니다.

2. 폴더 내 동일한 유형의 여러 파일을 한 번에 불러오는 방식입니다. SimpleDirectoryReader를 통해 폴더를 불러온 뒤, 해당 데이터 유형에 맞는 parser로 폴더 내 모든 파일을 처리할 수 있습니다. 이 방식은 여러 문서의 본문 내용을 빠르게 가져올 수 있어 로딩 속도와 양적인 면에서 강점이 있습니다.

이처럼 LlamaIndex는 사용 목적에 맞게 데이터를 불러오고 처리할 수 있는 모듈들을 하나의 패키지로 제공함으로써, RAG 구현을 보다 쉽고 효율적으로 수행할 수 있게 만들어줍니다.

 

필요 패키지 설치

pip install llama-index-readers-file

사용할 모듈 한 번에 불러오기

from llama_index.core import SimpleDirectoryReader
from llama_index.readers.file import (
    DocxReader,
    HWPReader,
    PyMuPDFReader,
)
from pathlib import Path

 

 

1. 개별 문서 파일 불러오기

MS Word 문서 불러오기 : DocxReader

MS Word(워드) 파일을 불러올 때, 파일명은 "metadata" 변수에, 문서 전체 내용은 페이지 구분 없이 "text" 변수에 저장됩니다. 아래 실행 코드는 현재는 Deprecated된 이전 페이지와 폴더 단위 불러오기 방식을 참고해 작성했습니다. 각 파일에는 고유 ID가 할당되고, 문서 본문 전체가 "text"에 저장되며, 파일명은 "metadata"의 "file_name"에 저장됩니다. 문서 임베딩 결과는 "embedding" 변수에 정리할 수 있습니다. 이를 통해 Word 파일 내 표 형식과 표 안의 텍스트 정보도 성공적으로 불러올 수 있음을 아래 예시에서 확인할 수 있습니다.

loader = DocxReader()
documents = loader.load_data(file=Path("/Users/user/Desktop/connector/docx/table2.docx"))
 
print(documents)

ex_docx.png.81bb5cc8319cd72bbb02b75b98c92d22.png

 

PDF 불러오기 : PyMuPDFReader

PyMuPDFReader를 사용하면 단일 PDF 파일을 간편하게 불러올 수 있습니다. 다음은 LlamaIndex의 공식 깃허브에서 가져온 사용 예제입니다. 파일마다 고유한 ID가 할당되며, 문서의 본문 내용 전체는 "text" 변수에 저장됩니다. 또한, 파일의 이름은 "metadata"의 "file_name"으로 저장되고, 문서 임베딩 결과는 "embedding" 변수에 정리할 수 있습니다. 아래 예시를 통해 PyMuPDFReader가 그림 안의 텍스트뿐만 아니라 경계가 모호한 표 형식의 글자들도 성공적으로 추출할 수 있음을 알 수 있습니다.

loader = PyMuPDFReader()
documents = loader.load_data(file_path=Path("/Users/user/Desktop/connector/data/korean1.pdf"), metadata=True)
 
print([doc for doc in documents if doc.metadata.get('source') == '8']) # 8쪽만 확인

ex_pdf.png.0973397f90b93d0e83430c4cffe2f527.png

 

한글 파일 불러오기: HWPReader

아래의 사용 예제 코드는 LlamaIndex의 공식 깃허브의 사용 예제를 가져왔습니다. 파일마다 고유한 ID가 할당되고, 문서를 불러올 때 각 페이지마다 고유한 Doc ID와 해당 페이지의 내용인 Text가 지정되지만, 이 외에 문서에 대한 추가적인 메타데이터는 별도로 제공되지 않습니다. 아래 예시를 통해 HWPReader가 hwp 파일 내의 표나 박스 형식 안에 있는 텍스트를 효과적으로 추출할 수 있으며, 머릿말과 같은 본문 외의 텍스트도 빠짐없이 가져올 수 있음을 확인할 수 있습니다.

hwp_path = Path("/Users/user/Desktop/connector/hwp/report1.hwp")
reader = HWPReader()
documents = reader.load_data(file=hwp_path)
 
print(documents)

ex_hwp.png.ad04b08581971a68bde919f2c8fd526a.png

Quote

HWP 문서에서는 글자 여백에 null 문자가 이스케이프 시퀀스('\x00') 형태로 나타나는 문제가 있습니다. 이 문제를 해결하려면 문서에서 해당 문자를 제거하는 추가 작업이 필요합니다.

 

 

2. 동일한 유형의 txt 파일만 포함된 폴더 전체를 불러오기 : SimpleDirectoryReader

LlamaIndex에는 txt 파일 전용 로더(parser)가 별도로 제공되지 않습니다. 그러나 SimpleDirectoryReader를 사용하여 폴더 내의 모든 파일을 한 번에 불러오는 방식으로 txt 파일을 로딩할 수 있습니다. 만약 특정 txt 파일들만 선택적으로 불러오고 싶다면, 해당 파일들을 별도의 폴더에 모아 저장한 후 SimpleDirectoryReader로 그 폴더를 지정하여 불러오면 됩니다. SimpleDirectoryReader의 자세한 사용 방법은 LlamaIndex 홈페이지의 가이드에서 확인할 수 있습니다. SimpleDirectoryReader를 사용하여 txt 파일을 불러올 경우, 메타데이터의 구성이 Parser(docx, pdf, hwp 등)를 사용했을 때와는 차이가 있습니다. 메타데이터에는 파일 저장 경로, 파일 이름, 파일의 형태(text), 파일 크기, 제작 일자, 마지막 수정일이 포함되며, 각 문서마다 고유한 ID가 생성됩니다.

reader = SimpleDirectoryReader(input_dir="txt파일이있는/폴더/경로/입력")
documents = reader.load_data()
 
print(documents)

ex_txt.png.ca0a7321a6a021905ed665c653fc4347.png

 

 

3. 폴더에서 특정 문서 통째로 불러오기

폴더에서 특정 파일만을 통째로 불러올 수 있습니다. 문서를 불러올 때, 각 페이지마다 고유한 Doc ID와 해당 페이지의 내용인 Text가 지정됩니다. 이 외에 문서에 대한 추가적인 메타데이터는 별도로 제공되지 않습니다.

parser = DocxReader()
file_extractor = {".docx": parser}
documents = SimpleDirectoryReader(
    "폴더/경로/입력", file_extractor=file_extractor
).load_data()
 
for doc in documents:
    print(doc)

ex_pick.png.88d2e00ef7a431fb30afd0e41a3b7a0e.png

 

 

맺음말

이상으로 LlamaIndex가 제공하는 다양한 문서 로더(Loader)와 그 사용 방법에 대해 알아보았습니다. LlamaIndex는 단일 파일을 불러올 때는 해당 데이터 유형에 맞는 parser를 사용하고, 여러 파일을 한 번에 불러올 때는 SimpleDirectoryReader와 parser를 조합하여 사용할 수 있도록 합니다. 이를 통해 사용자는 문서의 내용뿐만 아니라 메타데이터까지 효과적으로 추출할 수 있으며, 대량의 문서를 빠르게 처리할 수 있습니다.

LlamaIndex의 이러한 기능은 RAG 모델 구현에 필수적인 요소로, 사용자가 보다 쉽고 편리하게 문서를 불러와 모델에 활용할 수 있도록 돕습니다. 앞으로도 LlamaIndex는 다양한 형식의 데이터를 처리할 수 있는 새로운 Loader를 지속해서 개발할 것으로 기대되며, 이는 RAG 모델의 활용 범위를 더욱 확장시킬 것입니다.

 

image.png.9fa441f51bb41b4e6e37c93868108b2b.png

  • Haha 1
링크 복사
다른 사이트에 공유하기

  • CLOVA Studio 운영자 changed the title to LlamaIndex로 MS 워드, PDF, HWP, TXT 파일 손쉽게 불러오는 방법

게시글 및 댓글을 작성하려면 로그인 해주세요.



로그인
×
×
  • Create New...