「自動要約ツール」サイトを用いて自動要約(Python×Selenium)
概要
下記サイトに文章を貼り付け、自動要約した文章をcsvに反映
プログラムを作成した理由
「700個のCSV × 約100行 = 70000文章の長文テキスト(500~1000文字)を
1週間で全て要約(200文字以下)して欲しい」
という仕事を上司が引き受けたは良いが、人間がやるには辛い…助けて!
と私に依頼が舞い込んで来た為。
1文章を要約するのに仮に1分掛かったとして、
70000文章 × 60秒 ≒ 420万秒 ≒ 1166時間 ≒ 48.5時間…上司はこの仕事をどうやって捌くつもりだったのでしょうか…
仮に10人でやれば「48.5 ÷ 10 ≒ 4.85時間」ですし、人海戦術で解決ですかね?←
※本記事は下記「浦島太郎」を要約する形でご紹介致します
要約前_浦島太郎
むかし、むかし、あるところに浦島太郎という心やさしい漁師が住んでいました。
ある日のこと、浜辺を歩いていると一匹の亀が子供達にいじめられているのを見ました。
「これこれ、かめをいじめたらかわいそうだよ。はなしておやり」
そう言って浦島太郎は子供たちから亀を助けてやりました。
…続きを読む 童話たいとる一覧 | 昔話童話童謡の王国
URL:https://www.douwa-douyou.jp/contents/html/douwa/douwa6.shtml
1、手動実行内容の紹介
1、「自動要約ツール」サイトを開く
2、「テキスト入力」ボックスに要約したい文章を貼り付け
3、「自動要約する」ボタンを押す
4、「3行ダイジェスト」が表示されている為、手動でコピペしてcsvに反映
5、上記2~4を要約したい文章分(70000回)繰り返して作業完了!お疲れ様でした!
…これを70000回手作業で繰り返し…拷問の一種ですか???
と突っ込みたくなりますね(笑)
仮に手作業でやるにしても、
既存業務を抱えつつの対応になるので、残業は避けられない( ;∀;)
という訳で手動ではやってられないので、↓自動化実行内容をどうそ
2、自動化実行内容の紹介(ソースコード付き)
1、ダイアログを表示し、自動要約したいCSVを複数選択する
※以下サイトを参考に致しました、ありがとうございます!
参考:http://radiology-technologist.info/post-248
1 2 | # fileselectの最後returnで返されたものをfname_Listに格納 fname_List = get_fileSelect.get_fileSelect("csvファイル","*csv") |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import tkinter from tkinter import filedialog as tkFileDialog import os # 概要:ファイル選択ダイアログを表示 def get_fileSelect(fileName,extensionName): root = tkinter.Tk() # tkinterのインスタンスを生成 root.withdraw() # この一文が無いと謎の黒いウインドウが出てくるらしい fTyp = [(fileName, extensionName)] iDir = 'C:/Desktop' # ダイアログが開くディレクトリを指定 # 今回はデスクトップ # ダイアログ表示 filenames = tkFileDialog.askopenfilenames(filetypes=fTyp, initialdir=iDir) return filenames # 選択ファイルの絶対パスを返します。 |
2、選択したCSVを開き、要約したいB列「内容」の文言を取得
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 | # 「ファイルを選択」にて選択されたcsvループ for target_File in fname_List: # csvファイル名取得 csv_fileName = os.path.basename(target_File) # 実行件数カウント更新 Run_Count = Run_Count + 1 # csv読み込み # 全てstr型で受け取る事で、数値が小数点込みになることを避ける read_date = pd.read_csv(target_File, encoding = ENCOD, dtype=str) # 全欠損値を除外 read_date = read_date.fillna('') # indexをExcel開始行数に合わせる read_date.index = read_date.index + EXCEL_READ_START_INDEX # 最大行数取得 row_maxIndex = len(read_date) + EXCEL_READ_START_INDEX - 1 # csv件数取得(最小値は1ではなく0) max_row = len(read_date) # 取得行数ループ # 初期値:最小index「2」 # 最終値:要素数 + 最小index「2」 =最大index + 1 for row in range(EXCEL_READ_START_INDEX ,row_maxIndex + 1): # 自動要約_検索文言取得 Search_word = read_date.loc[row]["内容"] # 文言が無い場合は次行へ移行 if Search_word == "": continue |
# 自動要約_検索文言取得
Search_word = read_date.loc[row][“内容”]
にて
行位置:「row」(取得行数ループカウンタ)
列位置:項目名が「内容」である列(B列)
に存在している文章を取得しています。
※
最初は2行目「内容」列である、浦島太郎の文章(B2セル)を取得
以降は3行目「内容」列である、桃太郎の文章(B3セル)を取得…
と繰り返していきます。
3、「自動要約ツール」サイトを開く
4、「テキスト入力」ボックスに要約したい文章を貼り付け、「自動要約する」ボタンを押す
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # テキスト入力エリア要素_取得 element = get_element_reference(logging ,driver ,element_df ,"テキスト入力エリア" ,class_group) # 入力内容を初期化した上で検索文言反映 element.clear element.send_keys(Search_word) # 「自動要約する」ボタン_要素取得 element = get_element_reference(logging ,driver ,element_df ,"自動要約する" ,class_group) # 現在のURL取得 before_url = driver.current_url # クリックして検索条件反映 element.click() time.sleep(1) # URLが変更されるまで待機 url_stop.url_stop(driver,before_url,WEB_TIMEOUT_SECOND) |
「ID取得」「URLが変更されるまで待機」は以下記事をご参照下さい。
◆参照箇所「ID取得」
2、自動化実行内容の紹介(ソースコード付き)
5、アップしたい企業である事を確認し、「選択」ボタンを押す「URL変更待機」
2、自動化実行内容の紹介(ソースコード付き)
8、「CSVアップロード確認」画面を確認し、エラーが存在していなければ「登録」ボタンを押し、
「アップロードが、完了しました。」の文言が表示された事を確認
5、「3行ダイジェスト」タブをクリックし、文言を取得
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 | #「3行ダイジェスト」_要素取得 element = get_element_reference(logging ,driver ,element_df ,"3行ダイジェスト_項目" ,class_group) # クリックしてダイジェスト表示 element.click() time.sleep(1) #「ダイジェスト」_要素取得 element = get_element_reference(logging ,driver ,element_df ,"3行ダイジェスト_テキスト" ,class_group) # テキスト取得 row_digest = element.text # 記号調整 row_digest = row_digest.replace(' ', '') row_digest = row_digest.replace(' ', '') # 文字数調整前文言格納 temp_digest = row_digest # 調整後文言初期化 after_digest = row_digest # 改行コード調整 after_digest = after_digest.replace("\n", "") # csvに3行ダイジェスト反映 read_date.at[row, "3行ダイジェスト"] = after_digest |
※「5行ダイジェスト、10行ダイジェストを取得してCSVに反映」は3行ダイジェストとほぼ同様の為、省略
6、上記2~5を【選択CSVファイル数×記載行数】繰り返し実行し、CSVとして出力し、実行完了!
1 2 3 4 5 | # CSV出力 # dldir_name(ファイル保存パス) # csv_fileName(選択されたcsvファイル名) read_date.to_csv(dldir_name + "\\要約文言追加後_" + csv_fileName, index=False, encoding="cp932") |
3、要約後_文章
3行ダイジェスト
「浦島太郎さん、僕はこの間あなたから助けられた亀です。お姫様があなたを竜宮城におつれしなさいというのでお迎えにまいりました。」
浦島太郎は時間のたつのも忘れて楽しみました。
よいかわからなくなってしまい、玉手箱を開けてみることにしました。
5行ダイジェスト
「浦島太郎さん、僕はこの間あなたから助けられた亀です。お姫様があなたを竜宮城におつれしなさいというのでお迎えにまいりました。」
「竜宮城へつれていってくれるのかい。それなら、少し行ってみようか。」
「浦島太郎さん、亀をたすけてくれてありがとうございます。どうかごゆっくりしていって下さい。」
浦島太郎は時間のたつのも忘れて楽しみました。
よいかわからなくなってしまい、玉手箱を開けてみることにしました。
10行ダイジェスト
「これこれ、かめをいじめたらかわいそうだよ。はなしておやり」
ある日、浦島太郎がいつものようにつりをしていると亀が海から出てきて、
「浦島太郎さん、僕はこの間あなたから助けられた亀です。お姫様があなたを竜宮城におつれしなさいというのでお迎えにまいりました。」
「竜宮城へつれていってくれるのかい。それなら、少し行ってみようか。」
「浦島太郎さん、亀をたすけてくれてありがとうございます。どうかごゆっくりしていって下さい。」
浦島太郎は時間のたつのも忘れて楽しみました。
「もう7日も竜宮城にいたので、そろそろ家に帰ります。ありがとうございます。」
よいかわからなくなってしまい、玉手箱を開けてみることにしました。
白いけむりが出てきて、浦島太郎はあっという間におじいさんになってしまいました。
竜宮城で楽しく過ごしている間に、何百年も経ってしまったのです。
要約文章、いかがでしょうか?
多々不自然な文章もありますが、
「言いたい事は分かる」と思えるような文章にはなっているのではないでしょうか?
「本サイト(プログラム)で大まかに要約し、
文章のクオリティを上げたいならば、人間の目視確認&修正を行う」
という運用にすれば様々な場面で活かせるのではないかと思います。
4、工数削減結果&感想
「700個のCSV × 約100行 = 70000文章の長文テキスト(500~1000文字)」
の要約に「19時間18分45秒」かかっておりました。
(退勤後もPCは放置して実行させてました笑)
ヘッドレス(画面非表示)で実行していたので、定例作業をしつつ本プログラムを実行出来ておりました。(フリーズもせず、サイトからアクセス拒否もされず…何とか耐えてくれて安心です)
納期短めの突貫工事としては良いプログラムが書けたと思います。
↓以下実行ログ掲載
自動要約_実行開始「sentence_summery.Py」実行開始
開始時間:2021/05/06_18:42:18
L・1/687ファイル目_実行開始
L・実行ファイル名「●●.csv」
…続きを読む
実行時間:19:18:45
終了時間:2021/05/07_14:01:03
687件実行致しました!
編集履歴
2021/12/19 新規作成