はじめに
この記事の最後に英単語15個を日本語訳とともに載せています。その英単語表をPandasで取得して操作してみます。
最後にその結果を使って英単語を暗記するための単語帳アプリを作ってみました。
環境
pandasとlxmlを使用しました。どちらもpipでインストール可能です。(lxmlは直接使用しませんがないとread_htmlを実行したときエラーが出ます)
データの取得
import pandas as pd url = 'https://touch-sp.hatenablog.com/entry/2021/03/07/234555' dfs = pd.read_html(url, encoding='utf-8') df = dfs[0]
これだけでデータが取得できます。
read_htmlはサイト上にあるテーブルデータをあるだけ取得してリストで返してくれます。
この記事にはテーブルデータが1つしかないのでリストの長さは1です。
最終行でリストからデータフレームを取得してます。
完全重複の除去
「council」という単語をわざと重複して含めています。次の1行で重複を除去できます。
df = df.drop_duplicates()
辞書型に変換
「conversation」という単語は「会話」と「談話」という日本語訳で別々の行に書かれています。この単語の扱いをどうすればよいか?
この先取得したデータをどのように使用するかにもよりますが今回はpandasデータフレームをPythonの辞書型に変換することにします。一つの英単語に日本語訳をリストで登録すれば問題は解決します。
words_list = list(df['英単語'].unique()) words_dict = {} for word in words_list: words_dict[word] = list(df[df['英単語']==word]['意味'])
保存
毎回Webページにアクセスするのは非現実的なのでpickleで保存しました。import pickle with open('words_dict.pkl', 'wb') as f: pickle.dump(words_dict, f)
英単語暗記のためのアプリ
非常にシンプルなアプリを即席で作りました。ここからはpyqt5のインストールも必要です。import pickle import random import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import * from PyQt5.QtGui import QFont with open('words_dict.pkl', 'rb') as f: words_dict = pickle.load(f) dict_keys = words_dict.keys() class Window(QWidget): def __init__(self): super().__init__() self.initUI() self.question = '' self.new_question = True def initUI(self): self.label_q = QLabel() self.label_q.setAlignment(Qt.AlignCenter) self.label_q.setFont(QFont("Times", 20, QFont.Bold)) self.label_a = QLabel() self.label_a.setAlignment(Qt.AlignCenter) self.label_a.setFont(QFont("Times", 20, QFont.Bold)) layout = QVBoxLayout() layout.addWidget(self.label_q) layout.addWidget(self.label_a) self.setLayout(layout) self.show() def keyPressEvent(self, e): if e.key() == Qt.Key_Return: if self.new_question == True: self.label_a.clear() self.question = random.choice(list(dict_keys)) self.label_q.setText(self.question) self.new_question = False else: self.label_a.setText(', '.join(words_dict[self.question])) self.new_question = True app = QApplication(sys.argv) ex =Window() ex.setWindowTitle('単語帳') ex.setGeometry(100,100,400,200) sys.exit(app.exec_())
エンターキーをポンポンと連打するだけです。
英単語のテーブルはいろんな人がレベル別にして(高校3年レベル、英検2級レベルなど)公開してくれています。それらを今回のようにread_htmlでスクレイピングしても良いですし、自分でCSVファイルを作ってread_csvで読み込んでも良いと思います。
誰でも簡単に英単語暗記のためのアプリが作れます。
テーブルデータ
英単語 | 意味 |
---|---|
agenda | 議題 |
chairperson | 議長 |
handout | 配布資料 |
conference | 会議 |
council | 会議 |
council | 会議 |
conversation | 会話 |
conversation | 談話 |
majority | 大多数 |
minute(s) | 議事録 |
content | 内容 |
suggestion | 提案 |
argument | 議論 |
committee | 委員会 |
representative | 代表者 |
2021年8月10日追記
PyQt6を使う場合はこちらです。touch-sp.hatenablog.com
2022年3月29日追記
新たにスクリプトをブラッシュアップしました。touch-sp.hatenablog.com