はじめに
「私はプログラミングが苦手です」
のような文書を、単語に分かち書きしたいことがあります。
これは、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$の品詞を見て、それが自分の指定した品詞集合と一致するかで判定すればよいです。