2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

形態素解析について

Posted at

形態素解析とは:

  • 形態素解析とは入力されたコーパスを「名詞」・「動詞」のように品詞レベルに分類すること
  • 日本語を機械学習する際には、形態素解析が必須となります。

GIG_deeplearning_5-03.png

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 ['名詞', '形容詞', '動詞']:

参考記事:

2
3
0

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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?