static bool x_contains_any_of_y( const lem::MCollect<int> &x, const lem::MCollect<int> &y ) { if( y.size()==1 ) return x.find(y.front())!=UNKNOWN; else if( y.size()==2 ) return x.find(y.front())!=UNKNOWN || x.find(y.back())!=UNKNOWN; else { for( lem::Container::size_type i=0; i<y.size(); ++i ) if( x.find(y[i])!=UNKNOWN ) return true; return false; } }
// Генерация слов, фонетически близких к заданному word. // Возвращается список вариантов, включая исходное слово, и список их достоверностей. void LexicalAutomat::ProducePhonInv( const lem::UCString &word, int id_language, lem::MCollect<lem::UCString> &res, lem::MCollect<lem::Real1> &rels, LA_RecognitionTrace *trace ) { MCollect<LA_AA_list*> packs; LA_AA_list *list = new LA_AA_list; list->reserve(16); list->push_back(LA_AA_item(word, Real1(100))); // Теперь мутированные варианты. LA_Pack *pack = AlephAuto(id_language, word, 1, trace); for (Container::size_type j = 0; j < pack->size(); j++) { const Solarix::Lexem &ph_lex = *(pack->get(j)); if (res.find(ph_lex) == UNKNOWN) { Real1 r = pack->get(j)->get_Val(); rels.push_back(r); res.push_back(ph_lex); } } return; }
void SynPatternResult::FilterExportedCoords(const lem::MCollect<int> & must_be_exported) { if (must_be_exported.empty()) exported_coords.clear(); else { std::multimap< int /*id_coord*/, int /*id_state*/ > filtered; for (auto it = exported_coords.begin(); it != exported_coords.end(); ++it) { if (must_be_exported.find(it->first) != UNKNOWN) filtered.insert(*it); } exported_coords = filtered; } return; }