Closed9

LlamaIndexのSimpleDirectoryReaderのソースを読む

suzuki-navisuzuki-navi

DEFAULT_FILE_READER_CLS に拡張子ごとのReaderクラスのマッピングが定義されている。

".pptx": PptxReader,
".csv": PandasCSVReader,

マッピングされている拡張子のファイルであればそのReaderがデータを抜き出す。それ以外の拡張子は無条件にUTF-8のテキストファイルとみなして、そのテキストを抜き出している。ということが SimpleDirectoryReader の定義からわかる。

suzuki-navisuzuki-navi

PptxReader は以下のファイルで定義されている。

https://github.com/jerryjliu/llama_index/blob/v0.7.2/llama_index/readers/file/slides_reader.py

スライドごとに、 Slide #{i}: というような文字列でスライド番号とともに、スライドに含まれるテキストを抜き出し、最終的にそれを全部改行で区切って1つのテキストにしている。

https://github.com/jerryjliu/llama_index/blob/v0.7.2/llama_index/readers/file/slides_reader.py#L96-L111

テキストだけでなく画像も抜き出している。

https://github.com/jerryjliu/llama_index/blob/v0.7.2/llama_index/readers/file/slides_reader.py#L56-L84

transformersVisionEncoderDecoderModel, ViTFeatureExtractor, AutoTokenizer というのを使っているらしい。

https://github.com/jerryjliu/llama_index/blob/v0.7.2/llama_index/readers/file/slides_reader.py#L40-L48

いずれにせよ最終的には、テキストとして抜き出したものをすべて改行区切りで連結して1つのテキストにしている。

suzuki-navisuzuki-navi

.csv を処理する PandasCSVReader は以下のファイルで定義されている。このファイルの後半である。

https://github.com/jerryjliu/llama_index/blob/v0.7.2/llama_index/readers/file/tabular_reader.py#L54-L115

行ごとにカラムの値を , で連結し、最後にすべての行を改行で連結して1つのテキストにするのがデフォルトの処理。

concat_rows というオプションを指定すれば、各行をそれぞれ別々のドキュメントとして扱うようだ。

オプションを指定するには PandasCSVReader のインスタンスを自分で生成する必要がある。生成したインスタンスは SimpleDirectoryReader のコンストラクタに渡す。

suzuki-navisuzuki-navi

結論

CSVだろうがPPTXだろうが、行やページの区切りを意識することなく、単に改行で連結したテキストを生成しているだけ。CSVはカラムの構成も考慮されない。

このスクラップは2023/07/13にクローズされました