MeCab と CaboCha を VB.NET から呼び出す
2014-08-09:
mecab-0.996 と cabocha-0.68 の組み合わせで再確認した。
https://github.com/dechnostick/MeCabAndCaboChaSample
参考:
http://homepage1.nifty.com/yasunari/VB/VB2005/MeCab.htm
それぞれインストール済みであること。パスが通っていること。
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
cabocha - Yet Another Japanese Dependency Structure Analyzer - Google Project Hosting
実際に利用できる関数はもっとある。
詳細はそれぞれのソースのヘッダファイルを参照。
(mecab.h, cabocha.h)
mecab-0.98.exe と cabocha-0.60.exe の組み合わせで確認済み。
これ以外のバージョンに変えると CaboCha が動かなかった。
MeCab
Imports System.Runtime.InteropServices
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
CaboCha
Imports System.Runtime.InteropServices
Class CaboCha
Implements IDisposable
<DllImport("libcabocha.dll", CallingConvention:=CallingConvention.Cdecl)>
Public Shared Function cabocha_new2(ByVal arg As String) As IntPtr
End Function
<DllImport("libcabocha.dll", CallingConvention:=CallingConvention.Cdecl)>
Public Shared Function cabocha_sparse_tostr(ByVal m As IntPtr, ByVal str As String) As IntPtr
End Function
<DllImport("libcabocha.dll", CallingConvention:=CallingConvention.Cdecl)>
Public Shared Sub cabocha_destroy(ByVal m As IntPtr)
End Sub
Private ptrCaboCha As IntPtr
Sub New()
Me.New(String.Empty)
End Sub
Sub New(ByVal arg As String)
ptrCaboCha = cabocha_new2(arg)
End Sub
Public Function Parse(ByVal [String] As String) As String
Dim ptrResult As IntPtr = cabocha_sparse_tostr(ptrCaboCha, [String])
Dim strResult As String = Marshal.PtrToStringAnsi(ptrResult)
Return strResult
End Function
Public Overloads Sub Dispose() Implements IDisposable.Dispose
cabocha_destroy(ptrCaboCha)
GC.SuppressFinalize(Me)
End Sub
Protected Overrides Sub Finalize()
Dispose()
End Sub
End Class
使い方
Public Class Class1
Public Shared Sub Main(ByVal args() As String)
Using m As New MeCab()
Dim sentence As String = "太郎はこの本を二郎を見た女性に渡した。"
Dim mecabOut As String = m.Parse(sentence)
Dim lines() As String = mecabOut.Split(ControlChars.Lf)
For Each line As String In lines
Console.WriteLine(line)
Next
End Using
Using c As New CaboCha("-f1 -I0 -O4")
Dim sentence As String = "太郎は花子が読んでいる本を次郎に渡した"
Dim cabochaOut As String = c.Parse(sentence)
Dim lines() As String = cabochaOut.Split(ControlChars.Lf)
For Each line As String In lines
Console.WriteLine(line)
Next
End Using
End Sub
End Class
出力結果
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー は 助詞,係助詞,*,*,*,*,は,ハ,ワ この 連体詞,*,*,*,*,*,この,コノ,コノ 本 名詞,一般,*,*,*,*,本,ホン,ホン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 二 名詞,数,*,*,*,*,二,ニ,ニ 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 。 記号,句点,*,*,*,*,。,。,。 EOS * 0 5D 0/1 1.228558 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー B-PERSON は 助詞,係助詞,*,*,*,*,は,ハ,ワ O * 1 2D 0/1 1.734440 花子 名詞,固有名詞,人名,名,*,*,花子,ハナコ,ハナコ B-PERSON が 助詞,格助詞,一般,*,*,*,が,ガ,ガ O * 2 3D 0/2 0.000000 読ん 動詞,自立,*,*,五段・マ行,連用タ接続,読む,ヨン,ヨン O で 助詞,接続助詞,*,*,*,*,で,デ,デ O いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル O * 3 5D 0/1 0.000000 本 名詞,一般,*,*,*,*,本,ホン,ホン O を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ O * 4 5D 1/2 0.000000 次 名詞,一般,*,*,*,*,次,ツギ,ツギ O 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー O に 助詞,格助詞,一般,*,*,*,に,ニ,ニ O * 5 -1D 0/1 0.000000 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ O た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ O EOS