形態素解析とは、ある文章を分解し、最小単位で表現可能な品詞に分解する手法です。ここでは、pythonにより形態素解析を実施する方法を述べます。
まずは、辞書や分割形式を指定します。いろんな種類がありますが、Ochasenを指定すれば大体okです。興味があれば他のものを調べてもいいでしょう。
import MeCab
Dic = MeCab.Tagger("-Ochasen")
続いて、形態素解析を実施したい文書を入力します。Input関数は、キーボードから文字を入力する関数です。
Sentence = input()
# Sentence = "今日はいい天気です。"
その後、形態素解析を実施します。先ほど定義したDicを使用します。
node = Dic.parseToNode(Sentence)
これで形態素解析が終わりました。得られた結果を取り出してみます。Info01と02には品詞の情報を、Wordには分解された情報を格納します。
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
それでは、結果を表示してみます。
print(Info01)
print(Info02)
print(Word)
解析結果が得られました。意味がよくわからない人は日本語を勉強してください。これらはappendで積んでいますから、リストです。したがって、リスト操作をきちんと身につけていれば、いかようにも料理できますね。例えば、4番目の言葉を取り出してみます。
i = 4
print("*** " + str(i) + "番目の情報 ***")
print(Info01[i])
print(Info02[i])
print(Word[i])
あるいは、名詞だけを取り出して見ることもできます。
Noun = [] # 名詞を英語で言うと、nounとなります。
for i in range(0, len(Word)):
if Info01[i] == "名詞": # もし、i番目の品詞が名詞であれば、
Noun.append(Word[i]) # i番目のワードをNoun にappend
print("*** 名詞リスト ***")
print(Noun)
あるいは、ユーザが指定したワードのカウンティングもできますね。
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)
形態素解析はこれで終わりです。これだけですとちょっとつまらないかもしれませんが、機械学習やグラフ理論、Word2Vectorなどを組み合わせると、結構おもしろいことができるようになります。その前段階として捉えておくといいと思います。