Google Colaboratoryで形態素解析 | MeCabとJanomeの使い方

Google Colaboratoryで形態素解析 | MeCabとJanomeの使い方

当ページのリンクには広告が含まれています。


本記事では、Gllgle Colaboratoryで形態素解析を行う方法についてまとめます。


✓目次

形態素解析とは | 形態素解析の必要性

形態素解析とは、コンピュータを利用して機械的な方法で文を形態素(言葉で意味を持つ最小の単位)に区切る技術のことを言います。

我々の身近な言語としては、日本語、英語があります。

この2つの言語は、当然ですが、使用する言葉と文法が異なります。

例えば、日本語で「これはペンです。」という文は、英語だと「This is a pen.」です。

英語は、”This”, “is”, “a”, “pen”という風に、単語と単語の間に空白が存在しますが、日本語は単語と単語の間に空白が存在しません。

このように、単語と単語の間に空白を入れる書き方を分かち書きといいます。

そして、分かち書きされていない日本語の文章を機械に理解させるためには、単語分割を行うとともに品詞を明確にする必要があるのです。

なぜなら文章は、決められた文法法則に従い単語に付与されている品詞を並べて構成されているからです。

機械に対して、単語の意味、品詞、文法を理解させなければ意味を解釈させることもできなければ、文を作成させることもできません。

形態素解析ツール

「形態素解析、難しくね?」と思われたかもしれませんが、形態素解析をするためのツールが用意されています。

日本語の主な形態素解析ツールには以下のようなものがあります。



・MeCab

・ChaSen

・JUMAN

・Janome

本記事では、上記のツールの中でも広く使われているMeCabとJanomeの使用方法を紹介します。

形態素解析の実装 | MeCab

実装環境には、Google Colaboratoryを使用します。

ローカル環境で動かしてみたい方は、以下の記事に、Jupyter Notebookの実行環境を作る方法をまとめておりますので参照してください。

まずは、python3で動作するMeCabライブラリをインストールします。

Google colaboratoryのセルに、以下を入力し実行してください。

1
!pip install mecab-python3

以下のような出力が得られたら成功です。

1
2
3
4
5
Collecting mecab-python3
Downloading https://files.pythonhosted.org/packages/c1/72/20f8f60b858556fdff6c0376b480c230e594621fff8be780603ac9c47f6a/mecab_python3-1.0.3-cp37-cp37m-manylinux1_x86_64.whl (487kB)
|████████████████████████████████| 491kB 8.6MB/s
Installing collected packages: mecab-python3
Successfully installed mecab-python3-1.0.3

次に、辞書データとしてUniDicをインストールします。

UniDicは国立国語研究所が開発している辞書です。

以下を入力し実行してください。

1
!pip install unidic

以下のような出力が得られたら成功です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Collecting unidic
Downloading https://files.pythonhosted.org/packages/86/04/c18832fd9959a78fc60eeaa9e7fb37ef31a250e8645cc2897eb1f07939ee/unidic-1.0.3.tar.gz
Requirement already satisfied: requests<3.0.0,>=2.22.0 in /usr/local/lib/python3.7/dist-packages (from unidic) (2.23.0)
Requirement already satisfied: tqdm<5.0.0,>=4.41.1 in /usr/local/lib/python3.7/dist-packages (from unidic) (4.41.1)
Requirement already satisfied: wasabi<1.0.0,>=0.6.0 in /usr/local/lib/python3.7/dist-packages (from unidic) (0.8.2)
Requirement already satisfied: plac<2.0.0,>=1.1.3 in /usr/local/lib/python3.7/dist-packages (from unidic) (1.1.3)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.22.0->unidic) (1.24.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.22.0->unidic) (2020.12.5)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.22.0->unidic) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.22.0->unidic) (3.0.4)
Building wheels for collected packages: unidic
Building wheel for unidic (setup.py) ... done
Created wheel for unidic: filename=unidic-1.0.3-cp37-none-any.whl size=5497 sha256=78ab4afc1982544644d7782dac00a36b55b71aceeb11cb7d0d692f01bd995f10
Stored in directory: /root/.cache/pip/wheels/d3/26/e2/fb76c79fd14391eb994eab021c9129c24814125298e1e5b96a
Successfully built unidic
Installing collected packages: unidic
Successfully installed unidic-1.0.3

