前回の記事でめちゃくちゃ便利なGoogle翻訳を徹底解説しました。



今回はPythonを使い、
- たくさんのPDFファイルをwebスクレイピングして、
- PDFファイルの特定ページ(英語問題ページ)を抽出し、
- ページ抽出したPDFデータを結合して、最後に
- 結合データをGoogle翻訳で翻訳
してみたいと思います。
PythonでPDFファイルをwebスクレイピング+結合
まずは翻訳対象のファイルをwebページから集めます。
参照するwebページ:中小企業診断士試験の過去問はこちら。
今回はPyPDF2(サードパーティライブラリ)を使いますので、インストールが未だの方は pip ( pip3 )でインストール↓。
1 |
pip install PyPDF2 |
今回書いたコードはこちら↓。
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 |
import os # OSの機能を利用するモジュール import urllib.request # URLを開くための拡張可能なライブラリ import time # 時刻に関するモジュール import PyPDF2 # 複数のPDFファイルを結合,抽出,結合するライブラリ merger = PyPDF2.PdfFileMerger() # 処理時間を計測する関数定義(デコレーター) def processing_time(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) print(f'func:{func.__name__:30}{time.time() - start}') return result return wrapper # URLからファイルをダウンロードする関数定義 def download_file(url, local_path): web_file = urllib.request.urlopen(url) local_file = open(local_path, 'wb') local_file.write(web_file.read()) @processing_time # ダウンロードファイルをローカルに保存する関数定義 def download_file_to_dir(url, local_dir): download_file(url, os.path.join(local_dir, os.path.basename(url))) @processing_time # リストのファイルのダウンロードと保存実行する関数定義 def download_file_of_lists_to_dir(url_lists): for url in url_lists: download_file_to_dir(url, local_dir) # PDFファイルを結合する関数定義 def pdf_merger_and_write(file): merger.write(file) if __name__ == '__main__': # ダウンロードするpdfファイルのリスト urls_list1 = ['https://www.j-smeca.jp/attach/test/shikenmondai/1ji{0}/e1ji{0}.pdf'.format(i) for i in range(2007,2018)] urls_list2 = ['https://www.j-smeca.jp/attach/test/shikenmondai/1ji{0}/E1ji{0}.pdf'.format(i) for i in range(2018,2020)] # 上記リストの結合 url_lists = urls_list1 + urls_list2 # ファイルを保存するローカルパス local_dir ='***:\\*******\\********\\Documents\\Exam_questions' # 結合したPDFファイルの保存ファイル名とパス write_to_local_file = '***:\\*******\\********\\Documents\\Exam_questions\\pdf_mergered_data.pdf' # url_lists のファイルダウンロードと保存の実行 download_file_of_lists_to_dir(url_lists) # PDFファイルのページ指定(英語ページ)+結合 merger.append('***:\\*******\\********\\Documents\\Exam_questions\\E1ji2019.pdf', pages=(0, 1)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\E1ji2019.pdf', pages=(18, 20)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\E1ji2018.pdf', pages=(0, 1)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\E1ji2018.pdf', pages=(14, 16)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2017.pdf', pages=(0, 1)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2017.pdf', pages=(16, 18)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2016.pdf', pages=(0, 1)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2016.pdf', pages=(20, 22)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2015.pdf', pages=(0, 1)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2015.pdf', pages=(17, 19)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2014.pdf', pages=(0, 1)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2014.pdf', pages=(14, 16)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2013.pdf', pages=(0, 1)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2013.pdf', pages=(11, 12)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2012.pdf', pages=(0, 1)) merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2012.pdf', pages=(16, 17)) #merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2011.pdf', pages=(9, 11)) #merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2010.pdf', pages=(19, 21)) #merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2009.pdf', pages=(20, 22)) #merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2008.pdf', pages=(15, 17)) #merger.append('***:\\*******\\********\\Documents\\Exam_questions\\e1ji2007.pdf', pages=(18, 19)) pdf_merger_and_write(write_to_local_file) merger.close() |
結合されたPDFファイルの作成・保存
↓無事、結合されたPDFファイルが作成・保存されました。
↓こちらが作成されたPDFファイルです。
コード実装のポイント
URLリストの作成




暗号化されたPDFファイル


file has not been decrypted




調べてみるとPDFのパスワード(暗号化)に関するエラーのようでした。修正がちょっと大変そうだったので今回は除外しました。


まだまだ、きれいなcodeを書けません。。。




Pythonを活用すれば生産性がグッと増す






Google翻訳でPDFファイルを翻訳
ドキュメント翻訳でサクッと簡単翻訳
Pythonで作成したPDFファイルをGoogle翻訳で翻訳してみましょう。
まずはGoogle翻訳を開きます。
↓ドキュメントをまるごと翻訳します。
テキストまるごと翻訳する方法は前回の記事にまとめてあります。よろしければ参考にして下さい。



翻訳結果
↓翻訳結果はこちら。訳文をWord文書にコピーペーストしたリンクも下に貼っておきます。
原文ファイルと訳文ファイル
参考サイトと講座
今回、以下のサイトと講座を参考にコーディングしました。
– DATA SCIENCE LIFE –
アメリカ在住データサイエンティストのかめさん(@usdatascientist)のブログ。
Pythonのコーディングについて、めちゃくちゃわかりやすく解説してあります。超ハイクオリティな講座でほんとにぜんぶ無料なの?ってなるくらいすごいブログです。
Python初心者の方にはかなりお勧めです。
note.nkmk.me
nkmkさん(@nkmk_me)のブログです。
こちらもPythonプログラミングについて、かなり詳しく書いてあります。今回使ったPyPDF2の扱い方も詳しく書かれてありました。
ぜひ参考にされてください。
現役シリコンバレーエンジニア(酒井 潤さん)が教えるPython 3 入門(Udemy)
現役シリコンバレーエンジニアの酒井 潤さん(@sakaijun)がUdemyで教えるPython講座もおすすめです。なんといっても解説がとても分かりやすい。
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
ちなみに今回の記事で書いた @processing_timeというコードはデコレーターという手法で、ちょっと概念の説明が難しい技術なのですが、酒井 潤さん(@sakaijun)の講座ではデバッガーを使って、とても分かりやすく解説してあります。
この講座ではPython3の基礎はもちろんのこと、応用編では
- データーベースアクセス(SQLite, MySQL, MongoDB, SQLAlchemy etc)、
- WEB(Flask, socket, RPC etc)、
- インフラ自動化(Fabric, Ansible)、
- データ解析(numpy, pandas, matplotlib, scikit-learn),
などなど、盛りだくさんの内容となっております。
こちらの講座は無料ではありませんが、たまに(感覚では月2回程度かな?)大幅割引(90%以上)をやっているので、そのタイミングを狙うのも良いかと思います。
ぜひ、おすすめです。
まとめ
Pythonを活用すれば、情報収集などの作業効率が一気に向上しますね。
Pythonの勉強はじめて、3~4カ月ほど経ちましたが、まだまだ、Pythonを使いこなせていません。もうちょっと上手く使えるように、さらにプログラミングの勉強に励みたいと思います。
中小企業診断士試験、第一次試験まであと2か月を切りました。
受験生のみまさま、受験勉強に忙しい中、いろいろと大変かと思いますが今回の記事が少しでもお役に立てれば幸いです。
それでは。