IT

【ソースコード付き】日本語テキストマイニングを行うために必要な前処理

 

Advertisements

はじめに

日本語のテキストマイニングを粉うには、いろいろと前処理が必要となります。
日本語じゃなくても必要なのですが、特に日本語の場合、文章内で単語が分かれていないために、
単語ごとに分解する「分かち書き」が必要となります。

 

 
これは、全世界リアルタイム麺活監視システムで表示される、監視上法の1つです。
世界の麺活erたちがtwitterでつぶやいた単語を分かち書きして、単語に分解したあと、
よく使われる単語をより大きく表示させる、タグクラウド と呼ばれる可視化手法の一つです。
こうすることで、よく使用される単語や、関連する単語を浮かび上がらせることができます。

しかし、そもそも分かち書きするためには、辞書をもとに品詞分解しないといけないため、
それをそれなりの精度と速度で実行するためには、ライブラリに頼らざるを得ません。

そこで今回、ライブラリの一つであるMecabを使って、うまいこと前処理するための
なんちゃってライブラリを作りました。

 

What is this?

日本語解析ライブラリMeCabを使う際の、前処理を行うためのpython用ライブラリです。

前処理を行い、対象とする文章がどのようなものなのかを把握するために、
統計的手法を用いて、その内容を把握するのです。

例えば以下のものは、形態素解析した後、よく使用される単語ランキングを可視化したものです。
こうした可視化や文章の定量的理解も、前処理を行わなければできません。

 

 
こちらも、全世界リアルタイム麺活監視システムで監視されている情報の1つです。
twitterの本文を品詞ごとに形態素解析を行い、そのうえで、使用頻度の高い単語数を集計して、
頻度順にヒストグラムにしたものです。
これだけでも、立派なテキストマイニングといえます。

 

Why use

なぜ、うまいこと前処理する必要があるのか?

そもそも分かち書きされていないと、分析やら機械学習用のデータにならないという面もあります。
それに加えて重要なのが、データのnoize低減です。

教師データに使うようなデータであれば、その意味することが同じであれば、
同じ表現で統一させることができれば、それだけ揺らぎが減ります。
こうすることで、教師データとしての品質を向上させることができます

本ライブラリは、これを支援するためのものです。

 

Advertisements

source code

下記に示しておきます。

 
環境によっては、インデントがおかしいことがあるようなので、ここから参照してください。

 

Mecabのための日本語前処理例

上記のライブラリの使い方と一緒に、前処理として何をすべきなのかを紹介していきます。

 

Normalizing the WORDSs

Mecabを使う前に、以下のような前処理を実施することが推奨されています。

  • 半角カナ -> 全角カナ
  • 全角数字 -> 半角数字
  • 全角アルファベット -> 半角

これは一例で、ここに書いてあります

この MeCab 用のシステム辞書、Neologd の guihub に、python から使う場合の変換用のソースコードもおいてあります。
基本はパクリなのですが、これを使いやすくするために、ライブラリのように使えるようにしたものです。

 
 

Converting to basic form AND Excluding STOP WORDSs

Mecabで形態素解析を行うと同時に、必要な情報のみ残すことも重要です。
例えば以下のような例があります。

  • 助詞や助動詞、記号は、それ単体では意味をなさないので除外する
  • 動詞や形容詞、副詞は、基本形に変換する

一般的かどうかわかりませんが、具体的には以下のような処理をします。

  • 以下の品詞だけを残し、残りを除外する
    • 名詞
    • 動詞
    • 形容詞
    • 副詞
  • 上記の品詞を、基本形に変換する
    • 基本形がない場合は、そのままの形で残す
  • ストップワードを除去する

その時々の目的に従って、品詞の種類やmecabのシステム辞書などを、意図した形で残します。

この実装も、こちらのコードを基本的には拝借しました。
ただ、いくつか改善点があって、基本は以下の2点です。

  1. ライブラリ化して、他のpython codeから容易に呼べるようにした
  2. 基本形がない単語の場合、削除されていたが、これを元の単語のまま出力するようにした
     

 

How to use

 

As a single program

単体で使うときは、以下のように使います。

入力として与えられた文字列は、全角アルファベットや記号などが含まれています。
これを規格化しものが、preprosess に表示されています。
全角の文字列が、すべて半角に統一されています。

さらに、wakatiでは、形態素解析され、かつ品詞フィルタが行われています。
具体的には、”名詞”,”動詞”,”形容詞”,”副詞” のみ、表示されていますね。

 

As like Library in Python code

ライブラリとして使うときは、

こちらも、同様に処理で来ていることが確認できますね。
もっといろいろ指定できたりしますが、そこはコード読んでください。

 

Reference

  1. 解析前に行うことが望ましい文字列の正規化処理
  2. MeCabとPythonで品詞を選びつつ分かち書きをしたよ
  3. 日本語のストップワードのリスト

 

Advertisements

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

8 + two =