【3分でできるかもしれない】品詞分解API

Python
この記事は約5分で読めます。

皆さん、いかがお過ごしでしょうか?

筆者の地域では最近は暑くもあり、夜は寒いくらいにまで冷え込む日々が続いています。

さて、早速本題ですが、先日、PythonでAPIを作成する方法を記事にしました。

今回はそれを生かし、実用的なものを作りたいと思います。

この記事の概要

評価

項目評価
易しさ2.5
所要時間の少なさ3.5
汎用性4.0

途中でエラーが発生する場合もあるため、余り易しいとは言えません(1敗)

ただ、各OSで手順が違ったりはしないため、汎用性は高めです。

学べる事

  • PythonでAPIを作る方法
  • WordPressでAPIを呼び出し、結果を表示する方法

環境

  • Ubuntu 22.04 LTS(コンテナ)
  • Python3.10.12(pipインストール済み)

本編

仮想環境

python3 -m venv env
source env/bin/activate

インストール

FastAPI

pip install fastapi uvicorn

例によってFastAPIとuvicornをインストール。

このライブラリの詳細は他の記事でご確認ください。

簡単にいうと「フレームワーク」と「サーバー」です。

MeCab

pip install mecab-python3

pip install unidic-lite

Python専用ではなく、パッケージとしてインストールしたいという方はこの記事をご覧ください。(Ubuntu向け)

テスト

適当なフォルダにmain.pyという名前でファイルを作成します。

import MeCab
from pydantic import BaseModel  # リクエストbodyを定義するために必要

app = FastAPI()

class Data(BaseModel):
    text: int


@app.post("/mecab/")
async def bunnkai(input: Data):
    return {"res": "OK", "text": input.text}
sudo uvicorn main:app --port 80 --host 0.0.0.0

0~1023番のポートを使うためには管理者権限が必要です。

また、hostを自分のIPまたは0.0.0.0にしないと外部からアクセスできません。

今回はAPIの確認用にこのChrome拡張を使用しました。

そして結果がこちら

しっかりと返却されています!

これが確認出来たら次へ行きましょう。

コード

import MeCab
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel  #  ^c  ^b  ^b  ^b  ^c^hbody ^b^>

app = FastAPI()

tagger = MeCab.Tagger()

class Data(BaseModel):
    text: str


@app.post("/mecab/")
async def bunnkai(input: Data):
    parsed = tagger.parse(input.text).replace("\t", ",")
    parsed_list = parsed.split("\n")
    parsed_list = parsed_list[:-2]

    return {"res": "OK", "text": parsed_list}

if __name__ == "__main__":
    uvicorn.run("main:app", host="0.0.0.0", port=80, log_level="info")
sudo python3 main.py

アクセスしてみると…

しっかりと分解されています!

ひと手間

いちいち起動するのは面倒なため、自動起動の設定をします。

sudo nano /etc/systemd/system/mecabapi.service
[Unit]
Description=uvicorn
After=network.target

[Service]
ExecStart=<仮想環境のパス>/bin/python <main.pyがあるパス>/main.py
WorkingDirectory=<main.pyがあるパス>

[Install]
WantedBy=multi-user.target

ファイルを作成した後、デーモンをリロードし、起動します。

sudo systemctl daemon-reload
sudo systemctl enable mecabapi.service
sudo systemctl start mecabapi.service

これで自動起動ができるようになります。

おわりに

今回は、FastAPIとMeCabを用いて品詞分解APIを作成する方法を紹介しました。

今回は品詞分解ですが、もっと他の物にも応用できるため、いろいろ試してみてください。

それでは!

参考記事

FastAPIでPOSTされたJSONのレスポンスbodyを受け取る - Qiita
はじめにFastAPIはPOSTやPUTで簡単にクエリを受け取ることができるのですが、Bodyを受け取るとき、どうやってやるんだろうと疑問に思ったので、メモとして残したいと思います。やりたい…
【Python】形態素解析エンジンMeCabをPythonでやってみた。 せっかくなのでパーソルP&T社長メッセージから単語を出現数順に抽出してみたよ。|パーソルビジネスプロセスデザイン SMKT事業部(旧パーソルプロセス&テクノロジー)
みなさん、こんにちは! 今回の記事は、ライター今田が担当します。 以前noteに、自然言語処理とは?という記事があがっていまして、今回は自然言語処理を行う過程の形態素解析の簡単な実装について記事にしました! オープンソース形態素解析エンジン...
Raspberry PiでVirtualenv環境のPythonスクリプトを自動起動するには | MONOxIT
workon コマンドで virtualenv 環境の切り替えが必要な Python スクリプトを、Raspberry Pi 起動時に自動起動したいときには、Linuxオペレーティングシステムの systemd と呼ばれる機能を使います。

コメント

タイトルとURLをコピーしました