class RMMSeg::Algorithm
An Algorithm object use the MMSEG algorithm to do segmenting.
Public Class Methods
new(text) → algorithm
click to toggle source
Create an Algorithm object to do segmenting on
text
.
static VALUE algor_create(VALUE klass, VALUE text) { Algorithm *algor = ALLOC(Algorithm); void *mem; algor->text = text; mem = malloc(sizeof(rmmseg::Algorithm)); algor->algor = new(mem) rmmseg::Algorithm(RSTRING_PTR(text), RSTRING_LEN(text)); return Data_Wrap_Struct(klass, (RUBY_DATA_FUNC)algor_mark, (RUBY_DATA_FUNC)algor_free, algor); } /* * Get next token. * * call-seq: * next_token() -> token * * Return +nil+ if no more token available. */ static VALUE algor_next_token(VALUE self) { Algorithm *algor = (Algorithm *)DATA_PTR(self); rmmseg::Token tk = algor->algor->next_token(); if (tk.length == 0) return Qnil; volatile VALUE rtk = tk_create(RSTRING_PTR(algor->text), tk); return rtk; } void Init_rmmseg() { mRMMSeg = rb_define_module("RMMSeg"); /* Manage dictionaries used by rmmseg. */ mDictionary = rb_define_module_under(mRMMSeg, "Dictionary"); rb_define_singleton_method(mDictionary, "load_chars", RUBY_METHOD_FUNC(dic_load_chars), 1); rb_define_singleton_method(mDictionary, "load_words", RUBY_METHOD_FUNC(dic_load_words), 1); rb_define_singleton_method(mDictionary, "add", RUBY_METHOD_FUNC(dic_add), 3); rb_define_singleton_method(mDictionary, "has_word?", RUBY_METHOD_FUNC(dic_has_word), 1); /* A Token hold the text and related position information. */ cToken = rb_define_class_under(mRMMSeg, "Token", rb_cObject); rb_undef_method(rb_singleton_class(cToken), "new"); rb_define_method(cToken, "text", RUBY_METHOD_FUNC(tk_text), 0); rb_define_method(cToken, "start", RUBY_METHOD_FUNC(tk_start), 0); rb_define_method(cToken, "end", RUBY_METHOD_FUNC(tk_end), 0); /* An Algorithm object use the MMSEG algorithm to do segmenting. */ cAlgorithm = rb_define_class_under(mRMMSeg, "Algorithm", rb_cObject); rb_define_singleton_method(cAlgorithm, "new", RUBY_METHOD_FUNC(algor_create), 1); rb_define_method(cAlgorithm, "next_token", RUBY_METHOD_FUNC(algor_next_token), 0); } }
Public Instance Methods
next_token() → token
click to toggle source
Get next token.
Return nil
if no more token available.
static VALUE algor_next_token(VALUE self) { Algorithm *algor = (Algorithm *)DATA_PTR(self); rmmseg::Token tk = algor->algor->next_token(); if (tk.length == 0) return Qnil; volatile VALUE rtk = tk_create(RSTRING_PTR(algor->text), tk); return rtk; } void Init_rmmseg() { mRMMSeg = rb_define_module("RMMSeg"); /* Manage dictionaries used by rmmseg. */ mDictionary = rb_define_module_under(mRMMSeg, "Dictionary"); rb_define_singleton_method(mDictionary, "load_chars", RUBY_METHOD_FUNC(dic_load_chars), 1); rb_define_singleton_method(mDictionary, "load_words", RUBY_METHOD_FUNC(dic_load_words), 1); rb_define_singleton_method(mDictionary, "add", RUBY_METHOD_FUNC(dic_add), 3); rb_define_singleton_method(mDictionary, "has_word?", RUBY_METHOD_FUNC(dic_has_word), 1); /* A Token hold the text and related position information. */ cToken = rb_define_class_under(mRMMSeg, "Token", rb_cObject); rb_undef_method(rb_singleton_class(cToken), "new"); rb_define_method(cToken, "text", RUBY_METHOD_FUNC(tk_text), 0); rb_define_method(cToken, "start", RUBY_METHOD_FUNC(tk_start), 0); rb_define_method(cToken, "end", RUBY_METHOD_FUNC(tk_end), 0); /* An Algorithm object use the MMSEG algorithm to do segmenting. */ cAlgorithm = rb_define_class_under(mRMMSeg, "Algorithm", rb_cObject); rb_define_singleton_method(cAlgorithm, "new", RUBY_METHOD_FUNC(algor_create), 1); rb_define_method(cAlgorithm, "next_token", RUBY_METHOD_FUNC(algor_next_token), 0); } }