Python

Pythonで学校の宿題を楽しようとした話

皆さんには宿題がありますか?多くの人たちは無いでしょうが私は学生なので宿題はあります。

私は考えました。宿題もPythonで楽しちゃえ!!!というように。

 

そもそもどんな宿題なのか

英語の単語調べみたいなものです。

index英単語意味例文
0~例:apple例:りんご例:I ate an apple.

これをひたすら書き連ねる宿題です。ギョエエエエエエエエタノシイゾ

周りの人はひたすら辞書を写していたり、英単語帳を使っていたり……と聞きました。しかし、それらは無駄な情報が多いですよね。

もちろん、ある程度凝縮されているのでそれなりに効率化は図れると思いますが、私はまだまだ行ける。と確信しました。

どうやって効率化させるのか

さっきあった表をプリントに書くのですが、それをまるごとPythonで作成しようと考えました。余計な情報は無いので完璧(?)だと思います。

  1. 英単語を集める
  2. ネットの辞書をスクレイピングして意味と例文を調べる
  3. PandasのDataFrameで管理をする
  4. 2と3を繰り返す(欲しい英単語数回ループ)
  5. .csvで保存

というプロセスを考えました。

ネットの辞書といったらWeblioというイメージがあるのでWeblioを使います。

とりあえず実装してみよう

コードはこちらになりました。

工夫した点、変更した点は下に記載します。

 

どうやって英単語を集めようか

調べたところ、

  • ランダム英単語生成Webアプリ
  • パソコンの辞書からランダム抽出

が候補に上がりました。ただ、実用性という点(コスパ)では圧倒的に後者が有利なのでUbuntuの辞書を用いることにしました。

ちなみに、Ubuntuでは
“/usr/share/dict/words”

に単語帳があります

意味を調べよう

ここは単純でWeblioの検索バーに文字を入力させて検索ボタンを押すだけです。

driver.find_element_by_xpath(‘xpath’).sendkeys(“調べたい英単語”)

でオッケー

そこから、意味の部分のxpathからtextを抽出するだけでできました。

 

問題は例文

例文は必ず文でないといけないので(主語と動詞がある)以下のようなものだと❌になってしまいます。

これでもI amつければokay!!!!だと思ってとりあえずソースコード読んでみました

注目してほしいのは途中のところで文字にリンクが貼ってあるところはtextじゃないんですよね。(僕の知識不足で本当はできるのかもしれないけど)

スクレイピングしてみたらなんか文がおかしいと思ったら一部分だけ抜けていました……そこらへんもちゃんと実装させるか!となりましたが色んな例外作らなくちゃならなくて一度は試したものの心が折れてしまいました……

以上の理由から例文だけは別のサイトを使いたいので例文がしっかりしているサイトを探しました。

n年間探し求めたところ、オンライン版ロングマン現代英英辞典がヒットしました。例文がしっかりしていたのでこれに決めました。

ただ、これは意味を教えてくれないのでweblioとこれという二度手間になってしまいますがとりあえず実装しました。

欠損値はどうしましょうか

具体的な例だと……

  • 意味、例文がヒットしなかった

というものですね。

ページで意味や例文のxpathがヒットしなければ必然的にerror吐かれるのでtry構文でタコ殴りにしました。

はじめは片方抜けててもまぁ何とかなるっしょと思いながらこのエラーは無視して無いものは無いでいいやと片付けたところ、写すときにすごく頭を使っていちいち調べたり考えたりして疲れたのでやめました。

具体的には、予めフラグを用意しておいてtry文の最後にそのフラグが更新されるようにしてからtry構文を抜けたあとに最初に代入した値であるかという条件分岐を追加しました。

文だとわかりづらいのでコードで。

 

実際に動かしてみて

簡単にメリットとデメリットを紹介しようと思います。

メリット

  • スクレイピングの技術が向上した
  • 宿題を楽してる感があって気持ちいい
  • 作ることが楽しいと感じられるようになった

デメリット

  • 人生そんなに甘くない(効率化には至らなかったことは後ほど説明します)
  • スクレイピングに時間がかかる(仕方ないけど)

結局宿題が効率化できなかった理由はいくつかあります。

  • 例文が長すぎて書ききれない and もっと簡単な文章で良い
  • 先生に提出しても大丈夫な単語かどうか見極めなきゃいけない

ですが、これをやったおかげでやる気が出たので結果オーライです。

 

もちろん、宿題は完全に自動化させることによって自分に宿題をやるメリットが失われてしまうのでほどほどにはしようと思います。

身近な作業を効率化させようという考えは非常に面白い(それ、Pythonでやれるんじゃね?)のでこれからも積極的にコーディングしていきたいと考えています。

 

お読みいただきありがとうございました。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です