NMecabを用いてVBAやWSHで形態素解析を行なう
概要

b0232065_21104163.png
.NET Frameworkで作成されたクラスライブラリのNMecabを、ActiveXを経由してVBAやWSHなどから形態素解析を行なうことを目的とします。

NMecabは下記のページで開発されています。
https://sourceforge.jp/projects/nmecab/


ダウンロード

ExcelNMeCabCom.zip


使用方法

このプログラムは.NETFramework2.0の32ビットプロセスで動作します。

もし、64ビットのプロセスで使用したい場合は、NMeCabCom.dllとLibNMeCab.dllを64ビットでビルドしなおしてください。

インストールを行なうにはNMeCabCom\binにあるsetup.batを管理者権限で実行してください。

これにより、参照設定にNMeCabComが表示されるのでチェックをいれてください。
b0232065_20563390.png
その後、以下のようなコードを記述します。
    Dim t As New NmcTagger
    Dim c As NmcNodeCollection
    Dim p As New NmcParam
    p.dicdir = "C:\back\NMeCabCom\bin\ipadic"
    Call t.Create(p)
    Set c = t.Parse("私の名前はLです")
    Dim i As Long
    For i = 0 To c.Count - 1
        Debug.Print c.GetItem(i).Surface & " " & c.GetItem(i).Feature
    Next
NmcTaggerに渡すNmcParamにはシステム辞書とユーザ辞書を指定できます。
ユーザー辞書の作成については、本家のMecabのホームページを参考に作成してください。



WSHなどで、CreateObjectで遅延バインディングする場合は以下のようになります。
dim t
dim ret
dim i
dim p
dim node
set t = CreateObject("NMeCabCom.NmcTagger")
WScript.Echo TypeName(t)

set p = CreateObject("NMeCabCom.NmcParam")

p.dicdir = "./ipadic"
p.userdic = ""
t.Create(p)

set ret = t.Parse("This is a pen.")
WScript.Echo TypeName(ret)

For i = 0 To ret.Count- 1
  WScript.Echo TypeName(ret.GetItem(i))
  WScript.Echo ret.GetItem(i).Surface
Next

もし、アンインストールを行い対場合はuninstall.batを管理者権限で実行してください。

NMecabのユーザー辞書
NMecabはapp.configのUserDicに辞書のパスを指定することでユーザー辞書を指定できますが、少なくとも、当方の環境ではTokenize.Openで落ちました。

以下のような修正を行えば正常にユーザー辞書が使用できます。

修正前:
for (int i = 1; i <= param.UserDic.Length; i++) 

修正後:
for (int i = 0; i < param.UserDic.Length; i++)


[PR]
by mima_ita | 2013-11-25 21:07 | .NET
<< ニコニコ動画のコメント操作に関... C#で実装したコードをVBSか... >>



実験ですお
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