From 6e6e731cebef414141e3e98fc837f24328f70103 Mon Sep 17 00:00:00 2001 From: Jacob Dlougach Date: Mon, 24 Sep 2012 15:19:24 +0400 Subject: [PATCH] Align unknown word in most simple cases --- moses-chart-cmd/src/IOWrapper.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/moses-chart-cmd/src/IOWrapper.cpp b/moses-chart-cmd/src/IOWrapper.cpp index 6107a763d..aae391de3 100644 --- a/moses-chart-cmd/src/IOWrapper.cpp +++ b/moses-chart-cmd/src/IOWrapper.cpp @@ -199,6 +199,13 @@ void OutputSurface(std::ostream &out, const ChartHypothesis *hypo, const std::ve namespace { typedef std::vector< std::pair > WordAlignment; + bool IsUnknownWord(const Word& word) { + const Factor* factor = word[MAX_NUM_FACTORS - 1]; + if (factor == NULL) + return false; + return factor->GetString() == UNKNOWN_FACTOR; + } + WordAlignment GetWordAlignment(const Moses::ChartHypothesis *hypo, size_t *targetWordsCount) { const Moses::TargetPhrase& targetPhrase = hypo->GetCurrTargetPhrase(); @@ -244,6 +251,9 @@ namespace { result.push_back(make_pair(sourceOffset + it2->first, targetOffset + it2->second)); } } + if (result.empty() && targetPhrase.GetSize() == 1 && hypo->GetCurrSourceRange().GetNumWordsCovered() == 1 && IsUnknownWord(targetPhrase.GetWord(0))) { + result.push_back(WordAlignment::value_type(0, 0)); + } return result; } } @@ -399,6 +409,7 @@ void IOWrapper::OutputDetailedTranslationReport( CHECK(m_detailOutputCollector); m_detailOutputCollector->Write(translationId, out.str()); } + void IOWrapper::OutputBestHypo(const ChartHypothesis *hypo, long translationId, bool /* reportSegmentation */, bool /* reportAllFactors */) {