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