どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

UbuntuでMeCabを使ってみる

スポンサーリンク


前回は最低限の設定をしたので今回はMeCabを使えるように設定していく。

pytry3g.hatenablog.com

 

MeCab

MeCabとは形態素解析(テキストから単語を切り出して、単語の役割を解析する技術)をするためのツールです。テキストを分析や処理を行うにはまずテキストを単語に分割します。日本語のような分かち書き(単語の区切りに空白がある書き方)がされていない言語は何らかの方法により分かち書きする必要があります。そこで使われるのが形態素解析です。

例えば、”今日はいい天気ですね。”というテキストをMeCabを使って形態素解析してみると以下のような結果になります。形態素解析後が分かち書きしたものになります。

形態素解析前ー> 今日はいい天気ですね。

形態素解析後ー> 今日 は いい 天気 です ね 。 

 

インストール

MeCabのインストールはターミナルを開いて、以下の3つでコマンドラインpythonを使ったプログラムから使えるようになります。

  1. sudo apt install aptitude
  2. sudo aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file
  3. pip install mecab-python3

 

コマンドライン

ここではコマンドラインMeCabを使ってみます。

ターミナルを開いてmecabコマンドを実行して日本語のテキストを入力すると形態素解析の結果を見ることができます。

$ mecab
今日はいい天気ですね。
今日	名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
いい	形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気	名詞,一般,*,*,*,*,天気,テンキ,テンキ
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね	助詞,終助詞,*,*,*,*,ね,ネ,ネ
。	記号,句点,*,*,*,*,。,。,。
EOS

-O wakatiオプションにより単語の切り出しのみもできる。

$ mecab -O wakati
今日はいい天気ですね。
今日 は いい 天気 です ね 。

次のコマンドを実行すると、

mecab -O wakati -o <output file> <input file>

テキストが書かれたファイルを読み込んで、分かち書きされた結果をファイルに書き込むことができる。

例えば、次のようなファイルがあった場合、

input.txt

今日はいい天気ですね。
めっちゃ走ったのに、電車に間に合わなかった。

次のように実行すると

mecab -O wakati -o output.txt input.txt

output.txt

今日 は いい 天気 です ね 。
めっちゃ 走っ た のに 、 電車 に 間に合わ なかっ た 。

このようなファイルが作られる。

プログラム

ここではpythonを使ってMeCabを使ってみます。

MeCabインスタンスを作る際にオプションを"-Owakati"とすると分かち書き、"-Ochasen"とすると単語の詳細な情報をみることができます。

分かち書き

import MeCab
text = "今日はいい天気ですね。"
tagger = MeCab.Tagger("-Owakati")
wakati = tagger.parse(text) #テキストを分解する。
print(wakati) #今日 は いい 天気 です ね 。

詳細

import MeCab
text = "今日はいい天気ですね。"
tagger = MeCab.Tagger("-Ochasen")
tagger.parse('') #これがないとエラーがでるかもしれない
tag = tagger.parseToNode(text)
while tag:
# tag.surface -> 単語
# tag.feature -> 詳細な情報 print(tag.surface, tag.feature) tag = tag.next
"""結果
BOS/EOS,*,*,*,*,*,*,*,*
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
。 記号,句点,*,*,*,*,。,。,。
BOS/EOS,*,*,*,*,*,*,*,*

"""

詳細な情報を使えばテキストから名詞のみをとりだすことができる。

while tag:
   features = tag.feature.split(',')
   if features[0] == "名詞":
       print(tag.surface, tag.feature)
   tag = tag.next
   """結果
   今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
   天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
   """