Janomeを用いた形態素解析の導入&POSTの処理の実装|Flaskで作る簡易APIサーバー #3

f:id:lib-arts:20191017182256p:plain

Flaskに関する情報をまとめていきます。FlaskはHTTPアクセスが可能な簡易的なAPIを作成する、Pythonベースのフレームワークです。

Flaskへ ようこそ — Flask v0.5.1 documentation

基本的には上記などのドキュメントを元にした動作確認や、簡単に内容をカスタマイズして実行してみるなどを行なっていければと思います。
#1ではFlaskの概要と簡単な動作確認について、#2では引数・返り値やレンダリングテンプレートについて確認を行いました。

Flaskの概要と簡単な動作確認|Flaskで作る簡易APIサーバー #1 - lib-arts’s diary

引数・返り値とテンプレートによるAPIへの機能追加|Flaskで作る簡易APIサーバー #2 - lib-arts’s diary

#3ではJanomeを用いた言語処理の導入を取り扱います。
以下目次となります。
1. Janomeを用いた言語処理(形態素解析)の追加
2.まとめ

 

1. Janomeを用いた言語処理(形態素解析)の追加
1節では言語処理をAPIに導入していくにあたって、Janomeを用いた形態素解析の処理を簡単に入れ込んでいければと思います。

from janome.tokenizer import Tokenizer
t = Tokenizer()

まずは上記を前回作成したソースに書き加えます。冒頭部は下記のようになります。

f:id:lib-arts:20191104191850p:plain

これでJanomeの読み込みとインスタンスの生成を行うことができました。次にAPIの部分を実装します。

@app.route('/janome')
def janome(name=None):
    tokens = t.tokenize('分かち書きモードがつきました!', wakati=True)
    res = ""
    for token in tokens:
        res += token
        res += " "
    return res

上記はJanomeのサンプルコードをAPIに実装してみた形式になります。前回同様、APIを立ち上げてブラウザに"http://127.0.0.1:5000/janome"でアクセスすると下記のようになります。

f:id:lib-arts:20191104192759p:plain

単体での動作確認ができたところで、上記では引数を受け取っていないので、引数を受け取って次ステップとして形態素解析を行うプログラムの実装を行ってみます。

@app.route('/janome2')
def janome2(name=None):
    text = request.args.get("msg", "Not defined")
    sep = request.args.get("sep", " ")
    tokens = t.tokenize(text, wakati=True)
    res = ""
    for token in tokens:
        res += token
        res += sep
    return res

同様に、APIを立ち上げてブラウザに"http://127.0.0.1:5000/janome2"でアクセスすると下記のようになります。

f:id:lib-arts:20191104192817p:plain

確認すると、msgで与えたテキストを形態素解析を行なって結果を返していることがわかります。また、スペース区切りだと若干見にくいため、他の区切りも導入できるようにsepもパラメータとして設定を行いました。ブラウザに"http://127.0.0.1:5000/janome2?msg=Flaskに関する情報をまとめていきます。&sep=*"でアクセスすると下記のようになります。

f:id:lib-arts:20191104193129p:plain

Janomeを用いた形態素解析APIに導入することができたので、1節はここまでとします。


2. まとめ
#3ではGETを用いた処理の確認を行いました。
このままでも良いのですが、パラメータが増えるたびにURLが増えたり、セキュリティの観点などからもPOSTを併用する方が望ましいため、#4ではここまでのアプリケーションをPOSTを用いて書き直しを行います。