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

PhraseDictionaryDynSuffixArray.cpp « src « moses - github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d4f0161db89e55ec926088a6c84d58fda12b0052 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "PhraseDictionaryDynSuffixArray.h"
#include "FactorCollection.h"
#include "StaticData.h"
#include "TargetPhrase.h"
#include <iomanip>

using namespace std;

namespace Moses
{
PhraseDictionaryDynSuffixArray::PhraseDictionaryDynSuffixArray(size_t numScoreComponent,
    PhraseDictionaryFeature* feature): PhraseDictionary(numScoreComponent, feature)
{
  m_biSA = new BilingualDynSuffixArray();
}

PhraseDictionaryDynSuffixArray::~PhraseDictionaryDynSuffixArray()
{
  delete m_biSA;
}

bool PhraseDictionaryDynSuffixArray::Load(const std::vector<FactorType>& input,
    const std::vector<FactorType>& output,
    string source, string target, string alignments,
    const std::vector<float> &weight,
    size_t tableLimit,
    const LMList &languageModels,
    float weightWP)
{

  m_tableLimit = tableLimit;
  m_languageModels = &languageModels;
  m_weight = weight;
  m_weightWP = weightWP;

  m_biSA->Load( input, output, source, target, alignments, weight);

  return true;
}

void PhraseDictionaryDynSuffixArray::InitializeForInput(const InputType& input)
{
  CHECK(&input == &input);
}

void PhraseDictionaryDynSuffixArray::CleanUp()
{
  m_biSA->CleanUp();
}

const TargetPhraseCollection *PhraseDictionaryDynSuffixArray::GetTargetPhraseCollection(const Phrase& src) const
{
  TargetPhraseCollection *ret = new TargetPhraseCollection();
  std::vector< std::pair< Scores, TargetPhrase*> > trg;
  // extract target phrases and their scores from suffix array
  m_biSA->GetTargetPhrasesByLexicalWeight( src, trg);

  std::vector< std::pair< Scores, TargetPhrase*> >::iterator itr;
  for(itr = trg.begin(); itr != trg.end(); ++itr) {
    Scores scoreVector = itr->first;
    TargetPhrase *targetPhrase = itr->second;
    //std::transform(scoreVector.begin(),scoreVector.end(),scoreVector.begin(),NegateScore);
    std::transform(scoreVector.begin(),scoreVector.end(),scoreVector.begin(),FloorScore);
    targetPhrase->SetScore(m_feature, scoreVector, ScoreComponentCollection(), m_weight, m_weightWP, *m_languageModels);
    //cout << *targetPhrase << "\t" << std::setprecision(8) << scoreVector[2] << endl;
    ret->Add(targetPhrase);
  }
  ret->NthElement(m_tableLimit); // sort the phrases for the dcoder
  return ret;
}

void PhraseDictionaryDynSuffixArray::insertSnt(string& source, string& target, string& alignment)
{
  m_biSA->addSntPair(source, target, alignment); // insert sentence pair into suffix arrays
  //StaticData::Instance().ClearTransOptionCache(); // clear translation option cache 
}
void PhraseDictionaryDynSuffixArray::deleteSnt(unsigned /* idx */, unsigned /* num2Del */)
{
  // need to implement --
}

ChartRuleLookupManager *PhraseDictionaryDynSuffixArray::CreateRuleLookupManager(const InputType&, const ChartCellCollection&)
{
  CHECK(false);
  return 0;
}

}// end namepsace