【5分でわかる】PythonでPowerPointのテキストを抽出

 

【悩み】
・PythonでPowerPoint内のテキストをサクッと抜き出せる?
・3ページ目のスライドからなど特定スライドからテキストを抽出できる?
・テーブル(表)や発表者用ノート(原稿)に記載された文章も抽出したい!



こういった「悩み」に答えます。
 

【本記事の内容】
① Powerpointからテキスト抽出できるPythonライブラリ
② PythonでPowerPointからテキスト抽出するための準備
③ PowerPointからテキスト抽出する方法



本記事に掲載した手順を実践したことで、30分以内でPowerPoint内に記載された文字を抜き出せました(下の動画参照)。
 



記事の前半では「Python向けPowerPointライブラリの一覧」と「ライブラリなどのインストール方法」を解説します。

記事の後半では「PowerPointから文字を抽出するプログラム」を紹介します。
 

この記事を読み終えることで、「ある文字が記載されたスライドを簡単に特定できる」状態になります。
 

ちなみに、Pythonを使うことで本記事で紹介すること以外にも様々なPowerPointの操作を自動化できます。以下に実現できる範囲をまとめましたので、良ければアクセスしてみてください。

>> Pythonで実現できるPowerPointの操作一覧


 

Powerpointからテキスト抽出できるPythonライブラリ


PythonでPowerPointからテキストを抜き出したい場合、「python-pptx」ライブラリを使います。

以下の記事で「python-pptx」のライセンスや概要をご紹介しています。気になる方は、ぜひ読んでみてください。

>> 【5分でわかる】PythonでPowerPointの新規作成操作を自動化

 

以降で、PowerPointからテキスト抽出を実現するための環境準備を説明します。Pythonやライブラリのインストール手順を丁寧に解説しますね。


 

PythonでPowerPointからテキスト抽出するための準備


以下の流れで準備しましょう。
 

【流れ】
手順1:Pythonのインストール
手順2:python-pptxライブラリのインストール
手順3:PowerPointのプレースホルダーを理解



上記の流れで説明します。
 

Pythonのインストール

以下の記事を参考にし、お使いのパソコンやサーバーにPythonをインストールしましょう。

>> 【ubuntu向け】pyenvでPythonをインストールする手順【簡単】

>> 【コピペOK】pyenvでPythonをインストールする手順【Linux用】

>> 【最短5分】PyAutoGUIをWindowsにインストールする手順の「手順1:Pythonのインストール」を参照

>> 【環境構築】インストーラーでMacOSにPythonをインストール

 

python-pptxライブラリのインストール

python-pptxライブラリのインストール手順に関しては、以下の記事の「python-pptxライブラリのインストール」箇所をご覧ください。

>> 【5分でわかる】PythonでPowerPointの新規作成操作を自動化


 

PowerPointのプレースホルダーを理解

PowerPointには、「プレースホルダー」という概念があります。詳細に関しては、以下の記事「PowerPointのプレースホルダーを理解」の箇所をご覧ください。

>> 【5分でわかる】PythonでPowerPointの新規作成操作を自動化


 

PowerPointからテキストを抽出したい場合、python-pptxライブラリを使います。以降で、上記ライブラリを使ったプログラムをご紹介しますね。


 

PowerPointからテキスト抽出する方法


本章では、以下に関してご紹介します。
 

【ご紹介事項】
・PowerPoint全体からテキスト抽出
・特定のスライドからテキスト抽出



以降で、上記の各項目に関して以下のスライド「sample.pptx」を用いて説明します。
 

  

PowerPoint全体からテキスト抽出

「PowerPoint全体からテキスト抽出」するPythonプログラムは、以下となります。適宜変更部分は自分用に書き換えてください。

import collections.abc
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

# スライドから文字を抽出
def check_recursively_for_text(this_set_of_shapes, txt_list):
    for shape in this_set_of_shapes:
        if shape.shape_type == MSO_SHAPE_TYPE.GROUP:
            check_recursively_for_text(shape.shapes, txt_list)
        else:
            if hasattr(shape, "text"):
                txt_list.append(shape.text)

            if shape.has_table: # 表に含まれるテキストを抽出
              for cell in shape.table.iter_cells():
                txt_list.append(cell.text)

    return txt_list

# ファイルの読み込み
prs = Presentation('./sample.pptx') # 適宜変更

