2009-11-16
■[Go][golang][mecab] Go で Mecab を使ってみた
$GOROOT/misc/cgo/ にサンプルがあったので、試してみた。
Makefile は $GOROOT/misc/cgo/stdio/Makefile を流用して、
バインド部分を書いて、make するだけ。
実際に動かしてみたい場合は、検証用のソースコードを用意して、
ファイル名が main.go なら make main のように実行すると、実行ファイルができあがる。
作ってみて気づいた点は、
- 作成したライブラリは ${GOROOT}/pkg/${GOOS}_${GOARCH} に置かれる。
- cgo で生成された .cgo3.c と .cgo4.c の関数名の頭に 0xC2 が挿入される。
- パッケージ名称に、Makefile の TARG や元ファイルの file.go が影響する。
かな。
カテゴリは Go と golang のどっちにしようかな。
Mecab バインド用ソースコード
package mecab
/*
#include <mecab.h>
struct mecab_t {};
*/
import "C"
func New2(s string) *C.mecab_t {
p := C.CString(s);
m := C.mecab_new2(p);
return m;
}
func SparseToStr(m *C.mecab_t, s string) string {
p := C.CString(s);
r := C.mecab_sparse_tostr(m, p);
ret_val := C.GoString(r);
return ret_val;
}
Makefile
include $(GOROOT)/src/Make.$(GOARCH)
TARG = mecab
CGOFILES = file.go
#CGO_CFLAGS = -I
#CGO_LDFLAGS =
CGO_LDFLAGS = -lmecab
include $(GOROOT)/src/Make.pkg
%: install %.go
$(GC) $*.go
$(LD) -o $@ $*.$O
example:
@export LD_LIBRARY_PATH=/usr/local/lib; \
./main
動作検証用ソースコード
package main
import "fmt"
import "mecab"
func main() {
fmt.Printf("hello, world\n");
s := "太郎は次郎が持っている本を花子に渡した。";
m := mecab.New2("");
r := mecab.SparseToStr(m, s);
fmt.Printf("result: \n%s\n", r);
}
実行結果
$ make example result: 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー は 助詞,係助詞,*,*,*,*,は,ハ,ワ 次郎 名詞,固有名詞,人名,名,*,*,次郎,ジロウ,ジロー が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 持っ 動詞,自立,*,*,五段・タ行,連用タ接続,持つ,モッ,モッ て 助詞,接続助詞,*,*,*,*,て,テ,テ いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル 本 名詞,一般,*,*,*,*,本,ホン,ホン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 花 名詞,一般,*,*,*,*,花,ハナ,ハナ 子 名詞,接尾,一般,*,*,*,子,コ,コ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 。 記号,句点,*,*,*,*,。,。,。 EOS
トラックバック - http://d.hatena.ne.jp/gtaka555/20091116/p2
リンク元
- 187 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=2kj&q=ipod+touch+稼働時間&btnG=検索&lr=lang_ja&aq=f&oq=
- 87 http://d.hatena.ne.jp/onering/20080515/1210814922
- 63 http://www.google.co.jp/search?hl=ja&q=rubygems+インストール+windows&lr=&aq=2e&oq=rubygems+インストール+
- 60 http://codezine.jp/article/detail/2444
- 45 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLL_jaJP306JP306&q=rubygems+windows
- 43 http://www.swingingblue.net/mt/archives/002420.html
- 36 http://www.google.co.jp/search?hl=ja&safe=off&client=firefox-a&rls=com.ubuntu:ja:unofficial&hs=ctH&q=+cgofiles&btnG=検索&lr=&aq=f&oq=
- 35 http://googlejapan.blogspot.com/2009/07/google-chrome-os.html
- 27 http://code.google.com/p/memcached/wiki/Clients
- 27 http://www.google.co.jp/search?q=rubygems+windows&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a