blob: d1ca125b246741bad460d94f2598a5dfeb9dd32e (
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
|
#include "translator.h"
#include <iostream>
#include <vector>
#include "verbose.h"
using namespace std;
Translator::~Translator() {}
void Translator::ProcessMarkupHints(const map<string, string>& kv) {
if (state_ != kUninitialized) {
cerr << "Translator::ProcessMarkupHints in wrong state: " << state_ << endl;
abort();
}
ProcessMarkupHintsImpl(kv);
state_ = kReadyToTranslate;
}
bool Translator::Translate(const std::string& src,
SentenceMetadata* smeta,
const std::vector<double>& weights,
Hypergraph* minus_lm_forest) {
if (state_ == kUninitialized) {
cerr << "Translator::Translate(...) must not be in uninitialized state!\n";
abort();
}
const bool result = TranslateImpl(src, smeta, weights, minus_lm_forest);
state_ = kTranslated;
return result;
}
void Translator::SentenceComplete() {
if (state_ != kTranslated) {
cerr << "Translator::Complete in unexpected state: " << state_ << endl;
// not fatal
}
SentenceCompleteImpl();
state_ = kUninitialized; // return to start state
}
// this may be overridden by translators that want to accept
// metadata
void Translator::ProcessMarkupHintsImpl(const map<string, string>& kv) {
int unprocessed = kv.size() - kv.count("id") - kv.count("psg");
if (!SILENT) cerr << "Inside translator process hints\n";
if (unprocessed > 0) {
cerr << "Sentence markup contains unprocessed data:\n";
for (map<string, string>::const_iterator it = kv.begin(); it != kv.end(); ++it) {
if (it->first == "id") continue;
cerr << " KEY[" << it->first << "] --> " << it->second << endl;
}
abort();
}
}
void Translator::SentenceCompleteImpl() {}
|