void CIMIContext::makeSelection (CCandidate &candi, bool doSearch) { CLatticeFrame &fr = m_lattice[candi.m_end]; fr.m_bwType = fr.m_bwType | CLatticeFrame::USER_SELECTED; fr.m_bestWord = candi; if (doSearch) searchFrom (candi.m_end); }
bool CIMIContext::_buildLattice(IPySegmentor::TSegmentVec &segments, unsigned rebuildFrom, bool doSearch) { _clearFrom(rebuildFrom); IPySegmentor::TSegmentVec::const_iterator it = segments.begin(); IPySegmentor::TSegmentVec::const_iterator ite = segments.end(); unsigned i, j = 0; for (; it != ite; ++it) { i = it->m_start; j = i + it->m_len; if (i < rebuildFrom - 1) continue; if (j >= m_lattice.capacity() - 1) break; if (it->m_type == IPySegmentor::SYLLABLE) _forwardSyllables(i, j, *it); else if (it->m_type == IPySegmentor::SYLLABLE_SEP) _forwardSyllableSep(i, j); else _forwardString(i, j, it->m_syllables); m_bOmitPunct = false; } _forwardTail(j, j + 1); m_tailIdx = j + 1; return doSearch && searchFrom(rebuildFrom); }
void CIMIContext::makeSelection(CCandidate &candi, bool doSearch) { CLatticeFrame &fr = m_lattice[candi.m_end]; fr.m_bwType = fr.m_bwType | CLatticeFrame::USER_SELECTED; fr.m_selWord = candi; // make best sentence word consistent as well for (size_t i = 0; i < m_nBest; i++) { fr.m_bestWords[i] = candi; } if (doSearch) searchFrom(candi.m_end); }
unsigned CIMIContext::cancelSelection (unsigned frIdx, bool doSearch) { unsigned ret = frIdx; CLatticeFrame &fr = m_lattice[frIdx]; while (fr.m_bwType & CLatticeFrame::IGNORED) { --frIdx; fr = m_lattice[frIdx]; } if (fr.m_bwType & (CLatticeFrame::USER_SELECTED | CLatticeFrame::BESTWORD)) { ret = fr.m_bestWord.m_start; fr.m_bwType = CLatticeFrame::NO_BESTWORD; if (doSearch) searchFrom (frIdx); } return ret; }