LoginSignup
1
3

More than 5 years have passed since last update.

日本語文章のクレンジング処理

Posted at

概要

日本語文章を形態素解析にかける時、文章内にあるスペースや句読点、HTMLタグ等が解析の邪魔をする。
そのため、クレンジング処理をかけて、形態素解析に必要な情報だけ残す。

実行環境

OS: Windows 7
言語: Java

目次

1.HTMLタグ消し
2.全角半角の統一
3.記号の削除

1.HTMLタグ消し

<td><tr>

HTMLのタグが残っていると、中身の「td」「tr」等が単語として認識される場合があるため、削除する。
削除後の文章をくっつけてしまうと、変な単語ができる可能性があるため、単語の切れ目の記号(ここでは「/」)をつける。

sample
Pattern.compile("<.*?>").matcher(sentence).replaceAll("/");

例:<tr><td>第1巻</td><td>物体の運動について</td>;
⇒//第1巻//物体の運動について/

2.全角半角の統一

AabB12345アイウエオカキクケコ

アルファベットの全角半角、数字の全角半角、カタカナの全角半角が混在する文章は、データとしても見た目としても良くないため、どちらかに統一させる。

sample
Normalizer.normalize(sentence, Normalizer.Form.NFKC);

java6から使えるNormalizerが便利
上記の処理で、
・全角アルファベット⇒半角アルファベット
・全角数字⇒半角数字
・半角カタカナ⇒全角カタカナ
へ変換できる。(記号も全角から半角へ変換される)

例:AabB12345アイカキ
⇒AabB12345アイカキ

3.記号、スペースの削除

今日 何を すればいいのか。。

文章にスペースが残っていると形態素解析時に単語の切れ目として認識しない。
「。」など頻繁に表れる記号は形態素解析時にノイズになりやすい。
タグの処理と同様に削除後の文章をくっつけてしまうと、変な単語ができる可能性があるため、単語の切れ目の記号をつける。

sample
Pattern.compile("[\\p{Punct}!”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・  ]+").matcher(sentence).replaceAll("/");

例:今日 何を すればいいのか。。
⇒今日/何を/すればいいのか/

※ \\p{Punct}は句読文字: !"#$%&'()*+,-./:;<=>?@[]^_`{|}~のいずれかを示す。
※ 記号は闇が深く、この処理方法では一般的に文章内に現れる記号のみ対応している。

参考資料:https://www.slideshare.net/tsudaa/ss-36658329
http://qiita.com/kasei-san/items/3ce2249f0a1c1af1cbd2

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