pythonのpython-pptxモジュールを利用して、PowerPointのページごと、ファイルごとの文字数カウントの自動化をします。
このプログラムでやりたい事
パワーポイントと言えば、人前での説明(プレゼンテーション)で利用されると思います。
一般的に説明には1分間で300文字程度が適当だと言われている為、作成したパワーポイントの資料がどれぐらいの文字数を持っているかを予め把握しておくことは説明時間を見積もる際にも有効です。
ところがパワーポイントの標準的な機能には、文字数のカウント機能はありません。
ネットで検索したところ、WORDなどに文字列を貼り付けて文字数のカウントをする方法が紹介されておりました。
利用する資料が小数であれば、その様な手作業でもよいかもしれませんが、多数あった場合、手作業の負荷もかなりの内容になります。
今回は、その様な作業を省略する為、pythonでの自動化を目指しました。
pythonのソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# coding: UTF-8 # モジュールのインポート import os, tkinter, tkinter.filedialog, tkinter.messagebox import glob, re, datetime import pptx # PowerPointから文字列を取得 def pptx2text(file_path): pagetexts = [] # 抽出したテキストデータを格納する空リスト try: prs = pptx.Presentation(file_path) except pptx.exc.PackageNotFoundError as e: print(e) print(type(e)) print('~$やtmpで始まる一時ファイルは対象外') return pagetexts # スライドごとにテキストデータを抽出する for sld in prs.slides: texts = [] # 抽出した要素ごとの文字列を格納する空リスト for shape in sld.shapes: # shapeに含まれるテキストデータを抽出 if shape.has_text_frame: for text in shape.text.splitlines(): texts.append(text) # tableに含まれるテキストデータを抽出 elif shape.has_table: for cell in shape.table.iter_cells(): for text in cell.text.splitlines(): texts.append(text) # shape_typeがTEXT_BOX(画像オブジェクト)なら、textを取得 elif re.search('TEXT_BOX', str(shape.shape_type)): texts.append(shape.text) # shapreとtableとTEXT_BOXの文字配列を1つに結合して格納 pagetexts.append("".join(texts)) return pagetexts # 改行、空白を削除 def cleantext(t): return t.replace(' ', '').replace(' ', '').replace('\r\n', '').replace('\n', '') # フルパスからファイル名を出力 def getFileName(fname): # \文字列で区切って配列化 aryCnt = len(fname.split('\\')) # 配列の最後の要素を取得 fname = fname.split('\\')[aryCnt - 1] return fname # Const RETURN = '\n' # 選択フォルダ配下のファイルを指定する文字列 SEARCH_OBJ_SENTENCE='\\*.*' # 本日日付時分秒(yyyymmddhhmmss)ファイル名が被らない様に秒単位で取得 todayYmdhms = str(datetime.datetime.now()).replace('-','').replace(':','').replace(' ','').split('.')[0] # 出力ファイル名 OUT_FILE_NAME='pptx_sentence_length_' + todayYmdhms + '.txt' # フォルダ選択ダイアログ画面表示の開始 root = tkinter.Tk() root.withdraw() fTyp = [("","*")] dir = tkinter.filedialog.askdirectory() # キャンセルなら、処理終了 if dir == "": quit() # 選択したフォルダからファイル一覧を作成 outfile = open(OUT_FILE_NAME, 'w') outfile.write('※~$やtmpで始まる一時ファイルはTotal:0で出力されます。' + RETURN) for f in glob.glob(dir + SEARCH_OBJ_SENTENCE, recursive=True): # 指定したフォルダ以下の要素分だけループ # ファイル名 fname = str(f) # 拡張子がpptx以外は対象外 if re.search('pptx$', f): # スライドごとのテキストデータを配列で変換 pageTexts = pptx2text(fname) # pptxファイル名を出力ファイルに出力 outfile.write(RETURN + getFileName(fname) + RETURN) # ページごとに文字数を出力 for index in range(len(pageTexts)): pageInfo = "\tページ:" + str(index) + ", 文字数:" + str(len(cleantext(pageTexts[index]))) outfile.write(pageInfo + RETURN) # ファイルごとに文字数を出力 bookInfo = " Total:" + str(len(cleantext("".join(pageTexts)))) outfile.write(bookInfo + RETURN) else: print(' ⇒ 対象外(*.pptx以外)' + RETURN) outfile.close() |
事前準備
ソースコードの動作にはpythonのインストールに加え、python-pptxモジュールの導入が必要です。
python-pptxモジュールの導入
python-pptxモジュールの導入
1 |
pip install python-pptx |
※プログラムに記載されているtkinterモジュールなどが不足している場合、同じ様に導入してください。
参考)pythonに関するその他の記事
pythonによるExcelブックの統合を扱っています。

pythonで複数ブックのExcelシートを1シートに統合(openpyxl)
pythonのopenpyxlモジュールを利用して、複数のExcelの内容を1シートに纏めるプログラミングをしていきます。 このプログラムで出来る事 任意のフォルダ内の複数のExcelファイルを取得して、新たに作成したExcelに転記する作...
参考)pythonで自動ログイン
Web上のログイン処理を自動化したい場合は以下をご覧ください。

pythonのseleniumモジュールで自動ログイン【proxy対応版】
pythonのseleniumモジュールを利用して、GoogleChrome上のWebサイトへ自動ログインするプログラミングをしていきます。 proxy対応無し版、proxy対応有り版の両方を記載していきます。 このプログラムで出来る事 手...
参考)python環境を実行ファイル化(exe化)
作成したプログラムを配布したい場合などには実行ファイル化(exe化)をお試しください。

pythonを仮想環境で実行ファイル化(venv、pyinstallerモジュール)
前回の記事(pythonでYouTubeアップロード(YouTubeAPI))では、pythonとyoutubeAPIによる動画の自動アップロードを作成しました。今回は、前回作成したpythonのプログラムを実行ファイル形式 (exe化) ...
参考)GASとLINEボットで自動翻訳アプリ
Google Apps ScriptとLINEボットによる自動翻訳アプリの事例です。

Google Apps ScriptとLINEボットで翻訳アプリ作成 – GASによる翻訳アプリの作成 –
Google Apps Script(GAS)のLanguageAppを利用して、英語と日本語の双方向の翻訳をするLINEボットをプログラミングをしていきます。 GoogleのOCR技術を利用して、テキストだけではなく、画像内の文字列に対し...
コメント