[Python]MeCabで誰でも簡単に分かち書きをする方法

MeCab誰でも簡単分かち書き

こんばんは、エンジニアの眠れない夜です。

日本語の自然言語処理を行うには英語と違ってまずは分かち書きが必要になります。

分かち書きってなに!?という方のために

分かち書きとは

英語なら「This is pen」 みたいに単語と単語が別れていますが、

日本語だと「これはペンです」 という風に単語がひっついているので、これだと自然言語処理ができないので「単語と単語を分けよう!」というのが分かち書きです。

ここでは分かち書きをするのに「MeCab」という形態解析ソフトを使います。

MeCabを自分のパソコンにインストールしてもいいのですが、再現性が高いのでいつもながらGoogleColaboを使います。

OS依存なし!プログラミング言語はPythonですが、Pythonを使えない人でも分かち書きができます。

MeCabで分かち書き

まずはGoogleColabを開いてMeCabのインストールを行います。

ローカル環境にインストールするい場合は!を削除してコマンドを実行すればOKです。
!apt-get -q -y install swig 
!apt-get install mecab
!apt-get install libmecab-dev
!apt-get install mecab-ipadic-utf8
!pip install mecab-python3

※2018年10月頃からGoogleColaboの仕様が変わったのか1行目の swig のインストールが必要になりました。

インストールができたので試しに形態解析をしてみます。

import sys
import MeCab
mecab = MeCab.Tagger ("-Ochasen")
text = mecab.parse ("すもももももももものうち")
print(text)
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も   助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
も   助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
の   助詞,連体化,*,*,*,*,の,ノ,ノ
うち  名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

お見事!「もももももももも」の連発で何を書いているのかよくわかりませんが、正確な品詞に分かれています!MeCabを作った人天才ですね。

MeCab.Tagger (“-Ochasen”)の -Ochasenの部分はMeCabの出力モードです。

  1. mecabrc:(引数なし)
  2. -Ochasen: (ChaSen 互換形式)
  3. -Owakati: (分かち書きのみを出力)
  4. -Oyomi: (読みのみを出力)

以上の4つのモードから選べます。 用途に合わせて使い分けましょう。

すべて「O」から始まっているのはいかにも日本語っぽくていいのですが、wakati yomi の方が親切な気がします…

そして、こちらが本来欲しかった分かち書きの部分ですね。引数は「-Owakati」を使います。

mecab = MeCab.Tagger ("-Owakati")
text = mecab.parse ("すもももももももものうち")
print(text)
すもも も もも も もも の うち 

file_name = "output.txt"
with open(file_name,"w") as f:
f.write(text)

!ls
 output.txt

output.txt が保存されていることが確認できたのでダウンロードします。

from google.colab import files
files.download(file_name)

Python分かち書き

まとめ

最後のテキストファイルをダウンロードしてくる部分はおまけみたいなものですが無事に形態解析ができました。

GoogleColaboを使った環境なら誰でも同じことを再現できるのですごく便利ですね!しかも環境設定不要!

こういう技術系の記事を読んでいる時に自分の環境でやったら謎にエラーが出て思い通りに作業が進まないということがあるのですが、GoogleColaboならその心配がないので本当にありがたいです。

今回作成したファイルはこちら(Easy_MeCab_001)にあります。形態解析をやってみたい方はぜひ使ってみてください^^

日本語の形態解析のサンプルとして青空文庫がよく使われます。ぜひこちらも合わせてご覧ください。

面倒な前処理が簡単にできる正規表現の参考にもなります。

【Python】MeCabを使って青空文庫を簡単に分かち書きする方法

4 Comments

アバター画像 sleepless-se

セガビ (@segavvy)さん
コメントありがとうございます。
お役に立てて嬉しいです(^^)
コンテナを使ってAPI化するとどこからでもMeCabを利用できるようになりますよ。
その場合、レスポンスに時間がはかかってしまいますが…(^_^;)

返信する

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください