Blame view
tools/sctk-2.4.10/src/asclite/core/alignedsegment.cpp
2.54 KB
8dcb6dfcb first commit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
/* * ASCLITE * Author: Jerome Ajot, Jon Fiscus, Nicolas Radde, Chris Laprun * * This software was developed at the National Institute of Standards and Technology by * employees of the Federal Government in the course of their official duties. Pursuant * to title 17 Section 105 of the United States Code this software is not subject to * copyright protection and is in the public domain. ASCLITE is an experimental system. * NIST assumes no responsibility whatsoever for its use by other parties, and makes no * guarantees, expressed or implied, about its quality, reliability, or any other * characteristic. We would appreciate acknowledgement if the software is used. * * THIS SOFTWARE IS PROVIDED "AS IS." With regard to this software, NIST MAKES NO EXPRESS * OR IMPLIED WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING MERCHANTABILITY, * OR FITNESS FOR A PARTICULAR PURPOSE. */ /** * Represent the collection of TokenAlignment for a segment. */ #include "alignedsegment.h" AlignedSegment::AlignedSegment(Segment* referenceSegment) { m_tokenAlignments = vector< TokenAlignment* >(); m_refToAlignments = map<Token*, TokenAlignment*>(); m_referenceSegment = referenceSegment; } AlignedSegment::~AlignedSegment() { for(size_t i=0; i< m_tokenAlignments.size(); ++i) { TokenAlignment* ptr_elt = m_tokenAlignments[i]; if(ptr_elt) delete ptr_elt; } m_tokenAlignments.clear(); m_refToAlignments.clear(); } string AlignedSegment::ToString() { size_t nbTokAli = GetTokenAlignmentCount(); string result = "<AlignedSegment> \tref: \t" + m_referenceSegment->ToString() + " "; for(size_t i = 0; i < nbTokAli; ++i) { result += GetTokenAlignmentAt(i)->ToString() + " "; } result += "</AlignedSegment>"; return result; } TokenAlignment* AlignedSegment::GetTokenAlignmentFor(Token* reference, const bool& create) { TokenAlignment* ta = m_refToAlignments[reference]; // if we don't want to create a new TA or one already exists for reference, return it if(!create || ta != NULL) { return ta; } ta = new TokenAlignment(reference); m_tokenAlignments.push_back(ta); // don't add ta to the map if it's not associated to a non-NULL reference if(reference != NULL) { m_refToAlignments[reference] = ta; } return ta; } int AlignedSegment::AddTokenAlignment(Token* reference, const string& hypKey, Token* hypothesis) { if(reference != NULL && reference->GetParentSegment() != m_referenceSegment) { return -1; } return GetTokenAlignmentFor(reference, true)->AddAlignmentFor(hypKey, hypothesis); } |