Windows10にJUMAN++をインストールし、Golangから実行結果を受け取る方法

2021-05-07

Windows10にJUMAN++をインストールし、Golangから実行結果を受け取る方法

何を目指しているか

Twitterの呟きビックデータを取得し、感情コーパスに当てはめ感情の起伏を時系列に見ようと考えてます。

STEP1:Twitterの呟きデータをダウンロード STEP2:ダウンロードした呟きデータをプログラムから読み込み STEP3:呟きデータに対して形態素解析にかけて字句毎に分割する STEP4:字句毎の感情コーパスに当てはめ感情推定を実施します。

今回は、STEP3について書いていきます。 STEP3といっても今回は呟きデータではなく、適当なテストデータで試す所までです。 まぁ進めていきましょう。

形態素解析JUMAN++をビルドする

形態素解析を行うのであれば、NAISTのmecabが有名ですが、 京都大学のJUMAN++というのが精度が良いとのことでこちらを選びました。

日本語形態素解析システム JUMAN++

Windows向けのバイナリファイルが有ればよいのですがアップロードされていないので自前でビルドする必要があります。 その手順を記載していきます。

githubからソースコードを持ってくる

github jumanpp

git clone https://github.com/ku-nlp/jumanpp.git

cmakeをインストールする

chocolateが入っているならそちらからインストールすれば良いです。

choco install make

上のコマンドで上手く行かない場合は、インストーラからダウンロードします。 CMake

Visual Studio 2019をインストールする

https://visualstudio.microsoft.com/ja/downloads/

Cmakeとビルドの実行について

CMakeでVisula Studio向けのビルドファイル一式を作成します。

cmake -G "Visual Studio 16 2019" ..
MSBuild jumanpp.sln

MSBuildが上手く動かない場合は、jumanpp.slnをダブルクリックで開きVisual StudioからSolutionのビルドを進めます。

ビルド結果を確認する

ビルドが成功すると、jumanapp_v2.exeというファイル名で実行体ができているはずです。

.\jumanpp-master\build-jumanapp\src\jumandic\Release

動作確認を行う

ビルドしたjumanpp_v2.exeが置いてあるフォルダにパスを通します。 ファイル名もjumanapp_v2.exeからjumanpp.exeに変更するとよいです。

chcp 65001
echo 魅力がたっぷりと詰まっている|jumanpp.exe --model=C:\UserCMD\jumandic.jppmdl

このような結果が得られたらOKです。

GolangからJUMANを呼び出す方法

バインディングされたものが用意されているので大人しくPythonを使えば良いのですが、 面白みに欠けるのでGolangから使えるように試してみましょう。

pyknp: Python Module for JUMAN++/KNP pyknpというバインディングされているファイルの中身を見てみると jumanappをPythonから呼び出しているだけなので、golangからも同様に呼び出せば良さそうです。

main.go全文

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmdstr := "echo 魅力がたっぷり詰まっている |jumanpp.exe --model=jumandic.jppmdl"
    stdout, err := exec.Command("sh", "-c", cmdstr).Output()
    if err != nil {
        fmt.Println(err)
    }

    fmt.Printf("ls result: \n%s", string(stdout))
}

やっていることはexec.Commandを使ってGolangから外部実行ファイルを動かしています。

golangを使用しWindows10を使う場合どうもパイプ使った実行が上手く行かず… sh -c で実行すれば動くので苦肉の策ではありますが、Bash on Windows(Windows Subsystem for Linux)を使用しました。

実行結果はexeファイルで得られたものと同じはずです。

まとめ

なんとも歯切れが悪いですが、とりあえず動くことが確認できたので続けていきましょう。 目的を果たせれば良いのでまずはこの環境で進めます。