問題
- 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機能の向上に期待!