Mecab を触っていたらいい感じに汎用的な形態素解析 API サーバーができたので GitHub に公開しました。
動機
品詞・形態素解析エンジンである Mecab と固有表現に強い辞書 mecab-ipadic-NEologd を、チャットボットを動かしているコンテナにインストールして使っていましたが、辞書のサイズが大きくて取り回しが悪いので、マイクロサービス的に分離してみることにしました。
概要
- 文章を投げると単語ごとに品詞・形態素解析をしてくれます
- コンテナで動きます
- AMD64 / ARM64 対応
- Mecab の出力結果を key: value の形式に直して返すのでわかりやすい
使ってみる
docker run します。
docker run -p "8080:8080" --rm noroch/mecab-parser
別のターミナルを開いてリクエストを投げてみます。
curl localhost:8080/parse -XPOST -H "Content-Type: application/json" \
-d '{"texts": ["私はきれいなタヌキです", "あなたはドラえもんに似ているね", "彼はおいしい草を1日3回食べます", "彼女はたまに鹿児島に行きます"]}' | jq
レスポンスはこんな感じです(最初の1単語のみ表示しています)。
{
"ok": true,
"results": [
[
{
"annotations": "代表表記:私/わたし 漢字読み:訓 カテゴリ:人",
"conjugated_form": "*",
"conjugation_type": "*",
"input": "私",
"original_form": "私",
"part_of_speech": "名詞",
"part_of_speech_subtyping": "普通名詞",
"reading": "わたし"
}
]
]
}
レスポンスのフォーマットは以下の通りです。 mecab-python3 で mecab-ipadic-NEologd を使った出力結果を key: value の形式に整形してレスポンスを返します。生の出力だとタブ区切り、カンマ区切りの文字列なのでどれがどの情報なのかわかりにくいですが、それを扱いやすくしています。
input: str
テキスト中の単語
part_of_speech: str
品詞(名詞、助詞など)
part_of_speech_subtyping: str
品詞(普通名詞、副助詞など)
conjugation_type: str
活用型
conjugated_form: str
活用形
original_form: str
原形
reading: str
読み
annotations: str
注釈(代表表記、反義、カテゴリ、ドメインなど)
今後
- 対応する辞書を増やしたい
フィードバックございましたら随時 GitHub でお待ちしています。
謝辞
Mecab および mecab-ipadic-NEologd のプロジェクトに貢献された皆様に感謝いたします。