概要
日本語文章を形態素解析にかける時、文章内にあるスペースや句読点、HTMLタグ等が解析の邪魔をする。
そのため、クレンジング処理をかけて、形態素解析に必要な情報だけ残す。
実行環境
OS: Windows 7
言語: Java
目次
1.HTMLタグ消し
2.全角半角の統一
3.記号の削除
1.HTMLタグ消し
<td><tr>
HTMLのタグが残っていると、中身の「td」「tr」等が単語として認識される場合があるため、削除する。
削除後の文章をくっつけてしまうと、変な単語ができる可能性があるため、単語の切れ目の記号(ここでは「/」)をつける。
Pattern.compile("<.*?>").matcher(sentence).replaceAll("/");
例:<tr><td>第1巻</td><td>物体の運動について</td>;
⇒//第1巻//物体の運動について/
2.全角半角の統一
AabB12345アイウエオカキクケコ
アルファベットの全角半角、数字の全角半角、カタカナの全角半角が混在する文章は、データとしても見た目としても良くないため、どちらかに統一させる。
Normalizer.normalize(sentence, Normalizer.Form.NFKC);
java6から使えるNormalizerが便利
上記の処理で、
・全角アルファベット⇒半角アルファベット
・全角数字⇒半角数字
・半角カタカナ⇒全角カタカナ
へ変換できる。(記号も全角から半角へ変換される)
例:AabB12345アイカキ
⇒AabB12345アイカキ
3.記号、スペースの削除
今日 何を すればいいのか。。
文章にスペースが残っていると形態素解析時に単語の切れ目として認識しない。
「。」など頻繁に表れる記号は形態素解析時にノイズになりやすい。
タグの処理と同様に削除後の文章をくっつけてしまうと、変な単語ができる可能性があるため、単語の切れ目の記号をつける。
Pattern.compile("[\\p{Punct}!”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・ ]+").matcher(sentence).replaceAll("/");
例:今日 何を すればいいのか。。
⇒今日/何を/すればいいのか/
※ \\p{Punct}は句読文字: !"#$%&'()*+,-./:;<=>?@[]^_`{|}~のいずれかを示す。
※ 記号は闇が深く、この処理方法では一般的に文章内に現れる記号のみ対応している。
参考資料:https://www.slideshare.net/tsudaa/ss-36658329
http://qiita.com/kasei-san/items/3ce2249f0a1c1af1cbd2