26 using jubatus::util::lang::lexical_cast;
27 using jubatus::util::lang::shared_ptr;
31 namespace fv_converter {
35 shared_ptr<character_ngram> create_character_ngram(
40 "char_num must be positive integer: " + lexical_cast<std::string>(n)));
42 size_t m =
static_cast<size_t>(n);
43 return shared_ptr<character_ngram>(
new character_ngram(m));
46 const std::string&
get(
47 const std::map<std::string, std::string>& args,
48 const std::string& key) {
49 std::map<std::string, std::string>::const_iterator it = args.find(key);
50 if (it == args.end()) {
57 int get_int_with_default(
58 const std::map<std::string, std::string>& args,
59 const std::string& key,
61 if (args.count(key) == 0) {
64 std::string s =
get(args, key);
66 return jubatus::util::lang::lexical_cast<
int>(s);
67 }
catch (
const std::bad_cast&) {
69 converter_exception(
"is not integer: " + key +
" = " + s));
73 shared_ptr<regexp_splitter >create_regexp(
74 const std::map<std::string, std::string>& args) {
75 std::string pattern =
get(args,
"pattern");
76 int group = get_int_with_default(args,
"group", 0);
77 return shared_ptr<regexp_splitter>(
new regexp_splitter(pattern, group));
83 const std::string& name,
86 if (name ==
"ngram") {
87 return create_character_ngram(params);
88 }
else if (name ==
"regexp") {
89 return create_regexp(params);
90 }
else if (
ext_ && (p =
ext_(name, params))) {
91 return shared_ptr<string_feature>(p);
std::map< std::string, std::string > param_t
#define JUBATUS_EXCEPTION(e)
jubatus::util::lang::shared_ptr< string_feature > create(const std::string &name, const param_t ¶ms) const
int get_int_or_die(const std::map< std::string, std::string > ¶ms, const std::string &key)