Help us understand the problem. What is going on with this article?

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

More than 5 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 変換のコード公開
  • テストの追加
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away