1
3

docconv良さげ: goのlangchainはpdfを読み込めないときがある

Last updated at Posted at 2024-02-17

問題

  • GPT Plugin開発中で使ってる
  • langchaingoのPDF読み込み機能
  • 正常に読み込めるファイルと読み込めないファイルがある
コード例
f, _ := os.Open("test.pdf")
defer f.Close()
finfo, _ := f.Stat()
loader := documentloaders.NewPDF(f, finfo.Size())
docs, err := loader.Load(cxt)

// 期待値ページ区切りの文章の配列
// docsが空の時がある
fmt.Printf("docs: %v\n", docs) 

解決方法

  • docconvを使ってPDFをテキストに変換
  • textsplitteerでテキストをN文字単位(400)で分割
  • 実行環境の読み込みツールを利用するので, pc, 本番, dockerで環境の設定をする必要がある😭

pdf以外にもlangchaingoにないパワポ,ワードにも対応しているよ

コード例
import (
    "code.sajari.com/docconv"
)

...

f, _ := os.Open("test.pdf")
defer f.Close()
text, _, _ := docconv.ConvertPDF(f)
docs, err := textsplitter.CreateDocuments(
	textsplitter.NewTokenSplitter(textsplitter.WithChunkSize(400)),
	[]string{text},
	nil,
)

環境設定

Dockerの場合
下記の行を追加

ランタイムの環境 debianとビルド環境のgoのバージョンに注意すること

環境例
FROM debian:12
RUN apt-get update && apt-get install -y \
    poppler-utils \
    wv \
    unrtf \
    tidy

Tips
コンテナベースの本番環境でalpineからdebianに変更するなら通信周りのツールが揃ってるか確認しよう

RUN apt-get update && apt-get install -y \
    apt-transport-https \
    curl \
    ca-certificates

Macの場合
ツールのインストール

インストール後,動かないならbrew install popplerを実行

mac
brew install poppler-qt5 wv unrtf tidy-html5
# 動かないなら下記を実行
brew install poppler

最後に

近いうちに改善されると思いますが,今後のlangchaingoのloader機能の向上に期待!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3