NMeCabComを使わない方法。
こんな具合に使えるよという例示にすぎません。
準備
呪文
以下をテキストエディタで作成して、上記のxllと同じフォルダに置いておくこと。
NMeCabTest.dna
<DnaLibrary RuntimeVersion="v4.0" Name="NMeCabTest" Description="Using NMeCab" Language="CS">
<Reference Path="LibNMeCab.dll" />
<![CDATA[
using System;
using System.Text;
using NMeCab;
public class NMeCabTest
{
public static string NMeCabParseTest()
{
try
{
string sentence = "行く川のながれは絶えずして、しかも本の水にあらず。";
MeCabParam param = new MeCabParam();
param.DicDir = @"C:\Program Files\MeCab\dic\ipadic";
// NMeCab はクラス名が変更されている
MeCabTagger t = MeCabTagger.Create(param);
// 一気に結果をもらう
string result = t.Parse( sentence );
return result;
}
catch (Exception ex)
{
return ex.Message;
}
}
}
]]>
</DnaLibrary>
詠唱
ワークブックにNMeCabTest.xllをドラッグ&ドロップして、「このアドインをこのセッションに限り有効にする」を選択しておく。
セルに数式として下記を入力。
=NMeCabParseTest()
パースした結果が取得できればOK。
追記
少し遊びやすくしてみました。
ExcelDna.xllはUsingNMeCab.xllにファイル名変更。
下記をテキストファイル(UTF-8推奨)で作成。
UsingNMeCab.dna
<DnaLibrary RuntimeVersion="v4.0" Name="UsingNMeCab" Description="Using NMeCab" Language="CS">
<Reference Path="LibNMeCab.dll" />
<![CDATA[
using System;
using System.Text;
using NMeCab;
public class UsingNMeCab
{
public static string NMeCabParse(string sentence)
{
try
{
MeCabParam param = new MeCabParam();
// 辞書のパスは環境に合わせること
param.DicDir = @"C:\Program Files\MeCab\dic\ipadic";
// NMeCab はクラス名が変更されている
MeCabTagger t = MeCabTagger.Create(param);
string result = "";
MeCabNode node = t.ParseToNode(sentence);
while (node != null) {
if (node.CharType > 0) result += node.Surface + "," + node.Feature + "\n";
node = node.Next;
}
return result;
}
catch (Exception ex)
{
return ex.Message;
}
}
}
]]>
</DnaLibrary>
セルに
=NMeCabParse("行く川のながれは絶えずして、しかも本の水にあらず。")
のように数式を入れると解析結果が文字列として返ってくるので、
Sub SplitResult(s As String)
Dim i As Long, j As Long
Dim tmp1 As Variant, tmp2 As Variant
tmp1 = Split(s, Chr(10))
For i = LBound(tmp1) To UBound(tmp1)
tmp2 = Split(tmp1(i), ",")
For j = LBound(tmp2) To UBound(tmp2)
Cells(2 + i, 1 + j).Value = tmp2(j) ' 位置調整は好みで
Next j
Next i
End Sub
のようなマクロで分割表示できます。
解析結果を多元配列で返すようにすると、意外に後処理が面倒
http://qiita.com/acknpop/items/844b7e8d026fc08ccc7b
なので今回は合わせ技で。