mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2025-01-08 20:46:59 +03:00
65 lines
2.1 KiB
C++
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
|