LoginSignup
13
11

Colab環境でMeCabを使う3行

Last updated at Posted at 2021-04-19

SS 192.png  Colab環境でMeCabを使いたい。手短にわかりたい。

やること

word2vecをColab環境で使うための5行の続きです。
Colab環境でMeCabを使います。
MeCabを使えば日本語の文章を分かち書きすることができます。それを利用してword2vec用のコーパスを作ったりもできます。

環境

colabを少し使ったことがある前提で進めていきます。
でもpythonを知らなくても実行できる説明にします。

やり方

colabで下記を実行していきます。簡単な解説もつけます。

3行で実行したい場合

Colab
! pip install mecab-python3 unidic-lite
import MeCab
print(MeCab.Tagger().parse("JKしか勝たん"))

出力結果

JK JK JK JK 名詞-普通名詞-一般 0
しか シカ シカ しか 助詞-副助詞
勝た カタ カツ 勝つ 動詞-一般 五段-タ行 未然形-一般 1
ん ン ズ ず 助動詞 助動詞-ヌ 終止形-撥音便
EOS

たった3行で導入から形態素解析の結果出力までが完了しました。手軽です。
Tagger()の中の"-chasen"は形態素解析の結果をchasenという形式で出力するコマンドになります。
その後ろの.parse()で、解析したいテキスト内容を指定しています。

分かち書き

次に分かち書きを出力してみます。

python
print(MeCab.Tagger("-Owakati").parse("ヴリトラを倒すには新型OM砲とエネルギー資源ガンマ3が必要だ。"))

出力結果

ヴリトラ を 倒す に は 新型 OM 砲 と エネルギー 資源 ガンマ 3 が 必要 だ 。

となりました。"-Owakati"を指定するとシンプルな品詞ごとのスペース区切り文を出力します。
この方法は繰り返し処理には向いていないので注意が必要です。

全項目出力

python
text = "暖簾に腕押し"
tagger = MeCab.Tagger("-Odump")
result = tagger.parse(text)
print(result)

"-Odump"はMeCabが実施した形態素解析の結果項目すべてを一気に出力します。
ここでは MeCab.Tagger の呼び出しを1回にまとめています。MeCab.Taggerの呼び出しは計算コストが高いらしく、膨大な量の文章処理を行う際には処理時間に大きな差がでてしまうようです。
ですので本格的に使う場合には注意しましょう。

ヨミガナの出力 1

python
tagger = MeCab.Tagger()
s = tagger.parse("糠に釘")
print("".join(w.split()[1] for w in s.split("\n") if w.find("\t")>0))

出力結果

ヌカニクギ

高速に出力される形態素解析結果を利用して、そこからヨミだけを抽出しています。
内包表記の部分がわかりにくいので、解説を別の記事にまとめました。

ヨミガナの出力 2 (fugashiを使う方法)

python
!pip install fugashi[unidic-lite]
from fugashi import Tagger
fugger = Tagger()
text = "赤巻紙青巻紙黄巻紙"
print("".join(w.feature.kana for w in fugger(text)))

出力結果

アカマキガミアオマキガミキマキガミ

こちらの方法は、下記に別記事としてまとめました。

fugashiはヨミ以外にも形態素解析などにも使えます。

txtファイルをまるごと分かち書きしたい場合

ChatGPTに書いてもらいました。

!apt-get install mecab libmecab-dev mecab-ipadic-utf8
!pip install mecab-python3
from google.colab import files
uploaded = files.upload()

ここでtxtファイルをアップロードします。Colab上にファイル選択ボタンが出ます。

import MeCab
mecab = MeCab.Tagger()

# アップロードしたファイル名を指定
file_name = "your_uploaded_file.txt"

# 出力ファイル名
output_file_name = "analyzed_text.txt"

with open(file_name, 'r', encoding='utf-8') as f:
    text = f.read()

analyzed_text = mecab.parse(text)

with open(output_file_name, 'w', encoding='utf-8') as f:
    f.write(analyzed_text)

これで分かち書きが完成です。

files.download(output_file_name)

Colabから完成ファイルをダウンロードします。

このあとにやること

分かち書きができることがわかりましたが、となると機械学習で使えるようにしたくなります。
簡単なのはgensimライブラリを経由したWord2Vecの導入ですが、それを利用するにはもうひと加工必要になります。
ということで次は、青空文庫からダウンロードした文学作品のテキストを形態素解析し、Word2Vecでベクトル化し、単語の類似度を表示させてみましょう。

次回記事:[青空文庫からテキストをダウンロードしてプレーンにする]
(https://qiita.com/Ninagawa_Izumi/items/af7d704680fba63914e8)
次次回記事:[Colab環境で分散表現処理]
(https://qiita.com/Ninagawa_Izumi/items/a49085e36e6de53b3eca)

前回記事:word2vecをColab環境で使うための5行
派生記事1:Colab環境でMeCabを使ってヨミガナを表示する5行
派生記事2:Colab環境でfugasiを使ってヨミガナを表示する5行

参考URL

下記のサイトを参考にさせていただきました。
またコメント蘭で@KoichiYasuokaさん、@polm23 さんにご指摘いただいた部分を更新いたしました。数日後さらなる更新を行う予定です。
ありがとうございました。

13
11
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11