スキップしてメイン コンテンツに移動

PDFもWebもこれ1つ!LangChain「DocumentLoader」でデータを丸飲みする技術

PDFもWebもこれ1つ!LangChain「DocumentLoader」でデータを丸飲みする技術

はじめに

RAGシステムを開発していて一番面倒なのは、実は「データの準備」です。社内の情報は、PDF、Excel、Notion、Slack、Webサイトなど、あらゆる場所に散らばっています。

これら全てを自前でパースするのは悪夢ですが、LangChainのDocumentLoaderを使えば、100種類以上のデータソースに対して統一的なインターフェースでアクセスできるようになります。

Unstructured Data(非構造化データ)の壁

Issue

単にファイルを読み込むだけでは不十分です。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(リランク)」による検索精度のブースト方法について解説します。

このブログ記事はAIを利用して自動生成されました。

コメント