18
13

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 5 years have passed since last update.

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

Posted at

はじめに

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

これは、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を使って、テキスト中に含まれる品詞をカウントしてみよう!

18
13
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
18
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?