00001
00002 #include "PhraseDictionaryMemoryPerSentence.h"
00003 #include "moses/TranslationModel/CYKPlusParser/ChartRuleLookupManagerExample.h"
00004
00005 using namespace std;
00006
00007 namespace Moses
00008 {
00009 PhraseDictionaryMemoryPerSentence::PhraseDictionaryMemoryPerSentence(const std::string &line)
00010 : PhraseDictionary(line, true)
00011 {
00012 ReadParameters();
00013 }
00014
00015 void PhraseDictionaryMemoryPerSentence::Load(AllOptions::ptr const& opts)
00016 {
00017 m_options = opts;
00018 SetFeaturesToApply();
00019
00020
00021 }
00022
00023 void PhraseDictionaryMemoryPerSentence::InitializeForInput(ttasksptr const& ttask)
00024 {
00025 Coll &coll = GetColl();
00026 coll.clear();
00027
00028 string filePath = m_filePath + SPrint(ttask.get()->GetSource()->GetTranslationId()) + ".txt";
00029 InputFileStream strme(filePath);
00030
00031 string line;
00032 while (getline(strme, line)) {
00033 vector<string> toks = TokenizeMultiCharSeparator(line, "|||");
00034 Phrase source;
00035 source.CreateFromString(Input, m_input, toks[0], NULL);
00036
00037 TargetPhrase *target = new TargetPhrase(this);
00038 target->CreateFromString(Output, m_output, toks[1], NULL);
00039
00040
00041 vector<float> scores = Tokenize<float>(toks[2]);
00042 std::transform(scores.begin(), scores.end(), scores.begin(),TransformScore);
00043 std::transform(scores.begin(), scores.end(), scores.begin(),FloorScore);
00044 target->GetScoreBreakdown().PlusEquals(this, scores);
00045
00046
00047 target->EvaluateInIsolation(source, GetFeaturesToApply());
00048
00049
00050 TargetPhraseCollection::shared_ptr &tpsPtr = coll[source];
00051 TargetPhraseCollection *tps = tpsPtr.get();
00052 if (tps == NULL) {
00053 tps = new TargetPhraseCollection();
00054 tpsPtr.reset(tps);
00055 }
00056 tps->Add(target);
00057 }
00058 }
00059
00060 void PhraseDictionaryMemoryPerSentence::GetTargetPhraseCollectionBatch(const InputPathList &inputPathQueue) const
00061 {
00062 InputPathList::const_iterator iter;
00063 for (iter = inputPathQueue.begin(); iter != inputPathQueue.end(); ++iter) {
00064 InputPath &inputPath = **iter;
00065 const Phrase &source = inputPath.GetPhrase();
00066
00067 Coll &coll = GetColl();
00068 Coll::const_iterator iter = coll.find(source);
00069 if (iter == coll.end()) {
00070 TargetPhraseCollection::shared_ptr tprPtr;
00071 inputPath.SetTargetPhrases(*this, tprPtr, NULL);
00072 } else {
00073 const TargetPhraseCollection::shared_ptr &tprPtr = iter->second;
00074 inputPath.SetTargetPhrases(*this, tprPtr, NULL);
00075 }
00076 }
00077 }
00078
00079
00080 ChartRuleLookupManager* PhraseDictionaryMemoryPerSentence::CreateRuleLookupManager(const ChartParser &parser,
00081 const ChartCellCollectionBase &cellCollection,
00082 std::size_t )
00083 {
00084 abort();
00085 }
00086
00087 PhraseDictionaryMemoryPerSentence::Coll &PhraseDictionaryMemoryPerSentence::GetColl() const
00088 {
00089 Coll *coll;
00090 coll = m_coll.get();
00091 if (coll == NULL) {
00092 coll = new Coll;
00093 m_coll.reset(coll);
00094 }
00095 assert(coll);
00096 return *coll;
00097 }
00098
00099 TO_STRING_BODY(PhraseDictionaryMemoryPerSentence);
00100
00101
00102 ostream& operator<<(ostream& out, const PhraseDictionaryMemoryPerSentence& phraseDict)
00103 {
00104 return out;
00105 }
00106
00107 }