diff options
author | Ulrich Germann <ugermann@inf.ed.ac.uk> | 2014-04-08 15:43:21 +0400 |
---|---|---|
committer | Ulrich Germann <ugermann@inf.ed.ac.uk> | 2014-04-08 15:43:21 +0400 |
commit | 43a51bb5d7d576bb6d8038032135605144025294 (patch) | |
tree | fef2d102d62f35d9237ded02c11a9855090b2b8c /moses/Word.cpp | |
parent | f82e79d237487a38dcbbd2ed5f28e78acd2f3769 (diff) |
Some reformatting for readability. Special check for factor-less operation in Word::CreateFromString().
Diffstat (limited to 'moses/Word.cpp')
-rw-r--r-- | moses/Word.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/moses/Word.cpp b/moses/Word.cpp index 95dd3fdf4..d632492f5 100644 --- a/moses/Word.cpp +++ b/moses/Word.cpp @@ -98,19 +98,37 @@ StringPiece Word::GetString(FactorType factorType) const class StrayFactorException : public util::Exception {}; -void Word::CreateFromString(FactorDirection direction - , const std::vector<FactorType> &factorOrder - , const StringPiece &str - , bool isNonTerminal) +void +Word:: +CreateFromString(FactorDirection direction + , const std::vector<FactorType> &factorOrder + , const StringPiece &str + , bool isNonTerminal) { + // Don't go through the whole factor business if there's + // only one factor to begin with; this way Moses users + // doesn't have to set a nonsense factor delimiter if they + // aren't using factors to begin with. FactorCollection &factorCollection = FactorCollection::Instance(); - - util::TokenIter<util::MultiCharacter> fit(str, StaticData::Instance().GetFactorDelimiter()); - for (size_t ind = 0; ind < factorOrder.size() && fit; ++ind, ++fit) { - m_factorArray[factorOrder[ind]] = factorCollection.AddFactor(*fit); - } - UTIL_THROW_IF(fit, StrayFactorException, "You have configured " << factorOrder.size() << " factors but the word " << str << " contains factor delimiter " << StaticData::Instance().GetFactorDelimiter() << " too many times."); - + if (factorOrder.size() == 1 and factorOrder[0] == 0) + { + m_factorArray[0] = factorCollection.AddFactor(str); + } + else + { + util::TokenIter<util::MultiCharacter> + fit(str, StaticData::Instance().GetFactorDelimiter()); + for (size_t ind = 0; ind < factorOrder.size() && fit; ++ind, ++fit) { + m_factorArray[factorOrder[ind]] = factorCollection.AddFactor(*fit); + } + + UTIL_THROW_IF(fit, StrayFactorException, + "You have configured " << factorOrder.size() + << " factors but the word " << str + << " contains factor delimiter " + << StaticData::Instance().GetFactorDelimiter() + << " too many times."); + } // assume term/non-term same for all factors m_isNonTerminal = isNonTerminal; } |