PDFをPython(PyPDF2)で操作する - PDFからテキストを抽出する
前回の記事、 PDFをPython(PyPDF2)で操作する - PDF・暗号化PDFファイルの読み込み では、 PyPDF2 の PdfFileReader
を使ってPDFファイルの読み込みを行いました。今回は読み込んだPDFファイルからデータの抽出を行います。
事前準備
前回同様、 アメリカ大統領からの大統領令のページ からダウンロードしたファイルを使います。
見た目はこんな感じです。全部で3ページほどあります。
ページへのアクセス
まずは、読み込んだPDFファイルから操作対象のページを定める必要があります。 ここでは、「任意のページにアクセスする方法」と「すべてのページにアクセスする方法」の2種類を紹介します。
任意のページにアクセスする
読み込んだPDFファイルの任意のページにアクセスする方法です。 サンプルコードは以下のようになります。
1import PyPDF2
2
3FILE_PATH = './files/executive_order.pdf'
4
5with open(FILE_PATH, mode='rb') as f:
6 reader = PyPDF2.PdfFileReader(f)
7 page = reader.getPage(0) #最初のページにアクセスする
PdfFileReader
で読み込んだ後、 getPage
関数でアクセスするページを指定します。
引数の数字は 0
始まりになり、今回は全3ページのPDFなので、0
1
2
が指定可能です。
PDFすべてのページにアクセスする
次にPDFファイルすべてのページにアクセスする方法です。 サンプルコードは以下になります。
1import PyPDF2
2
3FILE_PATH = './files/executive_order.pdf'
4
5with open(FILE_PATH, mode='rb') as f:
6 reader = PyPDF2.PdfFileReader(f)
7 for page in reader.pages:
8 pass
PdfFileReader
クラスには pages
というプロパティがあり、それは PageObject
クラスのリストです。
pages
プロパティをループすることで、最初のページから順に処理ができます。
(上のサンプルではとりあえず pass
にしていますが、ここに何らかの処理が入ります。)
ページからテキストを抽出する
操作対象のページが決まれば、次にテキストを抽出しましょう。
1import PyPDF2
2
3FILE_PATH = './files/executive_order.pdf'
4
5with open(FILE_PATH, mode='rb') as f:
6 reader = PyPDF2.PdfFileReader(f)
7 page = reader.getPage(0)
8 print(page.extractText())
extractText
関数で、ページ内のテキストを文字列型として取得します。
Presidential Documents
55243 Federal Register
Vol. 83, No. 213
Friday, November 2, 2018
Title 3Ñ
The President
Executive Order 13850 of November 1, 2018
Blocking Property of Additional Persons Contributing to the
Situation in Venezuela
By the authority vested in me as President by the Constitution and the
laws of the United States of America, including the International Emergency
Economic Powers Act (50 U.S.C. 1701
et seq.
) (IEEPA), the National Emer-
gencies Act (50 U.S.C. 1601
et seq.
), section 212(f) of the Immigration and
Nationality Act of 1952 (8 U.S.C. 1182(f)) (INA), the Venezuela Defense
of Human Rights and Civil Society Act of 2014 (Public Law 113Ð278),
as amended (the Venezuelan Defense of Human Rights Act), and section
301 of title 3, United States Code,
I, DONALD J. TRUMP, President of the United States of America, in order
to take additional steps with respect to the national emergency declared
in Executive Order 13692 of March 8, 2015, and relied upon for additional
steps taken in Executive Order 13808 of August 24, 2017, Executive Order
13827 of March 19, 2018, and Executive Order 13835 of May 21, 2018,
particularly in light of actions by the Maduro regime and associated persons
to plunder VenezuelaÕs wealth for their own corrupt purposes, degrade Ven-
ezuelaÕs infrastructure and natural environment through economic mis-
management and confiscatory mining and industrial practices, and catalyze
a regional migration crisis by neglecting the basic needs of the Venezuelan
people, hereby order as follows:
Section 1
. (a) All property and interests in property that are in the United
States, that hereafter come within the United States, or that are or hereafter
come within the possession or control of any United States person of the
following persons are blocked and may not be transferred, paid, exported,
withdrawn, or otherwise dealt in: any person determined by the Secretary
of the Treasury, in consultation with the Secretary of State:
(i) to operate in the gold sector of the Venezuelan economy or in any
other sector of the Venezuelan economy as may be determined by the
Secretary of the Treasury, in consultation with the Secretary of State;
(ii) to be responsible for or complicit in, or to have directly or indirectly
engaged in, any transaction or series of transactions involving deceptive
practices or corruption and the Government of Venezuela or projects or
programs administered by the Government of Venezuela, or to be an
immediate adult family member of such a person;
(iii) to have materially assisted, sponsored, or provided financial, material,
or technological support for, or goods or services to or in support of,
any activity or transaction described in subsection (a)(ii) of this section,
or any person whose property and interests in property are blocked pursu-
ant to this order; or
(iv) to be owned or controlled by, or to have acted or purported to
act for or on behalf of, directly or indirectly, any person whose property
and interests in property are blocked pursuant to this order.
(b) The prohibitions in subsection (a) of this section apply except to
the extent provided by statutes, or in regulations, orders, directives, or
licenses that may be issued pursuant to this order, and notwithstanding
any contract entered into or any license or permit granted prior to the
date of this order.
VerDate Sep<11>2014 18:13 Nov 01, 2018Jkt 247001PO 00000Frm 00003Fmt 4705Sfmt 4790E:\FR\FM\02NOE0.SGM02NOE0
文字列が抽出できました。Title 3Ñ
や ezuelaÕs
など一部の記号が文字化けしているようです。
また、ページ内の文章全体を1つの文字列として抽出するため、抽出した文字列を自然言語処理で更に加工するなど工夫が必要そうですね。
まとめ
今回は PyPDF2 を使って読み込んだPDFファイルのページからテキストを抽出しました。 extractText
関数を呼び出すだけなので、処理自体の難しさはありませんが、処理したテキストを更に加工するなどの工夫が必要でしょう。