|
#include "RuleTableFF.h" |
|
#include "moses/parameters/AllOptions.h" |
|
#include "moses/Syntax/F2S/HyperTree.h" |
|
#include "moses/Syntax/F2S/HyperTreeLoader.h" |
|
#include "moses/Syntax/S2T/RuleTrieCYKPlus.h" |
|
#include "moses/Syntax/S2T/RuleTrieLoader.h" |
|
#include "moses/Syntax/S2T/RuleTrieScope3.h" |
|
#include "moses/Syntax/T2S/RuleTrie.h" |
|
#include "moses/Syntax/T2S/RuleTrieLoader.h" |
|
namespace Moses |
|
{ |
|
namespace Syntax |
|
{ |
|
|
|
std::vector<RuleTableFF*> RuleTableFF::s_instances; |
|
|
|
RuleTableFF::RuleTableFF(const std::string &line) |
|
: PhraseDictionary(line, true) |
|
{ |
|
ReadParameters(); |
|
|
|
m_maxCacheSize = 0; |
|
|
|
s_instances.push_back(this); |
|
} |
|
|
|
void RuleTableFF::Load(Moses::AllOptions::ptr const& opts) |
|
{ |
|
m_options = opts; |
|
SetFeaturesToApply(); |
|
|
|
if (opts->search.algo == SyntaxF2S || opts->search.algo == SyntaxT2S) { |
|
F2S::HyperTree *trie = new F2S::HyperTree(this); |
|
F2S::HyperTreeLoader loader; |
|
loader.Load(*opts, m_input, m_output, m_filePath, *this, *trie, m_sourceTerminalSet); |
|
m_table = trie; |
|
} else if (opts->search.algo == SyntaxS2T) { |
|
S2TParsingAlgorithm algorithm = opts->syntax.s2t_parsing_algo; |
|
if (algorithm == RecursiveCYKPlus) { |
|
S2T::RuleTrieCYKPlus *trie = new S2T::RuleTrieCYKPlus(this); |
|
S2T::RuleTrieLoader loader; |
|
loader.Load(*opts,m_input, m_output, m_filePath, *this, *trie); |
|
m_table = trie; |
|
} else if (algorithm == Scope3) { |
|
S2T::RuleTrieScope3 *trie = new S2T::RuleTrieScope3(this); |
|
S2T::RuleTrieLoader loader; |
|
loader.Load(*opts, m_input, m_output, m_filePath, *this, *trie); |
|
m_table = trie; |
|
} else { |
|
UTIL_THROW2("ERROR: unhandled S2T parsing algorithm"); |
|
} |
|
} else if (opts->search.algo == SyntaxT2S_SCFG) { |
|
T2S::RuleTrie *trie = new T2S::RuleTrie(this); |
|
T2S::RuleTrieLoader loader; |
|
loader.Load(*opts, m_input, m_output, m_filePath, *this, *trie); |
|
m_table = trie; |
|
} else { |
|
UTIL_THROW2( |
|
"ERROR: RuleTableFF currently only supports the S2T, T2S, T2S_SCFG, and F2S search algorithms"); |
|
} |
|
} |
|
|
|
} |
|
} |
|
|