1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Mecab + mecab-ipadic-NEologd な形態素解析 API サーバーを作った

Posted at

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 のプロジェクトに貢献された皆様に感謝いたします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?