今回はPythonで手軽にデスクトップアプリが作れる点に注目して、簡単な英和辞書を作ってみよう。最近では多くの辞書データが無料で公開されている。こうした無料データを自作プログラムから利用できれば、オリジナル辞書ツールを手軽に作成できるだろう。自作の辞書ツールを作ってみよう。
最初に英和辞書データを入手しよう
まずは、英和辞書データを入手しよう。検索してみると、英和辞書のデータは、データベース形式で扱いやすく加工してある、EJDict-handを利用する。生のテキストデータに加えて、SQLite形式でも提供されている。また、65,600語を収録している。
そもそも、この英和辞書データは、パブリックドメインの辞書データejdicをベースにしつつ、筆者がメンテナンスをしているものだ。こちらのGitHub上でメンテナンスしている。
実際のSQLite形式のデータは、こちらからダウンロード可能だ。ZIP形式のアーカイブを解凍すると、「ejdict.sqlite3」というファイルがあり、これが実際のデータベースだ。これから作るプログラムと同じフォルダにコピーしておこう。
データベースの構造を確認しよう
データベースの形式は、以下のようなものとなっている。基本的には、単語ID、英単語、日本語の意味、利用頻度といった具合だ。
CREATE TABLE items (
item_id INTEGER PRIMARY KEY, /* 単語ID */
word TEXT, /* 英単語 */
mean TEXT, /* 日本語の意味 */
level INTEGER DEFAULT 0 /* 単語の利用頻度 */
);
なお、単語の利用頻度は、頻出英単語を元に算定しているもので数値が高いほど、頻出単語であることを表している。
とは言え、実は、この英単語データを使ったSQLiteの基本的なプログラムは、本連載の31回目で紹介している。本稿では、SQLについて、それほど紹介しないので、詳細はそちらを参考にしよう。
デスクトップアプリの基本を作ろう
さて、Pythonには、標準でTkinterというデスクトップアプリ作成のためのライブラリが用意されている。Pythonにはデスクトップアプリのために、他にもいろいろなUIツールキットのライブラリがあるが、やはり標準使えるというのは大きなメリットなので、今回Tkinterを利用してデスクトップアプリを作る。
さて、デスクトップアプリを作る上で、ポイントとなるのが、画面上で何を入力して何を表示するか(出力するか)という点だ。今回作成するのは「手軽に使える英単語辞書」。そのため、(1)英単語の入力ボックスと、(2)検索を実行するボタン、(3)英単語の意味を表示する結果領域の三つの要素があれば良いだろう。それほど複雑ではないが、実際に作る前に簡単な図にしておくと分かりやすい。
なお、PythonのTkinterでは、何もレイアウト配置を指定しない場合、適当に上から順に中央揃えで要素を配置してくれるので都合が良い。
プログラムを完成させよう
それでは、今回のプログラム英和辞書ツールを完成させよう。以下のプログラムが実際のプログラムだ。
import tkinter as tk
import sqlite3
# ボタンを押したときの処理を記述 --- (*1)
def search_dic():
# テキストボックスから英単語を得る --- (*2)
word = textWord.get()
# データベースへ接続する --- (*3)
conn = sqlite3.connect("ejdict.sqlite3")
c = conn.cursor()
# SQLを実行して単語データを取り出す --- (*4)
sql = '''SELECT * FROM items WHERE word LIKE ?
ORDER BY level DESC LIMIT 10'''
rows = c.execute(sql, (word,))
result = ""
for n in rows:
result += "【{0}】{1}\n".format(n[1],n[2])
print(n)
conn.close()
# 検索結果を表示 --- (*5)
textResult.delete('1.0', 'end') #一度全部消す
textResult.insert(tk.END, result)
# ウィンドウを作成 --- (*6)
win = tk.Tk()
win.title("英和辞書")
win.geometry("500x250")
# 部品を作成 --- (*7)
labelWord = tk.Label(win, text='英単語:')
labelWord.pack()
textWord = tk.Entry(win)
textWord.insert(tk.END, 'hello')
textWord.pack()
calcButton = tk.Button(win, text='検索')
calcButton["command"] = search_dic
calcButton.pack()
textResult = tk.Text(win)
textResult.insert(tk.END, 'ここに結果が表示されます')
textResult.pack()
# ウィンドウを動かす --- (*8)
win.mainloop()
プログラムを実行するには、まず、英和辞書データの「ejdict.sqlite3」と同じフォルダに、上記のプログラムを「jisyo.py」という名前で保存しよう。そして、コマンドライン(WindowsならAnacondaプロンプト、macOSならターミナル.app)を起動して、以下のコマンドを実行しよう。
cd (フォルダのパス)
python jisyo.py
すると、以下のようにプログラムが実行される。単語を入力して「検索」ボタンをクリックすると英和辞書を検索して結果を表示する。
なお今回のプログラムでは、SQLのワイルドカードにも対応させてみた。そのため、本稿の冒頭の画像のように「apple%」と記述すると、appleから始まる単語を最大10件表示するようにしてみた。
詳しくプログラムを確認してみよう。
プログラムの(*1)では検索ボタンが追われた時の処理を記述する。ここでは、(*2)テキストボックスからユーザーが入力した英単語を取得し、(*3)データベースに接続して(*4)結果を得て、(*5)検索結果をテキストボックスに表示するという手順となっている。このように、Pythonのデータベース操作のためのコマンドは洗練されており、簡単に記述できるのが良いところだ。
そして、(*6)以降の部分では、ウィンドウを作成し、その上にラベルやテキストボックスやボタンを配置していく。ラベルを作成するのがtk.Labelで、一行テキストボックスがtk.Entry、ボタンがtkButton、複数行のテキストボックスがtk.Textだ。そして、最後に(*8)のようにメインループを回すように指示すれば、デスクトップアプリが動くようになる。
まとめ
以上、今回は、デスクトップアプリとして英和辞書ツールを作成してみた。さすがPythonと言うべきで、コメントを含めても50行以下のプログラムで辞書ツールが完成してしまった。Windowsならばバッチファイルを用意しておけば、ダブルクリックで起動できるので、ちょっとしたツールの作成に、Pythonはもってこいのプログラミング言語と言える。
また、パブリックドメインの有益なデータは、他にもいろいろ公開されているのだが、そのままの生データでは実用的ではない場合も多いだろう。そんな時には、本稿を参考にPythonの簡単なプログラムを作ってみると良いだろう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。