Colab環境でMeCabを使う3行

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) 　Colab環境でMeCabを使いたい。手短にわかりたい。

## やること

[word2vecをColab環境で使うための5行](https://qiita.com/Ninagawa_Izumi/items/6c38160e041b6c333905)の続きです。
Colab環境でMeCabを使います。
MeCabを使えば日本語の文章を分かち書きすることができます。それを利用してword2vec用のコーパスを作ったりもできます。

## 環境

- [Colaboratory環境](https://colab.research.google.com/notebooks/intro.ipynb)
- ブラウザはChrome推奨

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

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

### ３行で実行したい場合
```Shell:Colab
! pip install mecab-python3 unidic-lite
import MeCab
print(MeCab.Tagger().parse("JKしか勝たん"))
```
出力結果
>JK	JK	JK	JK	名詞-普通名詞-一般			0
>しか	シカ	シカ	しか	助詞-副助詞
>勝た	カタ	カツ	勝つ	動詞-一般	五段-タ行	未然形-一般	1
>ん	ン	ズ	ず	助動詞	助動詞-ヌ	終止形-撥音便	
>EOS

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

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

```python:python
print(MeCab.Tagger("-Owakati").parse("ヴリトラを倒すには新型ＯＭ砲とエネルギー資源ガンマ３が必要だ。"))
```
出力結果
>ヴリトラ を 倒す に は 新型 ＯＭ 砲 と エネルギー 資源 ガンマ ３ が 必要 だ 。 

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


### 全項目出力

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


### ヨミガナの出力 1

```python:python
tagger = MeCab.Tagger()
s = tagger.parse("糠に釘")
print("".join(w.split()[1] for w in s.split("\n") if w.find("\t")>0))
```
出力結果
> ヌカニクギ

高速に出力される形態素解析結果を利用して、そこからヨミだけを抽出しています。
内包表記の部分がわかりにくいので、解説を[別の記事](https://qiita.com/Ninagawa_Izumi/items/21715a63b82fa432fe52
)にまとめました。
- [Colab環境で<b>MeCab</b>を使ってヨミガナを表示する5行](https://qiita.com/Ninagawa_Izumi/items/21715a63b82fa432fe52
)

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

```python:python
!pip install fugashi[unidic-lite]
from fugashi import Tagger
fugger = Tagger()
text = "赤巻紙青巻紙黄巻紙"
print("".join(w.feature.kana for w in fugger(text)))
```
出力結果
> アカマキガミアオマキガミキマキガミ

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

- [Colab環境で<b>fugasi</b>を使ってヨミガナを表示する5行]
(https://qiita.com/Ninagawa_Izumi/items/8f582a4f670e406ee0b9)

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行](https://qiita.com/Ninagawa_Izumi/items/6c38160e041b6c333905)
派生記事１：[Colab環境で<b>MeCab</b>を使ってヨミガナを表示する5行](https://qiita.com/Ninagawa_Izumi/items/21715a63b82fa432fe52)
派生記事2：[Colab環境で<b>fugasi</b>を使ってヨミガナを表示する5行
](https://qiita.com/Ninagawa_Izumi/items/8f582a4f670e406ee0b9)

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

- [MeCab: Yet Another Part-of-Speech and Morphological Analyzer
](https://taku910.github.io/mecab/)
- [ColaboratoryでMeCabを使えようにする。](https://qiita.com/pytry3g/items/897ae738b8fbd3ae7893)
- [【Python】形態素解析エンジン MeCabの使い方](https://hibiki-press.tech/python/mecab/5153)
- [Python3からMeCabを使う](https://nanjamonja.net/archives/752)
- [mecab ipadic-NEologd を Google Colaboratory で使う](https://qiita.com/Fulltea/items/90f6ebe6dcceaf64eaef)