PDFもWebもこれ1つ!LangChain「DocumentLoader」でデータを丸飲みする技術
はじめに
RAGシステムを開発していて一番面倒なのは、実は「データの準備」です。社内の情報は、PDF、Excel、Notion、Slack、Webサイトなど、あらゆる場所に散らばっています。
これら全てを自前でパースするのは悪夢ですが、LangChainのDocumentLoaderを使えば、100種類以上のデータソースに対して統一的なインターフェースでアクセスできるようになります。
Unstructured Data(非構造化データ)の壁
単にファイルを読み込むだけでは不十分です。PDFの表組み、PowerPointのレイアウト、HTMLの不要な広告タグなどを除去・成形して「綺麗なテキスト」にする必要があります。
DocumentLoaderは、この「読み込み + クレンジング + メタデータ抽出」を一手に引き受けてくれます。
CSV / Textの読み込み
基本となるテキストやCSVファイルの読み込みは簡単です。
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader(file_path='./data.csv', encoding='utf-8')
data = loader.load()
# 各行が1つのDocumentオブジェクトになる
print(data[0].page_content)
PDF Loaderの選び方(PyPDF)
PDFLoaderにはいくつか種類がありますが、標準的な PyPDFLoader が最もバランスが良いです。
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("whitepaper.pdf")
pages = loader.load_and_split()
# ページ番号もメタデータとして取得できる
print(pages[0].metadata) # {'source': 'whitepaper.pdf', 'page': 0}
OCRが必要な場合(スキャン画像PDF)は UnstructuredPDFLoader を使いましょう。
WebBaseLoaderによるスクレイピング
特定のURLから記事本文だけを抽出したい場合は WebBaseLoader が便利です。
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://example.com/blog/ai-news")
docs = loader.load()
内部でBeautifulSoupを使用しており、主要なタグを自動的にパースしてくれます。
まとめ
「データあるところにDocumentLoaderあり」。自前でスクレイピングスクリプトを書く前に、まずはLangChainのドキュメントで対応するLoaderがないか探してみましょう。
次回は、単純な検索では精度が出ない場合に使う奥の手、「Reranking(リランク)」による検索精度のブースト方法について解説します。
コメント
コメントを投稿