void FeatureFunction::ParseLine(const std::string &line) { vector<string> toks = Tokenize(line); UTIL_THROW_IF2(toks.empty(), "Empty line"); string nameStub = toks[0]; set<string> keys; for (size_t i = 1; i < toks.size(); ++i) { vector<string> args = TokenizeFirstOnly(toks[i], "="); UTIL_THROW_IF2(args.size() != 2, "Incorrect format for feature function arg: " << toks[i]); pair<set<string>::iterator,bool> ret = keys.insert(args[0]); UTIL_THROW_IF2(!ret.second, "Duplicate key in line " << line); if (args[0] == "num-features") { m_numScoreComponents = Scan<size_t>(args[1]); m_numTuneableComponents = m_numScoreComponents; } else if (args[0] == "name") { m_description = args[1]; } else { m_args.push_back(args); } } // name if (m_description == "") { size_t index = description_counts.count(nameStub); ostringstream dstream; dstream << nameStub; dstream << index; description_counts.insert(nameStub); m_description = dstream.str(); } }
void TargetPhrase::SetProperties(const StringPiece &str) { if (str.size() == 0) { return; } vector<string> toks; TokenizeMultiCharSeparator(toks, str.as_string(), "{{"); for (size_t i = 0; i < toks.size(); ++i) { string &tok = toks[i]; if (tok.empty()) { continue; } size_t endPos = tok.rfind("}"); tok = tok.substr(0, endPos - 1); vector<string> keyValue = TokenizeFirstOnly(tok, " "); UTIL_THROW_IF2(keyValue.size() != 2, "Incorrect format of property: " << str); SetProperty(keyValue[0], keyValue[1]); } }