// Incoming references (refs) are stored as refs[file_id][[sent_id][reference]] // This data structure: m_refs[sent_id][[vector<length>][ngrams]] void BleuScoreFeature::LoadReferences(const std::vector< std::vector< std::string > >& refs) { m_refs.clear(); FactorCollection& fc = FactorCollection::Instance(); for (size_t file_id = 0; file_id < refs.size(); file_id++) { for (size_t sent_id = 0; sent_id < refs[file_id].size(); sent_id++) { const string& ref = refs[file_id][sent_id]; vector<string> refTokens = Tokenize(ref); if (file_id == 0) m_refs[sent_id] = RefValue(); pair<vector<size_t>,NGrams>& ref_pair = m_refs[sent_id]; (ref_pair.first).push_back(refTokens.size()); for (size_t order = 1; order <= BleuScoreState::bleu_order; order++) { for (size_t end_idx = order; end_idx <= refTokens.size(); end_idx++) { Phrase ngram(1); for (size_t s_idx = end_idx - order; s_idx < end_idx; s_idx++) { const Factor* f = fc.AddFactor(Output, 0, refTokens[s_idx]); Word w; w.SetFactor(0, f); ngram.AddWord(w); } ref_pair.second[ngram] += 1; } } } } // cerr << "Number of ref files: " << refs.size() << endl; // for (size_t i = 0; i < m_refs.size(); ++i) { // cerr << "Sent id " << i << ", number of references: " << (m_refs[i].first).size() << endl; // } }
/// postfix -- operator a-- template<> AMI_DLLEXPORT BasicVariable::ptr Variable<double>::operator --(int) { RETURN_VARPTR(double,RefValue()--); }
/// postfix ++ operator a++ template<> AMI_DLLEXPORT BasicVariable::ptr Variable<double>::operator ++(int) { //std::cout << "**" << std::endl; RETURN_VARPTR(double,RefValue()++); }
/// prefix -- operator --a template<> AMI_DLLEXPORT BasicVariable::ptr Variable<long>::operator --() { RETURN_VARPTR(long int,--RefValue()); }
/// prefix ++ operator ++a template<> AMI_DLLEXPORT BasicVariable::ptr Variable<long>::operator ++() { //std::cout << "**" << std::endl; RETURN_VARPTR(long int,++RefValue()); }