イクメンデータアナリストのブログ

コンサルのこと/Pythonのこと/Tableauのこと などを備忘録的に書いていこうと思います。

Pythonで特定の品詞を抜き出す方法【Python, 自然言語処理】

こんにちは~ぶどうです!

もともとは構造データの解析を主に生業としていたのですが、最近は自然言語処理周りの仕事をする機会が増えそう(というかそればっかりになりそう汗)なので、ちょこちょこ自分の備忘録的な意味合いも込めて書き残していきたいと思います。

始めたときに「これっ!」というコードがググっても見つからなかったのもあり、記事にしました。

いきなりコード

[input] : str

[output] : list

def getNoun(sentence):
    noun = []
    # taggerインスタンスを作成する。
    # neologdの辞書を使う場合はこっち
    tagger = MeCab.Tagger(r'-Owakati -d C:\neologd')
    # デフォルト辞書を使う場合はこれらのコメントアウトを入れ替えて
    # tagger = MeCab.Tagger(r'-Owakati')
    tagger.parse('')
    node = tagger.parseToNode(sentence)
    # ここでは'名詞'を抜き出すパターンで紹介してます。ここを'動詞','形容詞'などに変えれば特定の品詞を抜き出すことが出来ます。
    while node:
        if node.feature.split(',')[0] == '名詞':
            if node.surface != "":  
                # 不要なものを除きます。
                replace_node = re.sub(re.compile("[!-/:-@[-`{-~<>]、。" ), "", node.surface)
                if replace_node != "" and replace_node != " ":
                    noun.append(replace_node)
        node = node.next
    return noun

※上記ではNEologdを使ってます。デフォルトの辞書を使われる場合は~行目のコメントアウトと、~行目のコメントアウトを入れ替えて使ってください。

使い方

getNoun('ホリエモンチャンネルをyoutubeで見てます')

"""
['ホリエモンチャンネル', 'youtube']
"""

こんな感じ。

これをベースにして単語の頻度解析や、ワードクラウドや、なにやらと自由に色々と作っていけると思いますので、そちらも記事にしていけたらと思います。

おわりに

何か間違いなど見つけられた際はコメントで頂けますと嬉しいです。