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:
Diffstat (limited to 'contrib/moses2/SCFG/TargetPhraseImpl.cpp')
-rw-r--r--contrib/moses2/SCFG/TargetPhraseImpl.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/contrib/moses2/SCFG/TargetPhraseImpl.cpp b/contrib/moses2/SCFG/TargetPhraseImpl.cpp
new file mode 100644
index 000000000..ebea6cef7
--- /dev/null
+++ b/contrib/moses2/SCFG/TargetPhraseImpl.cpp
@@ -0,0 +1,125 @@
+/*
+ * TargetPhraseImpl.cpp
+ *
+ * Created on: 23 Oct 2015
+ * Author: hieu
+ */
+
+#include <stdlib.h>
+#include "TargetPhraseImpl.h"
+#include "../Scores.h"
+#include "../System.h"
+#include "../MemPool.h"
+#include "../PhraseBased/Manager.h"
+#include "../AlignmentInfoCollection.h"
+#include "../TranslationModel/PhraseTable.h"
+
+using namespace std;
+
+namespace Moses2
+{
+namespace SCFG
+{
+
+TargetPhraseImpl *TargetPhraseImpl::CreateFromString(MemPool &pool,
+ const PhraseTable &pt, const System &system, const std::string &str)
+{
+ //cerr << "str=" << str << endl;
+ FactorCollection &vocab = system.GetVocab();
+
+ vector<string> toks = Tokenize(str);
+ size_t size = toks.size() - 1;
+ TargetPhraseImpl *ret =
+ new (pool.Allocate<TargetPhraseImpl>()) TargetPhraseImpl(pool, pt, system,
+ size);
+
+ for (size_t i = 0; i < size; ++i) {
+ SCFG::Word &word = (*ret)[i];
+ word.CreateFromString(vocab, system, toks[i]);
+ }
+
+ // lhs
+ ret->lhs.CreateFromString(vocab, system, toks.back());
+ //cerr << "ret=" << *ret << endl;
+ return ret;
+}
+
+TargetPhraseImpl::TargetPhraseImpl(MemPool &pool,
+ const PhraseTable &pt,
+ const System &system,
+ size_t size)
+:Moses2::TargetPhrase<SCFG::Word>(pool, pt, system, size)
+,m_alignNonTerm(&AlignmentInfoCollection::Instance().GetEmptyAlignmentInfo())
+
+{
+ m_scores = new (pool.Allocate<Scores>()) Scores(system, pool,
+ system.featureFunctions.GetNumScores());
+
+}
+
+TargetPhraseImpl::~TargetPhraseImpl()
+{
+ // TODO Auto-generated destructor stub
+}
+
+std::string TargetPhraseImpl::Debug(const System &system) const
+{
+ stringstream out;
+ out << lhs.Debug(system);
+ out << " -> ";
+ for (size_t i = 0; i < GetSize(); ++i) {
+ const SCFG::Word &word = (*this)[i];
+ out << word.Debug(system) << " ";
+ }
+ out << "pt=" << pt.GetName();
+ out << " SCORES:" << GetScores().Debug(system);
+ out << " ALIGN-T:";
+ out << GetAlignTerm().Debug(system);
+ out << " ALIGN-NT:";
+ out << GetAlignNonTerm().Debug(system);
+
+ return out.str();
+}
+
+void TargetPhraseImpl::SetAlignmentInfo(const std::string &alignString)
+{
+ AlignmentInfo::CollType alignTerm, alignNonTerm;
+
+ vector<string> toks = Tokenize(alignString);
+ for (size_t i = 0; i < toks.size(); ++i) {
+ vector<size_t> alignPair = Tokenize<size_t>(toks[i], "-");
+ UTIL_THROW_IF2(alignPair.size() != 2, "Wrong alignment format");
+
+ size_t sourcePos = alignPair[0];
+ size_t targetPos = alignPair[1];
+
+ if ((*this)[targetPos].isNonTerminal) {
+ alignNonTerm.insert(std::pair<size_t,size_t>(sourcePos, targetPos));
+ } else {
+ alignTerm.insert(std::pair<size_t,size_t>(sourcePos, targetPos));
+ }
+ }
+
+ SetAlignTerm(alignTerm);
+ SetAlignNonTerm(alignNonTerm);
+ // cerr << "TargetPhrase::SetAlignmentInfo(const StringPiece &alignString) this:|" << *this << "|\n";
+
+ //cerr << "alignTerm=" << alignTerm.size() << endl;
+ //cerr << "alignNonTerm=" << alignNonTerm.size() << endl;
+
+}
+
+size_t TargetPhraseImpl::GetNumNonTerms() const
+{
+ size_t ret = 0;
+ for (size_t i = 0; i < GetSize(); ++i) {
+ if ((*this)[i].isNonTerminal) {
+ ++ret;
+ }
+ }
+ return ret;
+}
+
+
+}
+}