mosesdecoder/moses/Syntax/RuleTableFF.cpp
2015-12-11 01:09:22 +00:00

65 lines
2.1 KiB
C++

#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();
// caching for memory pt is pointless
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; // staticData.GetS2TParsingAlgorithm();
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");
}
}
} // Syntax
} // Moses