void ShdCrfTagger::backtrack(vynode_t *p, label_t& labels) { for (; p != NULL; p = p->p) { pair<int, int> label; label.first = p->h; label.second = p->l; labels.push_back(label); } reverse( labels.begin(), labels.end() ); }
void ShdCrfTagger::tagging(sequence *s, label_t& ls) { instance_t ins; this->ext(s, ins); // build lattice int length = ins.size(); vlattice_t l(length); this->initlattice(l, ins); // backtrack pointer vynode_t *bt = this->viterbi(l); ls.resize(length); this->backtrack(bt, ls); }
void builder::node(label_t label, bool add_space) { if (!label || !*label) return; auto text = label->get(); if (label->m_maxlen > 0 && text.length() > label->m_maxlen) { text = text.substr(0, label->m_maxlen) + "..."; } if ((label->m_overline.empty() && m_counters[syntaxtag::o] > 0) || (m_counters[syntaxtag::o] > 0 && label->m_margin > 0)) overline_close(true); if ((label->m_underline.empty() && m_counters[syntaxtag::u] > 0) || (m_counters[syntaxtag::u] > 0 && label->m_margin > 0)) underline_close(true); if (label->m_margin > 0) space(label->m_margin); if (!label->m_overline.empty()) overline(label->m_overline); if (!label->m_underline.empty()) underline(label->m_underline); background(label->m_background); color(label->m_foreground); if (label->m_padding > 0) space(label->m_padding); node(text, label->m_font, add_space); if (label->m_padding > 0) space(label->m_padding); color_close(m_lazy && label->m_margin > 0); background_close(m_lazy && label->m_margin > 0); if (!label->m_underline.empty() || (label->m_margin > 0 && m_counters[syntaxtag::u] > 0)) underline_close(m_lazy && label->m_margin > 0); if (!label->m_overline.empty() || (label->m_margin > 0 && m_counters[syntaxtag::o] > 0)) overline_close(m_lazy && label->m_margin > 0); if (label->m_margin > 0) space(label->m_margin); }
CLabel::CLabel(CDataStorage &datastore, const label_t& labeldef) : CRecord(datastore) { SetRecordType(labeldef.GetInSST() ? RECTYPE_LABELSST : RECTYPE_LABEL); AddValue16((unsigned16_t)labeldef.GetRow()); AddValue16((unsigned16_t)labeldef.GetCol()); AddValue16(labeldef.GetXFIndex()); if(labeldef.GetInSST()) { size_t index = labeldef.GetGlobalRecords().GetLabelSSTIndex(labeldef); AddValue32(index); } else { AddUnicodeString(labeldef.GetStrLabel(), LEN2_FLAGS_UNICODE); } SetRecordLength(GetDataSize()-RECORD_HEADER_SIZE); }
void CGlobalRecords::AddLabelSST(const label_t& labeldef) { if(labeldef.GetInSST()) { m_Labels.push_back(&labeldef); } }