PyLearn NLP 01: 形態素解析

日大生産工 大前佑斗

形態素解析とは、ある文章を分解し、最小単位で表現可能な品詞に分解する手法です。ここでは、pythonにより形態素解析を実施する方法を述べます。

まずは、辞書や分割形式を指定します。いろんな種類がありますが、Ochasenを指定すれば大体okです。興味があれば他のものを調べてもいいでしょう。

In [1]:
import MeCab
Dic = MeCab.Tagger("-Ochasen")

続いて、形態素解析を実施したい文書を入力します。Input関数は、キーボードから文字を入力する関数です。

In [2]:
Sentence = input()
# Sentence = "今日はいい天気です。"
今日はいい天気です。今日はリンゴを食べたいです。

その後、形態素解析を実施します。先ほど定義したDicを使用します。

In [4]:
node = Dic.parseToNode(Sentence)

これで形態素解析が終わりました。得られた結果を取り出してみます。Info01と02には品詞の情報を、Wordには分解された情報を格納します。

In [5]:
Info01, Info02, Word = [], [], []

while node:
    Info01.append(node.feature.split(",")[0]) # 品詞情報1
    Info02.append(node.feature.split(",")[1]) # 品詞情報2
    Word.append(node.surface.split(",")[0]) # 単語
    node=node.next

それでは、結果を表示してみます。

In [6]:
print(Info01)
print(Info02)
print(Word)
['BOS/EOS', '名詞', '助詞', '形容詞', '名詞', '助動詞', '記号', '名詞', '助詞', '名詞', '助詞', '動詞', '助動詞', '助動詞', '記号', 'BOS/EOS']
['*', '副詞可能', '係助詞', '自立', '一般', '*', '句点', '副詞可能', '係助詞', '一般', '格助詞', '自立', '*', '*', '句点', '*']
['', '今日', 'は', 'いい', '天気', 'です', '。', '今日', 'は', 'リンゴ', 'を', '食べ', 'たい', 'です', '。', '']

解析結果が得られました。意味がよくわからない人は日本語を勉強してください。これらはappendで積んでいますから、リストです。したがって、リスト操作をきちんと身につけていれば、いかようにも料理できますね。例えば、4番目の言葉を取り出してみます。

In [8]:
i = 4
print("*** " + str(i) + "番目の情報 ***")
print(Info01[i])
print(Info02[i])
print(Word[i])
*** 4番目の情報 ***
名詞
一般
天気

あるいは、名詞だけを取り出して見ることもできます。

In [9]:
Noun = [] # 名詞を英語で言うと、nounとなります。

for i in range(0, len(Word)):
    if Info01[i] == "名詞": # もし、i番目の品詞が名詞であれば、
        Noun.append(Word[i]) # i番目のワードをNoun にappend

print("*** 名詞リスト ***")
print(Noun)
*** 名詞リスト ***
['今日', '天気', '今日', 'リンゴ']

あるいは、ユーザが指定したワードのカウンティングもできますね。

In [10]:
TargetWord = "今日"
Counter = 0
for i in range(0, len(Word)):
    if Word[i] == TargetWord: # もしi番目のワードが、ターゲットのものならば、
        Counter = Counter + 1 # カウンターを1追加
        
print("*** カウンティング ***")
print("TargetWord: ", TargetWord)
print("Counter: ", Counter)
*** カウンティング ***
TargetWord:  今日
Counter:  2

形態素解析はこれで終わりです。これだけですとちょっとつまらないかもしれませんが、機械学習やグラフ理論、Word2Vectorなどを組み合わせると、結構おもしろいことができるようになります。その前段階として捉えておくといいと思います。