Instance *SequenceReader::GetNext() { // Fill all fields for the entire sentence. vector<vector<string> > sentence_fields; string line; if (is_.is_open()) { while (!is_.eof()) { getline(is_, line); if (line.length() <= 0) break; vector<string> fields; StringSplit(line, "\t", &fields); sentence_fields.push_back(fields); } } // Sentence length. int length = sentence_fields.size(); // Convert to array of words and tags. vector<string> forms(length); vector<string> tags(length); for(int i = 0; i < length; ++i) { const vector<string> &info = sentence_fields[i]; forms[i] = info[0]; tags[i] = info[1]; } SequenceInstance *instance = NULL; if (length > 0) { instance = new SequenceInstance; instance->Initialize(forms, tags); } return static_cast<Instance*>(instance); }