translation_table_t PhraseTable::GetAllTranslationOptions(const vector<wid_t> &sentence, context_t *context) { translation_table_t ttable; for (size_t start = 0; start < sentence.size(); ++start) { Collector *collector = self->index->NewCollector(context); vector<wid_t> phrase; vector<wid_t> phraseDelta; for (size_t end = start; end < sentence.size(); ++end) { wid_t word = sentence[end]; phrase.push_back(word); phraseDelta.push_back(word); if (ttable.find(phrase) == ttable.end()) { vector<sample_t> samples; collector->Extend(phraseDelta, self->numberOfSamples, samples); phraseDelta.clear(); if (samples.empty()) break; vector<TranslationOption> options; MakeTranslationOptions(self->index, self->aligner, phrase, samples, options); ttable[phrase] = options; } } delete collector; } return ttable; }
void RunTest(SuffixArray &index, const context_t *context, const unordered_map<vector<wid_t>, size_t, phrase_hash> &ngrams, vector<speed_perf_t> &speedData) { size_t queryCount = 0; for (auto entry = ngrams.begin(); entry != ngrams.end(); ++entry) { Collector *collector = index.NewCollector(context, true); for (size_t i = 0; i < entry->first.size(); ++i) { double begin = GetTime(); vector<sample_t> samples; collector->Extend(entry->first[i], 1000, samples); speedData[i].seconds += GetElapsedTime(begin); speedData[i].requests++; queryCount++; if (queryCount % 10000 == 0) cout << "." << flush; } delete collector; } }