Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Germann <ugermann@inf.ed.ac.uk>2014-04-08 15:43:21 +0400
committerUlrich Germann <ugermann@inf.ed.ac.uk>2014-04-08 15:43:21 +0400
commit43a51bb5d7d576bb6d8038032135605144025294 (patch)
treefef2d102d62f35d9237ded02c11a9855090b2b8c /moses/Word.cpp
parentf82e79d237487a38dcbbd2ed5f28e78acd2f3769 (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.cpp40
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;
}