YAS's VB.NET Tips
 
VB.NET Tips
VB.NET Tips >> 記事詳細

2018/06/28

日本語形態素分析エンジンMeCabをVBより利用する

| by:YAS
 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 StringAs IntPtr
    
End Function

    <DllImport(
"libmecab.dll", CallingConvention:=CallingConvention.Cdecl)>
    
Public Shared Function mecab_sparse_tostr(ByVal m As IntPtr, ByVal str As StringAs 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 StringAs 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
20:33 | コメント(0)
メニュー