PythonとMecabで特定の品詞の単語だけ取り出す


はじめに

「私はプログラミングが苦手です」
のような文書を、単語に分かち書きしたいことがあります。

これは、Pythonでは

  • MecabをホストOSにインストール
  • mecab-pythonをpipインストール

すればよいです。

しかし、このまま分かち書きをすると
私 は プログラミング が 苦手 ですと「は」「が」「です」といういらない品詞が入ってしまうため、それらを削除しましょう。

特定品詞

import MeCab

# 取り出したい品詞
select_conditions = ['動詞', '形容詞', '名詞']

# 分かち書きオブジェクト
tagger = MeCab.Tagger('')

# Neologdの指定版 最新語に対応する
# tagger = MeCab.Tagger('-d /usr/lib64/mecab/dic/mecab-ipadic-neologd')

# 安定するらしい
tagger.parse('')


def wakati_text(text):
    """
    文書textを分かち書きして、半角スペース区切りの単語文字列に変換する

    Parameters
    ----------
    text: str
        文書

    Returns
    -------
    text_result: str
        分かち書きされた文書

    """

    # 分けてノードごとにする
    node = tagger.parseToNode(text)
    terms = []

    while node:

        # 単語
        term = node.surface

        # 品詞
        pos = node.feature.split(',')[0]

        # もし品詞が条件と一致してたら
        if pos in select_conditions:
            terms.append(term)

        node = node.next

    # 連結おじさん
    text_result = ' '.join(terms)
    return text_result


text = "私はプログラミングが苦手です"

'''
私 プログラミング 苦手
'''
print(wakati_text(text))

文書$text$をMecabのオブジェクト$tagger$でノード(単語)ごとに分割します。
そして、各$node$の品詞を見て、それが自分の指定した品詞集合と一致するかで判定すればよいです。

参考にさせていただいたサイト

- MeCab:品詞ごとに取り出す

MeCabを使って、テキスト中に含まれる品詞をカウントしてみよう!