Document Parsing
#[https://python.langchain.com/v0.1/docs/integrations/document_loaders]
document
랭체인의 기본 문서 객체. 문서 로더로 다양한 형식의 문서 파일을 불러오면 document 객체 형태로 로드한다.
커스텀 로더를 구현하면 반드시 문서를 document 객체로 감싸줘야한다.
document.page_content : 문서의 텍스트 // document.metadata : 문서와 관련된 속성값
문서 로더
종류
’’’
- pyPDFLoader
- CSVLoader
- UnstructuredHTMLLoader
- JSONLoader
- TextLoader
- DirectoryLoader
자주 쓰는 메서드 소개
- load_and_split(): 문서 로드와 텍스트 분할 작업을 하나의 단계로 결합한것으로, 문서를 로드한 뒤 텍스트 분할기를 사용해 텍스트를 원하는 기준으로 나눈다.
- lazy_load() : 모든 페이지를 메모리에 즉시 로드하지 않고 필요할때 순차적으로 하나씩 로드한다.(제너레이터 방식)
- aload() : 비동기 방식으로 문서를 로드한다. 문서를 로드할 때 즉시 실행되지 않고 비동기 객체를 반환하며, await 키워드를 사용해 실행한다. ‘’’
예시
FILE_PATH = “./data/1205document.pdf”
from langchain_community.document_loaders import pyPDFLoader
loader = pyPDFLoader(FILE_PATH)
docs = loader.load()
from langchain_text_splitters import RecursiveCharactorTextSplitter
text_splitter = RecursiveCharactorTextSplitter(chunk_size=200, chunk_overlap=0) split_docs=loader.load_and_split(text_splitter=text_splitter)
for docs in loader.lazy_load(): print(docs.metadata)
adocs = loader.aload() await adocs
pdf 로더
’’’
- pymupdf : chatgpt에 통합되어있는 로더. 파일경로, 페이지 뿐 아니라 페이지 수, 형식, 제목, 작성자 등 다양한 메타데이터를 지원함.
- unstructuredpdf : 마크다운이나 pdf와 같은 비구조화된 또는 반구조화된 파일 형식을 다루기 위한 공통 인터페이스를 지원함. 이미지만 따로 추출해서 저장하는 기능도 있다. 내부적으로 각 텍스트들을 별도의 요소로 생성한다. load()에서 mode=”elements” 옵션을 설정하면 텍스트 청크들이 서로 분리된 상태에서 별도의 도큐먼트 객체로 변환된다.
- pypdfium2 : 로더 역시 처리 속도가 빠르고 정확성도 높아 복잡한 구조의 pdf 파일에서도 안정적으로 텍스트를 추출할 수 있다.
- pdfminer : pdf파일을 로드해서 html 텍스트를 생성할 수 있다. html 코드 자체를 임베딩해서 llm 에전달하는 방식으로 사용하면 더 정확한 콘텐츠를 사용할 수 있다.
- pypdfdirectory : 특정한 파일 경로 안에 있는 여러개의 pdf 내용을 한번에 로드할 수 있다.
- pdfplumber : 출력 문서에 pdf와 그 메타데이터를 함께 저장한다. 특히 pdf 안에 바운딩 박스를 지정해서 원하는 부분만 가져올 수 잇도록 한다. ‘’’
hwp 로더
’’’ langchain에서는 구성되어있지 않기때문에 커스텀으로 만들었다. 이 책에서..
from langchain_teddynote.document_loaders immport HWPLoader ‘’’