PyMuPDF、LLM、およびRAG#
PyMuPDF を 大規模言語モデル(LLM) フレームワークおよび全体的な RAG(Retrieval-Augmented Generation) ソリューションに統合することで、文書データを提供する最も高速かつ信頼性の高い方法が提供されます。
いくつかのよく知られた LLM ソリューションは、PyMuPDF と独自のインターフェースを持っています。この分野は急速に成長しているため、もっと見つけた場合はお知らせください。
Markdown にエクスポートする必要がある場合:
LangChain との統合#
LangChain の専用ローダーを使用して直接統合するのは簡単です。以下のようにします:
from langchain_community.document_loaders import PyMuPDFLoader
loader = PyMuPDFLoader("example.pdf")
data = loader.load()
LangChainを完全に利用する詳細については、PyMuPDF を参照してください。
LlamaIndex との統合#
LlamaIndex 🦙 の専用 PyMuPDFReader
を使用して、文書の読み込みを管理します。
from llama_index.readers.file import PyMuPDFReader
loader = PyMuPDFReader()
documents = loader.load(file_path="example.pdf")
詳細は、 ゼロからRAGを構築する をご覧ください。
データのチャンキングの準備#
データのチャンキング(または分割)は、LLM データに文脈を与えるために不可欠であり、PyMuPDF が Markdown 出力をサポートするようになったことで、レベル3のチャンキング がサポートされることを意味します。
Markdown 形式で出力#
Markdown 形式で文書をエクスポートするには、別途のヘルパーが必要です。パッケージ pymupdf4llm は、各ページに対して標準テキストとテーブルテキストを統合されたMarkdown形式の文字列で出力する、PyMuPDF 関数の高レベルなラッパーです。
# convert the document to markdown
import pymupdf4llm
md_text = pymupdf4llm.to_markdown("input.pdf")
# Write the text to some file in UTF8-encoding
import pathlib
pathlib.Path("output.md").write_bytes(md_text.encode())
詳細については、次を参照してください: pymupdf4llmのドキュメント。
Markdown 出力の使用方法#
Markdown 形式のデータが準備できたら、データをチャンク化/分割して LLM に供給する準備が整います。例えば、LangChain の場合は、次の手順を行います。
import pymupdf4llm
from langchain.text_splitter import MarkdownTextSplitter
# Get the MD text
md_text = pymupdf4llm.to_markdown("input.pdf") # get markdown for all pages
splitter = MarkdownTextSplitter(chunk_size=40, chunk_overlap=0)
splitter.create_documents([md_text])
詳細は 「テキスト分割の5レベル」 を参照してください。