00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <iostream>
00021 #include "ChartRuleLookupManagerExample.h"
00022 #include "DotChartInMemory.h"
00023
00024 #include "moses/Util.h"
00025 #include "moses/ChartParser.h"
00026 #include "moses/InputType.h"
00027 #include "moses/ChartParserCallback.h"
00028 #include "moses/StaticData.h"
00029 #include "moses/NonTerminal.h"
00030 #include "moses/ChartCellCollection.h"
00031 #include "moses/TranslationModel/PhraseDictionaryMemory.h"
00032 #include "moses/TranslationModel/ExamplePT.h"
00033
00034 using namespace std;
00035
00036 namespace Moses
00037 {
00038
00039 ChartRuleLookupManagerExample::ChartRuleLookupManagerExample(
00040 const ChartParser &parser,
00041 const ChartCellCollectionBase &cellColl,
00042 const ExamplePT &skeletonPt)
00043 : ChartRuleLookupManager(parser, cellColl)
00044 , m_skeletonPT(skeletonPt)
00045 {
00046 cerr << "starting ChartRuleLookupManagerExample" << endl;
00047 }
00048
00049 ChartRuleLookupManagerExample::~ChartRuleLookupManagerExample()
00050 {
00051
00052 }
00053
00054 void ChartRuleLookupManagerExample::GetChartRuleCollection(
00055 const InputPath &inputPath,
00056 size_t last,
00057 ChartParserCallback &outColl)
00058 {
00059
00060
00061 TargetPhraseCollection::shared_ptr tpColl(new TargetPhraseCollection);
00062 m_tpColl.push_back(tpColl);
00063
00064 const Range &range = inputPath.GetWordsRange();
00065
00066 if (range.GetNumWordsCovered() == 1) {
00067 const ChartCellLabel &sourceWordLabel = GetSourceAt(range.GetStartPos());
00068 const Word &sourceWord = sourceWordLabel.GetLabel();
00069 TargetPhrase *tp = CreateTargetPhrase(sourceWord);
00070 tpColl->Add(tp);
00071 }
00072
00073 outColl.Add(*tpColl, m_stackVec, range);
00074 }
00075
00076 TargetPhrase *
00077 ChartRuleLookupManagerExample::
00078 CreateTargetPhrase(const Word &sourceWord) const
00079 {
00080
00081 string str = sourceWord.GetFactor(0)->GetString().as_string();
00082 str = "ChartManagerExample:" + str;
00083
00084 TargetPhrase *tp = new TargetPhrase(&m_skeletonPT);
00085 Word &word = tp->AddWord();
00086 word.CreateFromString(Output, m_skeletonPT.GetOutput(), str, false);
00087
00088
00089 Word *targetLHS = new Word();
00090 targetLHS->CreateFromString(Output, m_skeletonPT.GetOutput(), "X", true);
00091 tp->SetTargetLHS(targetLHS);
00092
00093
00094 tp->SetAlignmentInfo("0-0");
00095
00096
00097 vector<float> scores(m_skeletonPT.GetNumScoreComponents(), 1.3);
00098 tp->GetScoreBreakdown().PlusEquals(&m_skeletonPT, scores);
00099
00100
00101 Phrase sourcePhrase;
00102 sourcePhrase.AddWord(sourceWord);
00103
00104
00105 return tp;
00106 }
00107 }