# スライドごとに繰り返し
for slide in prs.slides:
  # テキスト抽出
  txt_list = []
  txt_list = check_recursively_for_text(slide.shapes, txt_list)

  # 発表者ノートからテキスト抽出
  if slide.has_notes_slide and slide.notes_slide.notes_text_frame.text:
    txt_list.append(slide.notes_slide.notes_text_frame.text)

  print(txt_list)



上記のプログラムを「python-powerpoint-text-extract.py」というファイル名で保存しましょう。
   

以下のコマンドを実行し、保存した「python-powerpoint-text-extract.py」を実行します。

python python-powerpoint-text-extract.py
['テキストボックス', '小さめのテキストボックス', '1の発表者用ノート']
['表(テーブル)', '1', '2', '3', '4', '5', '6', '7', '8', '9']
['グループ化されたオブジェクト', '図形のテキスト', 'テキストボックス']



コマンド実行後、「全スライドに掲載されたテキスト」が表示された場合、正常に動作したと判断できます。
 

上記のプログラムでは、以下のテキストを抽出できます。
・Shape単体で記載された文字
・表(テーブル)内に記載された文字
・複数のShapeでグループ化されたオブジェクト内の文字
・発表者用のノートに記載された文字


 

特定のスライドからテキスト抽出

「特定のスライドからテキスト抽出」するPythonプログラムは、以下となります。適宜変更部分は自分用に書き換えてください。

import collections.abc
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

# スライドから文字を抜き出す
def check_recursively_for_text(this_set_of_shapes, txt_list):
    for shape in this_set_of_shapes:
        if shape.shape_type == MSO_SHAPE_TYPE.GROUP:
            check_recursively_for_text(shape.shapes, txt_list)
        else:
            if hasattr(shape, "text"):
                txt_list.append(shape.text)

            if shape.has_table: # 表に含まれるテキストを抽出
              for cell in shape.table.iter_cells():
                txt_list.append(cell.text)

    return txt_list

slide_num = 2 # 取得したいスライドのページ番号を指定(適宜変更)

# ファイルの読み込み
prs = Presentation('./sample.pptx') # 適宜変更

# スライドごとに繰り返し
now_page_num = 0
for slide in prs.slides:
  now_page_num += 1
  if now_page_num != slide_num: # 対象スライドではない場合スキップ
    continue
    
  # テキスト抽出
  text_list = []
  text_list = check_recursively_for_text(slide.shapes, text_list)

  # 発表者ノートからテキスト抽出
  if slide.has_notes_slide and slide.notes_slide.notes_text_frame.text:
    text_list.append(slide.notes_slide.notes_text_frame.text)

  print(text_list)



上記のプログラムを「python-powerpoint-target-page-text-extract.py」というファイル名で保存しましょう。
   

以下のコマンドを実行し、保存した「python-powerpoint-target-page-text-extract.py」を実行します。

python python-powerpoint-target-page-text-extract.py
['表(テーブル)', '1', '2', '3', '4', '5', '6', '7', '8', '9']



コマンド実行後、「指定したスライドに掲載された文字」が表示された場合、正常に動作したと判断できます。

 

python-pptxライブラリを使うことで簡単にパワーポイントからテキストを抜き出せます。ぜひ利用してみて下さい。



Pythonを使うことで、PowerPointからテキストを自動で抽出できることを説明しました。このPythonを使うことで、あらゆる業務や作業を自動化できます。
その事例やヒントを知りたい方には、以下の本がオススメです。

 



ちなみに、上記教材の詳細なレビューに関しては、以下のサイトにまとめています。

>> 退屈なことはPythonにやらせようのレビュー


 

【まとめ】PythonでPowerPointのテキストを抽出


いかがでしたでしょうか?

上記で紹介したpython-pptxライブラリを使うことで、PythonでPowerPointに記載されたテキストを抽出できます。

最後にもう一度内容を確認しましょう。
 

【おさらい】
・PowerPointからテキストを抜き出したい場合python-pptxを使う
・python-pptxで表や発表者用ノートからも文字抽出可能
・あるスライドに記載されたテキストの抽出も簡単に可能



本ブログでは、「業務の時短化に繋がるIT技術」や「クラウドやOSSの学び方」などを発信しています。定期的に更新していますので、ぜひブックマークをよろしくお願いいたします。

>> IT技術やその学び方を発信しているサイト「駆け出し物語」(本ブログ)
 


 

コメント