Mecabの使い方を知る【 Taggerクラス】

Mecabの使い方を知る【 Taggerクラス】 プログラミング

Mecabは、比較的簡単に使えるソフトウェアです。
Mecabは、ツールとして単体でも利用できます。

また、プログラムからもMecabを呼び出すことが可能です。
そのため、Mecabは多くの場所で利用されています。

そして、そのMecabの利用方法も多くサイトで紹介されています。
しかし、それらサイトをよくよく見ていくと浅いのですよね。
何が浅いかというと、Mecabの使い方がです。

それは、私のサイトを含めてです。
私自身もMecabに関しては、何個か記事を書いています。

でも、やっぱり使い方が浅いのです。
まあ、その浅い使い方でも十分にやりたいことはできています。
それは、Mecabがスゴイということの証明なのですけど。

そこで、今回はもっとMecabの使い方を知ろうと考えました。
そのことで、さらにMecabの便利な使い方を知ることができるかもしれません。
その手始めに、「Tagger」について調べました。

本記事の内容

  • MecabをPythonで使う環境を整える
  • Taggerクラスとは?

それでは、上記に沿って解説していきます。

MecabをPythonで使う環境を整える

Mecabは、基本的にはどんなOSでも動きます。
Mecabのインストールに関しては、本ブログでもまとめています。

Windowsの場合は、次の記事となります。

Linux(Ubuntu)の場合は、次の記事です。

Windowsの場合は、若干面倒です。
WindowsへのMecabのインストール自体は、簡単です。

しかし、辞書を作成するのが面倒なことになります。
もともとMecabは、Linux系のOSで動くことが前提なのでしょう。
そのことが、Windowsにおける辞書作成の手間に影響しています。

では、以降からTaggerについて見ていきます。

Taggerクラスとは?

PythonにおけるMecab利用の際、よく見るコードです。

import MeCab

mecab = MeCab.Tagger()

まず、このTaggerがクラスということを理解しましょう。
また、Taggerの意味はタグです。

「タグ付けする」という意味になるのでしょうか。
Mecab本体にタグ付け(関連付け)すると言えば、納得ですね。

Mecabの公式には、Taggerに関して次のように記載されています。

MeCab::Tagger のコンストラクタの引数は, 基本的に mecab の実行形式に与えるパラメータと同一で, それらを文字列として与えます.

Mecabの引数は、以下です。

$ mecab -h
MeCab: Yet Another Part-of-Speech and Morphological Analyzer

Copyright(C) 2001-2012 Taku Kudo
Copyright(C) 2004-2008 Nippon Telegraph and Telephone Corporation

Usage: mecab [options] files
-r, --rcfile=FILE              use FILE as resource file
-d, --dicdir=DIR               set DIR  as a system dicdir
-u, --userdic=FILE             use FILE as a user dictionary
-l, --lattice-level=INT        lattice information level (DEPRECATED)
-D, --dictionary-info          show dictionary information and exit
-O, --output-format-type=TYPE  set output format type (wakati,none,...)
-a, --all-morphs               output all morphs(default false)
-N, --nbest=INT                output N best results (default 1)
-p, --partial                  partial parsing mode (default false)
-m, --marginal                 output marginal probability (default false)
-M, --max-grouping-size=INT    maximum grouping size for unknown words (default 24)
-F, --node-format=STR          use STR as the user-defined node format
-U, --unk-format=STR           use STR as the user-defined unknown node format
-B, --bos-format=STR           use STR as the user-defined beginning-of-sentence format
-E, --eos-format=STR           use STR as the user-defined end-of-sentence format
-S, --eon-format=STR           use STR as the user-defined end-of-NBest format
-x, --unk-feature=STR          use STR as the feature for unknown word
-b, --input-buffer-size=INT    set input buffer size (default 8192)
-P, --dump-config              dump MeCab parameters
-C, --allocate-sentence        allocate new memory for input sentence
-t, --theta=FLOAT              set temparature parameter theta (default 0.75)
-c, --cost-factor=INT          set cost factor (default 700)
-o, --output=FILE              set the output file name
-v, --version                  show the version and exit.
-h, --help                     show this help and exit.

この中で「mecab の実行形式に与えるパラメータ」とは、どれのことなのでしょうか?

私がTaggerクラスの引数として使ったことがあるのは、「-d」と「-u」ぐらいです。
以下は、引数「-d」利用時のPythonコードです。

import MeCab

mecab = MeCab.Tagger('-d C:\soft\MeCab\dic\ipadic-neologd')

あと、「-Ochasen」という引数をMecabで調べている最中に見ますね。
以上より、「set」や「use」と引数の説明に書かれているモノが、「mecab の実行形式に与えるパラメータ」になる可能性が高いです。

ここでTaggerクラスのコードを確認しましょう。

class Tagger(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def parse(self, *args):
        return _MeCab.Tagger_parse(self, *args)

    def parseToNode(self, str):
        return _MeCab.Tagger_parseToNode(self, str)

    def parseNBest(self, N, str):
        return _MeCab.Tagger_parseNBest(self, N, str)

    def parseNBestInit(self, str):
        return _MeCab.Tagger_parseNBestInit(self, str)

    def nextNode(self):
        return _MeCab.Tagger_nextNode(self)

    def next(self):
        return _MeCab.Tagger_next(self)

    def formatNode(self, node):
        return _MeCab.Tagger_formatNode(self, node)

    def set_request_type(self, request_type):
        return _MeCab.Tagger_set_request_type(self, request_type)

    def request_type(self):
        return _MeCab.Tagger_request_type(self)

    def partial(self):
        return _MeCab.Tagger_partial(self)

    def set_partial(self, partial):
        return _MeCab.Tagger_set_partial(self, partial)

    def lattice_level(self):
        return _MeCab.Tagger_lattice_level(self)

    def set_lattice_level(self, level):
        return _MeCab.Tagger_set_lattice_level(self, level)

    def all_morphs(self):
        return _MeCab.Tagger_all_morphs(self)

    def set_all_morphs(self, all_morphs):
        return _MeCab.Tagger_set_all_morphs(self, all_morphs)

    def set_theta(self, theta):
        return _MeCab.Tagger_set_theta(self, theta)

    def theta(self):
        return _MeCab.Tagger_theta(self)

    def dictionary_info(self):
        return _MeCab.Tagger_dictionary_info(self)

    def what(self):
        return _MeCab.Tagger_what(self)
    __swig_destroy__ = _MeCab.delete_Tagger

    @staticmethod
    def version():
        return _MeCab.Tagger_version()

    def __init__(self, *args):
        _MeCab.Tagger_swiginit(self, _MeCab.new_Tagger(*args))

    def parseToString(self, str, length=0):
        return _MeCab.Tagger_parseToString(self, str, length)

mecabの引数説明に「show」とあるモノは、関数が用意されているようです。
例えば、dictionary_info関数やversion関数ですね。

私の調べた限り、Taggerの引数に渡せるモノ(-dとか-O)を明確に記載している情報はありませんでした。
でも、Taggerクラスのコードからある程度は推測できますね。

乗りかかった船なので、一つずつ検証していきます。
しかし、今回はこれまで。
別途、時間のあるときにやってみようと思います。

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