28
19

More than 1 year has passed since last update.

gpt-indexで日本語PDFを読み込む【Python】

Posted at

概要

gpt-index(llama-index)で、日本語PDFを安定して読めるようにするためのプルリクがマージされたので、使い方を紹介します。

使い方

download_loaderでCJKPDFReaderをダウンロードして使います。

from gpt_index import download_loader

CJKPDFReader = download_loader("CJKPDFReader")

loader = CJKPDFReader()
documents = loader.load_data(file='data/article.pdf')
print(documents)

デフォルトではすべてのページの文字列を結合した結果を返しますが、
ページ単位で分割したい場合は、インスタンス作成時にconcat_pages = Falseとします。

loader = CJKPDFReader(concat_pages = False)

例えば以下の日本語PDFは、gpt-indexのデフォルトのリーダー(SimpleDirectoryReader)だと文字化けします(少なくともMacの場合)。
https://www8.cao.go.jp/chosei/koubun/about/shikumi/g_bun/kenshuu.pdf

from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data() # pdfをdataフォルダに格納しておく
print(documents)
[Document(text='ެจॻ\u0605ཧ੍\u0c53ʹ͍ͭͯ\n2\u0ee8\u08cd\nᶗ͜Ε·Ͱͷจॻ\u0605ཧͱެจॻ\u0605ཧ๏੍ఆͷഎܠ\n̍ɽ͜Ε·Ͱͷจॻ\u0605ཧʢߦ\u0a53ؔػͷྫʣ\n̎ɽެจॻ\u0605ཧ๏੍ఆͷഎܠ\nᶘެจॻ\u0605ཧ੍\u0c53ͷ֓ཁ\n̍ɽର\u09c5\nʢ̍ʣର\u09c5ؔػʢ̎ʣର\u09c5จॻʢ̏ʣެจॻ\u0605ཧͷ๏\u0f6fɾ\u0a53ྩɾΨΠυϥΠϯ\u0c73ͷ\u070eؔ\n̎ɽެจॻ\u0605ཧ๏ͷϙΠϯτ̏ɽެจॻ\u0605ཧ๏ͷ\u0cba༰\nʢ̍ʣ\u0ee8తʢ̎ʣߦ\u0a53จॻͷ\u0605ཧ\nᶃߦ\u0a53จॻͷ࡞\u0a52  ...

CKFPDFReaderだと以下の通り正確に読めます(コード略)

[Document(text='公文書管理制度について\n\n\x0c\n目 次\n\nⅠこれまでの文書管理と公文書管理法制定の背景\n\n1.これまでの文書管理(行政機関の例)\n2.公文書管理法制定の背景\n\nⅡ公文書管理制度の概要\n\n1.対象\n\n(1)対象機関\n(2)対象文書\n(3)公文書管理の法律・政令・ガイドライン等の関係\n\n2....

補足

ちなみに、デフォルトのリーダーでも、文字化けしない日本語PDFもあります。
デフォルトのリーダーではPDFの解析にPyPDF2を使っており、PyPDF2はutf8の文字コードをサポートしているので、日本語でもutf8の場合は読めて、それ以外だと文字化けするのだと思われます。
CJKPDFReaderは何をやっているかというとPyPDF2の代わりにpdfminer.sixを使うようにしただけです。詳細は以下のプルリクをご確認ください。
https://github.com/emptycrown/llama-hub/pull/35

28
19
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
28
19