前回は最低限の設定をしたので今回はMeCabを使えるように設定していく。
MeCab
MeCabとは形態素解析(テキストから単語を切り出して、単語の役割を解析する技術)をするためのツールです。テキストを分析や処理を行うにはまずテキストを単語に分割します。日本語のような分かち書き(単語の区切りに空白がある書き方)がされていない言語は何らかの方法により分かち書きする必要があります。そこで使われるのが形態素解析です。
例えば、”今日はいい天気ですね。”というテキストをMeCabを使って形態素解析してみると以下のような結果になります。形態素解析後が分かち書きしたものになります。
形態素解析前ー> 今日はいい天気ですね。
形態素解析後ー> 今日 は いい 天気 です ね 。
インストール
MeCabのインストールはターミナルを開いて、以下の3つでコマンドラインとpythonを使ったプログラムから使えるようになります。
インストール方法はこちらにまとめました。
https://www.pytry3g.com/entry/2018/04/24/143934#Ubuntu
コマンドライン
ターミナルを開いて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
今日 は いい 天気 です ね 。 めっちゃ 走っ た のに 、 電車 に 間に合わ なかっ た 。
このようなファイルが作られる。
プログラム
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 """結果 今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー 天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ """