さて、入力が掲示板のタイトルのように一行(改行がないという意味)で文自体も短い場合は今までの処理を施した後にMeCabに流せばよかったのですが、一般的な掲示板の本文は複数行で文もそこそこ長いものになります。またHTMLでは通常の改行コード(\n)ではなく<br />などが改行コード?になっています。

 

そこで掲示板本文を解析する前にいくつかの処理をする必要があります。

) 私がMSDNフォーラムを解析してどのような単語が頻出単語かを調べる場合

  1. 署名の削除
  2. 引用部を置換
  3. <br />タグの置換
  4. HTMLタグの削除
  5. URLの置換
  6. ※置換の場合はすべて半角スペースに置換し、削除はstring.Emptyに置換します。

  7. 一文ごとに分割

最後の一文ごとですが、これは「。」または「?」を終端文字列としています。

 

String[] strMeCabInputItems;

char[] delimiter = { '', '' };

strMeCabInputItems = strInput.Split(delimiter);

 

その後念のため独自のTrim処理を施します。というのもどうも一部の掲示板では改行以外の制御コードを許可している(本当は駄目でチェック漏れかもしれませんが・・・)場合やエンコードがUTF-8の場合に0xF8F0などShift-JISに変換する際に問題があるコードが含まれている場合があります。(どこかのWebは垂直タブが含まれていました・・・投稿フォームにペーストする際に含まれる可能性があるようです)

Shift-JISにこだわる必要もないかもしれませんが、私がShift-JISをなぜか好むのと、何らかのツールがUTF-8未対応の場合があると困るからです。

 

対象: \r \n \t \v 0xF8F0 0XF8F1 0XF8F2 0XF8F3

 

strInput = strInput.Replace("\n", string.Empty);

//途中省略

strInput = strInput.Replace(((char)0xF8F0).ToString(), string.Empty);

//途中省略

 

これで以下のように手動で折り返している文も一文ごとに分割できます。

 

長い文章は適度に<br />\r\n

改行している方が<br />\r\n

好きです。短い方が<br />\r\n

いいですよね?\r\n

 

→長い文章は適度に 改行している方が 好きです

→短い方が いいですよね

(わかちがきで半角スペースが含まれてます)

 

これである程度きれいになるのですが、残念ながらコードやイベントログなどを除外する方法がわからず、こちらは現時点ではあきらめています。そのため例えばC#フォーラムではsystemといった単語が頻出単語上位に現れることがあります。