Skip to main content

Use MeCab with simple code.

Project description

Python package "simple-mecab"

MeCabをPythonから簡単に使えるようにした、mecabパッケージのラッパーです。

通常のMeCabよりも使える機能に制限がありますが、辞書の違いを吸収して統一されたアクセス方法で形態素情報にアクセスできます。

インストール方法

ターミナルで pip install simple-mecab を実行し、パッケージをインストールします。

要件

  • Python 3.7 以上 (mecabパッケージが対応しているバージョンのみ)
  • 形態素解析器MeCabとUTF-8辞書がインストール済みで、プログラムからアクセス可能である
  • mecabパッケージをインストールできる環境にあること
    (このパッケージをインストールする際に、pipによってmecabパッケージが自動的にインストールされます。)
    • コンピューターにインストールされたMeCabの対応bitとPythonのアーキテクチャが一致していること
      (例:MeCab 32bitとPython 32bit, MeCab 64bitとPython 64bit)
    • Pythonのバージョンがmecabパッケージの対応バージョンであること

使い方

MeCabWrapperのインスタンスを入手する

mecab = simple_mecab.MeCabWrapper(args="{MeCab Args}", dict_type="{dict_type_literal})

で入手できます。

引数argsについて

argsには、通常MeCabをコマンドラインで実行する際に指定する引数を文字列としてそのまま指定できます。ただし、以下の引数は指定することができません。

  • -Owakatimecab.wakati_gaki()関数を使用してください。
  • -F, -U, -B, -E, -S, -x といった出力フォーマットを指定する引数 → MeCabの出力を自動分類する性質上サポートできません。
    未知語の推定機能の利用可否の設定は今後追加予定です。
  • -N {N} → 今後対応予定です。

何も指定しないと、引数なし('')と同義になります。

引数dict_typeについて

dict_typeには以下の文字列のいずれかを指定してください。[ipadic以外はまだ実装されていません。]

dict_type 使用辞書
ipadic IPA辞書 or 出力形式が同様の辞書
neologd mecab-ipadic-NEologd辞書 or 出力形式が同様の辞書
unidic UniDic辞書 or 出力形式が同様の辞書

何も指定しないと'ipadic'が使用されます。

日本語の文を形態素解析する

result = mecab.parse("文")

で、"文"の形態素解析結果を入手できます。

形態素解析結果は各形態素のlist形式になっていて、それぞれの要素は形態素のMorphクラスのインスタンスです。

Morphクラスの構成

MorphクラスはPythonのdataclassとして定義されており、形態素とその属性が格納されています。

例えば変数rにある形態素のMorphクラスのインスタンスが格納されているとき、

{MeCab辞書の属性の値} = r.{Morphの属性名}

で、属性の値を知ることができます。

定義されている属性は以下のとおりです。

MeCab辞書の属性 Morphの属性名 出力例
形態素そのもの word 渋谷, 行っ
品詞 pos0 名詞, 動詞
品詞細分類1 pos1 固有名詞, 自立
品詞細分類2 pos2 地域, None
品詞細分類3 pos3 一般, None
活用型 conjugation_type None, 五段・カ行促音便
活用形 conjugation None, 連用タ接続
原型 stem_form 渋谷, 行く
発音 pronunciation シブヤ, イッ
<分類失敗時> unknown None, None

すべての属性は、存在するときはその値の文字列、存在しない場合にはNoneが格納されます。

unknownにはMeCabの出力を正しく分類できなかった際に、MeCabの出力結果が文字列としてそのまま格納されます。通常はNoneです。MeCabの辞書を正しく分類するために、dict_typeは正しく指定してください。

日本語の文を分かち書きする

このパッケージではMeCab標準の-Owakatiを用いた分かち書きを使用することができません。代わりに、

wakati_result = mecab.wakati_gaki("文")

によって文を形態素ごとに分割できます。

wakati_resultはそれぞれの形態素を要素としたlistになっています。

例外

simple_mecab.InvalidArgumentsError : このパッケージがサポートしていない引数がMeCabWrapper()argsに指定された場合に発生します。対応しない引数を削除して再度お試しください。

サンプル

以下ではサンプルとして "渋谷に行った。" という文を形態素解析・分かち書きした際のPythonコードと結果を示します。

[Python 3.10]

import simple_mecab

target_sentence = "渋谷に行った。"

mecab: simple_mecab.MeCabWrapper = simple_mecab.MeCabWrapper(
    dict_type='ipadic')

result: list[simple_mecab.Morph] = mecab.parse(target_sentence)

# 各形態素について属性を表示する
for r in result:
    print("形態素そのもの", r.word)
    print("品詞", r.pos0)
    print("品詞細分類1", r.pos1)
    print("品詞細分類2", r.pos2)
    print("品詞細分類3", r.pos3)
    print("活用型", r.conjugation_type)
    print("活用形", r.conjugation)
    print("原型", r.stem_form)
    print("発音", r.pronunciation)
    print("<分類失敗時>", r.unknown)
    print("\n")

# 文を分かち書きする
wakati_result = mecab.wakati_gaki(target_sentence)
print("文を形態素ごとに分けると以下のようになります。")
print(wakati_result)
print("文をスペース区切りの分かち書きにします。")
print(' '.join(wakati_result))

[出力]

形態素そのもの 渋谷
品詞 名詞
品詞細分類1 固有名詞
品詞細分類2 地域
品詞細分類3 一般
活用型 None
活用形 None
原型 渋谷
発音 シブヤ
<分類失敗時> None


形態素そのもの に
品詞 助詞
品詞細分類1 格助詞
品詞細分類2 一般
品詞細分類3 None
活用型 None
活用形 None
原型 に
発音 ニ
<分類失敗時> None


形態素そのもの 行っ
品詞 動詞
品詞細分類1 自立
品詞細分類2 None
品詞細分類3 None
活用型 五段・カ行促音便
活用形 連用タ接続
原型 行く
発音 イッ
<分類失敗時> None


形態素そのもの た
品詞 助動詞
品詞細分類1 None
品詞細分類2 None
品詞細分類3 None
活用型 特殊・タ
活用形 基本形
原型 た
発音 タ
<分類失敗時> None


形態素そのもの 。
品詞 記号
品詞細分類1 句点
品詞細分類2 None
品詞細分類3 None
活用型 None
活用形 None
原型 。
発音 。
<分類失敗時> None


文を形態素ごとに分けると以下のようになります。
['渋谷', 'に', '行っ', 'た', '。']
文をスペース区切りの分かち書きにします。
渋谷 に 行っ た 。

さらにサンプルコードを閲覧したい場合にはsample.ipynbを参照してください。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simple-mecab-1.0.0.tar.gz (11.7 kB view hashes)

Uploaded Source

Built Distribution

simple_mecab-1.0.0-py3-none-any.whl (8.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page