更に、辞書データもダウンロードします。

以下のコードを実行しましょう。

1
!python -m unidic download

以下のような出力が得られたら成功です。

1
2
3
4
5
6
download url: https://cotonoha-dic.s3-ap-northeast-1.amazonaws.com/unidic.zip
Dictionary version: 2.3.0+2020-10-08
Downloading UniDic v2.3.0+2020-10-08...
unidic.zip: 100% 608M/608M [00:22<00:00, 27.3MB/s]
Finished download.
Downloaded UniDic v2.3.0+2020-10-08 to /usr/local/lib/python3.7/dist-packages/unidic/dicdir

本記事では、「私は形態素解析を学んでいます」という文章を解析します。

以下のコードで解析できます。

1
2
3
4
import MeCab
import unidic
mecab = MeCab.Tagger()
print(mecab.parse("私は形態素解析を学んでいます。"))

出力結果は以下の通りとなりました。

1
2
3
4
5
6
7
8
9
10
11
12
私	代名詞,,,,,,ワタクシ,私-代名詞,私,ワタクシ,私,ワタクシ,和,,,,,,,体,ワタクシ,ワタクシ,ワタクシ,ワタクシ,0,,,11345327978324480,41274
は 助詞,係助詞,,,,,ハ,は,は,ワ,は,ワ,和,,,,,,,係助,ハ,ハ,ハ,ハ,,動詞%F2@0,名詞%F1,形容詞%F2@-1,,8059703733133824,29321
形態 名詞,普通名詞,一般,,,,ケイタイ,形態,形態,ケータイ,形態,ケータイ,漢,,,,,,,体,ケイタイ,ケイタイ,ケイタイ,ケイタイ,0,C2,,3024215389381120,11002
素 接尾辞,名詞的,一般,,,,ソ,素,素,ソ,素,ソ,漢,,,,,,,接尾体,ソ,ソ,ソ,ソ,,C3,,5752103704338944,20926
解析 名詞,普通名詞,サ変可能,,,,カイセキ,解析,解析,カイセキ,解析,カイセキ,漢,,,,,,,体,カイセキ,カイセキ,カイセキ,カイセキ,0,C2,,1590177315299840,5785
を 助詞,格助詞,,,,,ヲ,を,を,オ,を,オ,和,,,,,,,格助,ヲ,ヲ,ヲ,ヲ,,動詞%F2@0,名詞%F1,形容詞%F2@-1,,11381878116459008,41407
学ん 動詞,一般,,,五段-バ行,連用形-撥音便,マナブ,学ぶ,学ん,マナン,学ぶ,マナブ,和,,,,,,,用,マナン,マナブ,マナン,マナブ,0,2,C2,,9878570876936837,35938
で 助詞,接続助詞,,,,,テ,て,で,デ,で,デ,和,,,,,,,接助,デ,デ,デ,デ,,動詞%F1,形容詞%F2@-1,,6837330270888448,24874
い 動詞,非自立可能,,,上一段-ア行,連用形-一般,イル,居る,い,イ,いる,イル,和,,,,,,,用,イ,イル,イ,イル,0,C4,M4@1,710568013079169,2585
ます 助動詞,,,,助動詞-マス,終止形-一般,マス,ます,ます,マス,ます,マス,和,,,,,,,助動,マス,マス,マス,マス,,動詞%F4@1,,9812325267808939,35697
。 補助記号,句点,,,,,,。,。,,。,,記号,,,,,,,補助,,,,,,,,6880571302400,25
EOS

出力された内容を確認しましょう。出力される形態素解析の結果は、左から順に以下の通りとなります。

  • 表層形(surface)(文章中で使用されている単語)
  • 品詞(part_of_speech)
  • 品詞細分類1〜3(part_of_speech)
  • 活用型(infl_type)
  • 活用形(infl_form)
  • 原形(base_form)(文章中で使用されている単語の原形)
  • 読み(reading)
  • 発音(phonetic)

