MeCab0.996にはCより利用可能なdllがバイナリで付属しています。これをDllImportで宣言し,VBから利用します。
以下のサンプルは文字列をMeCabで形態素分析し,結果をTextBoxに表示します。なお,サンプルを実行するには,Mecab0.996をあらかじめデフォルトのフォルダにインストールし,libmecab.dllをバイナリと同じフォルダにコピーしておく必要であります。 IFELanguageのGetJMorphResultよりも利用が簡単で,私が考えたコードで安定して動作しています。
下のコードをフォームのコードにコピー・貼り付けをすれば動作します。
Imports System.Runtime.InteropServices
Public Class Form1
Dim TextBox1 As New TextBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.TextBox1.Multiline = True
Me.TextBox1.ScrollBars = ScrollBars.Vertical
Me.TextBox1.Dock = DockStyle.Fill
Me.Controls.Add(Me.TextBox1)
Using Mecab1 As New MeCab
Me.TextBox1.Text = Mecab1.Parse("和布蕪を使って日本語文字列を形態素分析する。").Replace(vbLf, vbCrLf)
End Using
End Sub
End Class
Class MeCab
Implements IDisposable
<DllImport("libmecab.dll", CallingConvention:=CallingConvention.Cdecl)>
Public Shared Function mecab_new2(ByVal arg As String) As IntPtr
End Function
<DllImport("libmecab.dll", CallingConvention:=CallingConvention.Cdecl)>
Public Shared Function mecab_sparse_tostr(ByVal m As IntPtr, ByVal str As String) As IntPtr
End Function
<DllImport("libmecab.dll", CallingConvention:=CallingConvention.Cdecl)>
Public Shared Sub mecab_destroy(ByVal m As IntPtr)
End Sub
Private ptrMeCab As IntPtr
Sub New()
Me.New(String.Empty)
End Sub
Sub New(ByVal Arg As String)
ptrMeCab = mecab_new2(Arg)
End Sub
Public Function Parse(ByVal [String] As String) As String
Dim ptrResult As IntPtr = mecab_sparse_tostr(ptrMeCab, [String])
Dim strResult As String = Marshal.PtrToStringAnsi(ptrResult)
Return strResult
End Function
Public Overloads Sub Dispose() Implements IDisposable.Dispose
mecab_destroy(ptrMeCab)
GC.SuppressFinalize(Me)
End Sub
Protected Overrides Sub Finalize()
Dispose()
End Sub
End Class
※このTipsは2005年頃にNiftyの@homepageで公開していたもの一部変更して再掲載しました。
http://homepage1.nifty.com/yasunari/VB/VB2005/MeCab.htm