概要
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