Go
mecab
自然言語処理
kuromoji
形態素解析

Pure Go で辞書同梱な形態素解析器 kagome を公開してみました

More than 3 years have passed since last update.


概要

Kagome(籠目)は Pure Go な日本語形態素解析器のプロトタイプです.辞書をソースにエンコードして同梱しているので,バイナリだけで動作します.辞書データとして,MeCab-IPADICを利用しています.

関連:


ソース

https://github.com/ikawaha/kagome


インストール


インストール

% go get github.com/ikawaha/kagome/...


★辞書がソースに埋め込まれている関係でビルドに時間がかかります.

go-bindata で辞書を埋め込む方式に変更して改善されました


利用方法


コマンドとして利用する


cmd


usage

% kagome -h

usage: kagome [-f input_file] [-u userdic_file]
-f="": input file
-u="": input file


ユーザー辞書の設定

ユーザ辞書の形式は kuromoji 形式です._sampleにサンプルがあります.


ユーザー辞書を指定した実行例

% kagome -u _sample/userdic.txt

第68代横綱朝青龍
接頭詞,数接続,*,*,*,*,,ダイ,ダイ
68 名詞,,*,*,*,*,*,*,*
名詞,接尾,助数詞,*,*,*,,ダイ,ダイ
横綱 名詞,一般,*,*,*,*,横綱,ヨコヅナ,ヨコズナ
朝青龍 カスタム人名,*,*,*,*,*,*,アサショウリュウ,*
EOS


ユーザー辞書サンプル

##

## This file should use UTF-8 encoding
##
## User dictionary format:
## <text>,<token1> <token2> ... <tokenn>,<reading1> <reading2> ... <readingn>,<part-of-speech>
##

# Custom segmentation for long entries
日本経済新聞,日本 経済 新聞,ニホン ケイザイ シンブン,カスタム名詞
関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,テスト名詞

# Custom reading for former sumo wrestler Asashoryu
朝青龍,朝青龍,アサショウリュウ,カスタム人名



ライブラリとして利用


解析

tokenizer を new して解析したい文字列を入力すると,形態素列が帰ってきます.

形態素は,表記と開始位置,終了位置の情報を持ちます.それ以外の,形態素の詳細(品詞等)が必要な場合は,形態素IDでコンテンツを引いてください.


単純なサンプル

package main

import (
"fmt"

"github.com/ikawaha/kagome/tokenizer"
)

func main() {
t := tokenizer.NewTokenizer()
morphs, _ := t.Tokenize("すもももももももものうち")
for i, m := range morphs {
if m.Id == tokenizer.BOSEOS {
fmt.Printf("%3d, %v(%v, %v)\n", i, m.Surface, m.Start, m.End)
continue
}
content, _ := m.Content()
fmt.Printf("%3d, %v(%v, %v)\t%v\n", i, m.Surface, m.Start, m.End, content)
}
}
}



実行結果

% ./tokenize_sample

0, すもも(0, 3) 名詞, 一般, , , , , すもも, スモモ, スモモ
1, も(3, 4) 助詞, 係助詞, , , , , も, モ, モ
2, もも(4, 6) 名詞, 一般, , , , , もも, モモ, モモ
3, も(6, 7) 助詞, 係助詞, , , , , も, モ, モ
4, もも(7, 9) 名詞, 一般, , , , , もも, モモ, モモ
5, の(9, 10) 助詞, 連体化, , , , , の, ノ, ノ
6, うち(10, 12) 名詞, 非自立, 副詞可能, , , , うち, ウチ, ウチ
7, EOS(12, 12)


各種情報


Content 構造体

形態素の詳細情報は次のような構造体で出来ています.


  • 品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

を表しています.内容は mecab の辞書に準じます.

type Content struct {

Pos, Pos1, Pos2, Pos3,
Katuyougata, Katuyoukei, Kihonkei,
Yomi, Pronunciation string
}


マルチスレッドで動作させる場合の注意

tokenizer は内部にバッファを確保しているので,複数の goroutine で共有して動作させることが出来ません.1-goroutine, 1-tokenizerを確保してください.


License

Kagome is licensed under the Apache License v2.0 and uses the MeCab-IPADIC dictionary/statistical model. See NOTICE.txt for license details.


TODO


  • kuromoji の search モード相当機能の追加

  • mecab辞書→go code 変換のコード公開

  • テストの追加