期待する結果を得るためにはMeCabで処理をする前に大文字小文字の統一、全角半角の統一が必要になります。私の場合は「英数字は半角小文字」「カタカナは全角」で統一することにしました。
ある程度入力データが小さく、全角または半角どちらか一方にのみ統一する場合はExcelのJISまたはASC関数を使うことができるのでプログラムが面倒な場合はこちらを利用すると楽だと思います。(私も最初はそうしていました)
ではC#で実際にプログラムすると・・・結構大変なようです。そこでVB.NETのStrConvを使う事にしました。ソリューションにVB.NETのクラスライブラリプロジェクトを追加してC#からStrConvを呼び出すようにします。
さて、実際にクラスライブラリを作成しようと思ったのですが、この手の話は良く聞きますしすでに誰かが作成している可能性が高いので、ネットで探してみました。するとズバリなブログが(^-^)。ブログ作者の方ありがとうございます。
VB.NETで全角英数字のみを半角にする
http://www.tech-do.com/blog/archives/64
これで仮に入力が
Office 2010のメニューのカタカナが半角のようで全角な件について。
(実際どっちなんでしょう・・・「フォルダー」の濁点を見る限り全角ですよね?)
は
office 2010のメニューのカタカナが半角のようで全角な件について。
と変換されてMeCabに渡すことができます。
-----C#側
strLine = CStrConv.StrConvAlpha(strLine);strLine = strLine.ToLower();
-----VB.NET側
Imports System.Text.RegularExpressionsPublic Class CStrConv Public Shared Function StrConvAlpha(ByVal strInput As String) As String Dim strLine As String Dim regexString As String regexString = "[ア-ンァィゥェォャュョッ。「」、・ヲー゙゚]+" strLine = StrConv(strInput, VbStrConv.Narrow) Dim rKana As Regex Dim mev As MatchEvaluator rKana = New Regex(regexString, RegexOptions.Singleline) mev = New MatchEvaluator(AddressOf ToWide) StrConvAlpha = rKana.Replace(strLine, mev) End Function Private Shared Function ToWide(ByVal m As Match) As String ToWide = StrConv(m.ToString, VbStrConv.Wide) End FunctionEnd Class