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 データに文脈を与えるために不可欠であり、PyMuPDFMarkdown 出力をサポートするようになったことで、レベル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レベル」 を参照してください。