PPTをプレゼンするときに、自分の手元で表示できるノートですが、英語の文章を日本語に変えることになりました。しかし、1枚づつ変更するのはけっこう面倒です。
そこで、一旦エクセルに書き出して、Google翻訳したものを、また戻すというコードを書いてみたら、思ったよりうまくいったので、備忘録を兼ねて記事にします。
なお、私はJupyter Notebookでこの作業を行っていますので、他の環境の方は工夫してみてください。
まず、読み込みたいパワーポイントファイルは、同じディレクトリに入れておきます。今回は記事用にダミーのサンプルファイルを作りました。それをページごとに読み込んで、PandasのDataFrameに1ページごと取り込んで、同じディレクトリにEXCELで出力します。
コードはこちら
import os
import pandas as pd
in_pptx= 'サンプルPPTノート.pptx'
prs = pptx.Presentation(in_pptx)
pptx_name = os.path.basename(in_pptx)
df=pd.DataFrame()
for i, sld in enumerate(prs.slides):
note=sld.notes_slide.notes_text_frame.text
df=pd.concat([df, pd.DataFrame([[i, note]])])
excel_writer = pd.ExcelWriter('SlideNotes.xlsx')
df.columns=['page', 'note']
df.to_excel(excel_writer, 'original_notes', index=False)
excel_writer.close()
print ('fnished!')
このエクセルを自動翻訳などで・・
このように、書き換えたいシートを作ります。今回は、translatedというシート名にしました。
もちろん、自分で翻訳されてもいいし、自動翻訳を修正してもいいかと思います。
その後、今度はPPTのノートを書き換えます。
ここで、元のPPTファイルを書き換えるようにしてしまいましたが、名前を変えるように、コードを変更されてもいいと思います。
import pptx
import pandas as pd
df=pd.read_excel('SlideNotes.xlsx', sheet_name='translated')
in_pptx= 'サンプルPPTノート.pptx'
prs = pptx.Presentation(in_pptx)
for i, sld in enumerate(prs.slides):
if type (df.iloc[i, 0]) != int: #空の場合はエラーとなるので、処理を飛ばす
prs.slides[i].notes_slide.notes_text_frame.text=df.iloc[i, 1]
prs.save(in_pptx)
print ('finished!')
そうすると、このようにPPTXのノートが書き換えられています。
このパワーポイントのノートはそこまで使わないかもしれませんが、この方式はタイトルや本文のテキストの抽出にも応用できるかと思いますので、ぜひトライしてみていただければと思います!