MeCabを用いて分かち書きをしたい場合

分かち書きをしたい場合は、Tagger()オブジェクトの出力モードに('-Owakati')を指定すればOKです。

('-Owakati')を指定することで、品詞などを付与せず、形態素ごとに区切りの空白を入れることができます。

1
2
3
4
import MeCab
import unidic
mecab = MeCab.Tagger('-Owakati')
print(mecab.parse("私は形態素解析を学んでいます。"))

以下のように分かち書きされた文章が出力されます。

1
私 は 形態 素 解析 を 学ん で い ます 。

Tagger()オブジェクトの出力モードには、以下も指定できます。

  • -Oyomi: 読みのみを出力
  • -Ochasen: ChaSen互換形式
  • -Odump: 全ての情報を出力

実行したい処理に応じて使い分けましょう。

形態素解析の実装 | Janome

まずは、janomeをインストールしましょう。Google Colaboratoryのセルに以下を入力し実行すればOKです。

1
!pip install janome

以下のような出力が得られれば成功です。

1
2
3
4
5
Collecting janome
Downloading https://files.pythonhosted.org/packages/a8/63/98858cbead27df7536c7e300c169da0999e9704d02220dc6700b804eeff0/Janome-0.4.1-py2.py3-none-any.whl (19.7MB)
|████████████████████████████████| 19.7MB 50.0MB/s
Installing collected packages: janome
Successfully installed janome-0.4.1

早速、janomeを使って形態素解析をしてみましょう。

以下のコードでjanomeを使った形態素解析を行うことができます。

1
2
3
4
5
6
from janome.tokenizer import Tokenizer

t = Tokenizer()
tokens = t.tokenize("私は形態素解析を学んでいます。")
for token in tokens:
print(token)

以下のような実行結果が得られます。

1
2
3
4
5
6
7
8
9
10
私	名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
形態素 名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
解析 名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
学ん 動詞,自立,*,*,五段・バ行,連用タ接続,学ぶ,マナン,マナン
で 助詞,接続助詞,*,*,*,*,で,デ,デ
い 動詞,非自立,*,*,一段,連用形,いる,イ,イ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。 記号,句点,*,*,*,*,。,。,。

出力された内容は、MeCabと同様に、左から順に以下の通りとなります。

  • 表層形(surface)(文章中で使用されている単語)
  • 品詞(part_of_speech)
  • 品詞細分類1〜3(part_of_speech)
  • 活用型(infl_type)
  • 活用形(infl_form)
  • 原形(base_form)(文章中で使用されている単語の原形)
  • 読み(reading)
  • 発音(phonetic)

Janomeを用いて分かち書きをしたい場合

Janomeで分かち書きをしたい場合は、tokenize()メソッドの引数にwakati=Trueを指定すると、分かち書きのみを行います。

以下のコードを実行してみましょう。

1
2
3
4
5
6
from janome.tokenizer import Tokenizer

t = Tokenizer()
tokens = t.tokenize("私は形態素解析を学んでいます。", wakati=True)
for token in tokens:
print(token)

以下のような出力が得られると思います。

1
2
3
4
5
6
7
8
9
10


形態素
解析

学ん


ます

まとめ

本記事では、「Google Colaboratoryで形態素解析 | MeCabとJanomeの使い方」というテーマでまとめました。

本記事を参考に、自然言語処理の世界を楽しんでいただけたらと思います。

参考にさせていただいた記事など

自然言語処理のオススメ教材

  • 本格的にAIを学びたい人へ

以下の何れかに該当する方は、キカガクさんのオンラインスクールがおすすめです。まずは無料のカウンセリングに参加し、自分が目指すキャリアや身に着けたいスキルが学べるか、等確認してみてください無料カウンセリング予約はこちら

・プログラミング初学者(Pythonで機械学習を学びたい方)
・機械学習を学び、キャリアに活かしたい方
・何かAIサービスを企画、開発したい方
・技術を身に着けて転職したい方
・E資格を取得したい方

  • Aidemyのプレミアムプランもオススメ

AIを学ぶならアイデミープレミアムプラン

python学習に役立つ記事

コメント