形態素解析とは:
- 形態素解析とは入力されたコーパスを「名詞」・「動詞」のように品詞レベルに分類すること
- 日本語を機械学習する際には、形態素解析が必須となります。
MeCabの導入方法:
- 日本語の形態素解析ライブラリで一番メジャーなMeCabを使用します。
- 環境:Colab
1.MeCabと辞書のインストール:
# 形態素分析ライブラリーMeCab と 辞書(mecab-ipadic-NEologd)のインストール
!apt-get -q -y install sudo file mecab libmecab-dev mecab-ipadic-utf8 git curl python-mecab > /dev/null
!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git > /dev/null
!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n > /dev/null 2>&1
!pip install mecab-python3 > /dev/null
# シンボリックリンクによるエラー回避
!ln -s /etc/mecabrc /usr/local/etc/mecabrc
2.動作確認:
import MeCab
sample_txt = "シックスワンは企画とマーケティングの専門家による、新規事業の立ち上げ支援を行います。"
path = "-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd"
m = MeCab.Tagger(path)
print("Mecab ipadic NEologd:\n",m.parse(sample_txt))
- 以下のような実行結果が表示されればOK
Mecab ipadic NEologd:
シックス 名詞,一般,*,*,*,*,シックス,シックス,シックス
ワン 名詞,一般,*,*,*,*,ワン,ワン,ワン
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
企画 名詞,サ変接続,*,*,*,*,企画,キカク,キカク
と 助詞,並立助詞,*,*,*,*,と,ト,ト
マーケティング 名詞,一般,*,*,*,*,マーケティング,マーケティング,マーケティング
の 助詞,連体化,*,*,*,*,の,ノ,ノ
専門家 名詞,固有名詞,一般,*,*,*,専門家,センモンカ,センモンカ
による 助詞,格助詞,連語,*,*,*,による,ニヨル,ニヨル
、 記号,読点,*,*,*,*,、,、,、
新規 名詞,一般,*,*,*,*,新規,シンキ,シンキ
事業 名詞,一般,*,*,*,*,事業,ジギョウ,ジギョー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
立ち 名詞,一般,*,*,*,*,立ち,タチ,タチ
上げ 名詞,一般,*,*,*,*,上げ,アゲ,アゲ
支援 名詞,サ変接続,*,*,*,*,支援,シエン,シエン
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
行い 動詞,自立,*,*,五段・ワ行促音便,連用形,行う,オコナイ,オコナイ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。 記号,句点,*,*,*,*,。,。,。
EOS
3.実際に使えるように関数化:
def split_text(text):
tagger = MeCab.Tagger()
words = []
for c in tagger.parse(text).splitlines()[:-1]:
surface, feature = c.split('\t')
pos = feature.split(',')[0]
words.append(surface)
return ' '.join(words)
3.1コードの補足:
- 4行目のfor文ですが、形態素解析した結果の最後に EOS があるので一個手前までで行う。
- surfaceに単語、featureに解析結果を代入。
- 特定の品詞のみ取り出したい場合は、上記のようにif文で制御してください。
# 単一の品詞のみ取り出したい場合
if pos == '名詞':
words.append(surface)
# 複数取り出したい場合
if pos in ['名詞', '形容詞', '動詞']: