【Python】形態素解析 MeCab を デスクトップアプリ Tkinter で動かしてみる #1

はじめに

何回か前に WPF形態素解析を使ったアプリを作ろうとしていましたが、NMeCab の情報とできることが少ないのでやめました。で、今回からは Python でアプリを作っていこうと思います。
実行環境は以下の通りです。

お品書き

今回扱う内容

  1. Tkinter
  2. デスクトップアプリ制作
  3. MeCab を使う

1. Tkinter

Python で利用できるデスクトップアプリ開発用のライブラリが TKinter です。なんか色々できるとのことですが、ここに書くには量が多いので気になる人は以下を参照してください。

http://www.cauldron.sakura.ne.jp/thinkpython/thinkpython/Tkinter.pdf

対応プラットフォームは Windows, Mac, Linux と幅広いです。
Tkinter が導入されてるかは Anaconda プロンプトから

python -m tkinter

と入力してウィンドウが表示されれば導入されています。

2. デスクトップアプリ制作

早速実装してみます。

import sys
import tkinter as tk
from tkinter import messagebox as mbox

# GUI 処理
window = tk.Tk()
window.title("簡単なアプリ")
window.geometry("400x300")

#ラベル
label = tk.Label(window, text="入力")
label.pack

#テキストボックス
textbox = tk.Entry(window)
textbox.pack()
textbox.insert(tk.END,"")

#ボタン処理
text = ""
def On_Click():
    text = textbox.get()
    mbox.showinfo("メッセージタイトル", text)

#ボタン作成
OK_Button = tk.Button(window, text="入力", command=On_Click)
OK_Button.pack()

window.mainloop()

実行してみるとこんな感じになります。

f:id:takunology:20190709125902p:plain

正直、それほど難しくないですが、C# 勢からするとちょっと違和感を覚えます。明確なクラス・メソッドがないと不安になります。でもこんなに簡単にかけるのはありがたいです。ちょっとデザインが微妙ですが...。

3. MeCab を使う

作成したコードをこのように書き換えます。

import sys
import MeCab
import tkinter as tk
from tkinter import messagebox as mbox

# GUI 処理
window = tk.Tk()
window.title("形態素解析")
window.geometry("400x300")

#ラベル
label = tk.Label(window, text="入力")
label.pack

#テキストボックス
textbox = tk.Entry(window)
textbox.pack()
textbox.insert(tk.END,"")

#ボタン処理
text = ""
def On_Click():
    gui_text = textbox.get()
    m = MeCab.Tagger("")

    text = m.parse(gui_text)

    mbox.showinfo("入力文字解析", text)

#ボタン作成
OK_Button = tk.Button(window, text="入力", command=On_Click)
OK_Button.pack()

window.mainloop()

実行結果はこんな感じです。問題なく動作しています。文字コードutf-8 にしているので文字化けする心配もないですね。

f:id:takunology:20190709131848p:plain

MeCab.Tagger() で MeCab を使う準備?をしています。多分インスタンス化?
m.parse(文字列) で文字列を解析した結果を返します。これはメソッド扱いして良さそうです。

おわりに

Pythonって結構簡単に実装できるのが良いですね。ただ、細かい調整する必要があると思うので、次回はインターフェースまわりをいじってみたいと思います。

ん? C# を裏切ることはありませんよ。Python は友達で C# は恋b (殴