|
package mecab |
|
|
|
import "fmt" |
|
|
|
/* |
|
#cgo CFLAGS: -I/usr/local/Cellar/mecab/0.996/include |
|
#cgo LDFLAGS: -L/usr/local/Cellar/mecab/0.996/lib -lmecab -lstdc++ |
|
#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 |
|
} |
|
|
|
/* |
|
http://mecab.googlecode.com/svn/trunk/mecab/doc/libmecab.html |
|
// Gets tagged result in string. |
|
result = mecab_sparse_tostr(mecab, input); |
|
CHECK(result) |
|
printf ("INPUT: %s\n", input); |
|
printf ("RESULT:\n%s", result); |
|
*/ |
|
|
|
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 |
|
} |
|
|
|
/* |
|
http://mecab.googlecode.com/svn/trunk/mecab/doc/libmecab.html |
|
// Gets N best results |
|
result = mecab_nbest_sparse_tostr (mecab, 3, input); |
|
CHECK(result); |
|
fprintf (stdout, "NBEST:\n%s", result); |
|
*/ |
|
|
|
func NBestSparseToStr(m *C.mecab_t, num int, input string) string { |
|
p := C.CString(input) |
|
c_num := C.size_t(num) |
|
r := C.mecab_nbest_sparse_tostr(m, c_num, p) |
|
|
|
ret_val := C.GoString(r) |
|
|
|
return ret_val |
|
} |
|
|
|
/* |
|
http://mecab.googlecode.com/svn/trunk/mecab/doc/libmecab.html |
|
node = mecab_sparse_tonode(mecab, input); |
|
CHECK(node); |
|
for (; node; node = node->next) { |
|
if (node->stat == MECAB_NOR_NODE || node->stat == MECAB_UNK_NODE) { |
|
fwrite (node->surface, sizeof(char), node->length, stdout); |
|
printf("\t%s\n", node->feature); |
|
} |
|
} |
|
*/ |
|
|
|
func SparseToNode(m *C.mecab_t, input string) *C.mecab_node_t { |
|
p := C.CString(input) |
|
node := C.mecab_sparse_tonode(m, p) |
|
return node |
|
} |
|
|
|
/* |
|
http://www.mwsoft.jp/programming/nlp/mecab_cpp.html |
|
for (; node; node = node->next) { |
|
std::cout << "==========" << std::endl; |
|
std::cout << "id : " << node->id << std::endl; |
|
std::cout << "surface : " << node->surface << std::endl; |
|
std::cout << "feature : " << node->feature << std::endl; |
|
std::cout << "length : " << node->length << std::endl; |
|
std::cout << "rlength : " << node->rlength << std::endl; |
|
std::cout << "rcAttr : " << node->rcAttr << std::endl; |
|
std::cout << "lcAttr : " << node->lcAttr << std::endl; |
|
std::cout << "posid : " << node->posid << std::endl; |
|
std::cout << "char_type : " << (int)node->char_type << std::endl; |
|
std::cout << "stat : " << (int)node->stat << std::endl; |
|
std::cout << "isbest : " << (int)node->isbest << std::endl; |
|
std::cout << "alpha : " << node->alpha << std::endl; |
|
std::cout << "beta : " << node->beta << std::endl; |
|
std::cout << "prob : " << node->prob << std::endl; |
|
std::cout << "wcost : " << node->wcost << std::endl; |
|
std::cout << "cost : " << node->cost << std::endl; |
|
} |
|
|
|
========== |
|
id : 0 |
|
surface : 昼寝する |
|
feature : BOS/EOS,*,*,*,*,*,*,*,* |
|
length : 0 |
|
rlength : 0 |
|
rcAttr : 0 |
|
lcAttr : 0 |
|
posid : 0 |
|
char_type : 0 |
|
stat : 2 |
|
isbest : 1 |
|
alpha : 0 |
|
beta : 0 |
|
prob : 0 |
|
wcost : 0 |
|
cost : 0 |
|
*/ |
|
|
|
func DumpNode(n *C.mecab_node_t) { |
|
fmt.Printf("id: %d\n", int(n.id)) |
|
fmt.Printf("surface: %s\n", C.GoString(n.surface)) |
|
fmt.Printf("feature: %s\n", C.GoString(n.feature)) |
|
fmt.Printf("length: %d\n", int(n.length)) |
|
fmt.Printf("rlength: %d\n", int(n.rlength)) |
|
fmt.Printf("rcAttr: %d\n", int(n.rcAttr)) |
|
fmt.Printf("lcAttr: %d\n", int(n.lcAttr)) |
|
fmt.Printf("posid: %d\n", int(n.posid)) |
|
fmt.Printf("char_type: %d\n", int(n.char_type)) |
|
fmt.Printf("stat: %d\n", int(n.stat)) |
|
fmt.Printf("isbest: %d\n", int(n.isbest)) |
|
fmt.Printf("alpha: %d\n", int(n.alpha)) |
|
fmt.Printf("beta: %d\n", int(n.beta)) |
|
fmt.Printf("wcost: %d\n", int(n.wcost)) |
|
fmt.Printf("cost: %d\n", int(n.cost)) |
|
} |