| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "moses/NonTerminal.h" |
| #include "moses/TranslationModel/Scope3Parser/Parser.h" |
| #include "moses/StaticData.h" |
| #include "moses/TargetPhrase.h" |
| #include "moses/TargetPhraseCollection.h" |
| #include "moses/Util.h" |
| #include "moses/Word.h" |
| #include "UTrie.h" |
| #include "Trie.h" |
| #include "UTrieNode.h" |
|
|
| #include <boost/functional/hash.hpp> |
| #include <boost/unordered_map.hpp> |
| #include <boost/version.hpp> |
|
|
| #include <map> |
| #include <vector> |
|
|
| namespace Moses |
| { |
|
|
| TargetPhraseCollection::shared_ptr |
| RuleTableUTrie:: |
| GetOrCreateTargetPhraseCollection(const Phrase &source, |
| const TargetPhrase &target, |
| const Word *sourceLHS) |
| { |
| UTrieNode &currNode = GetOrCreateNode(source, target, sourceLHS); |
| return currNode.GetOrCreateTargetPhraseCollection(target); |
| } |
|
|
| UTrieNode &RuleTableUTrie::GetOrCreateNode(const Phrase &source, |
| const TargetPhrase &target, |
| const Word *) |
| { |
| const size_t size = source.GetSize(); |
|
|
| const AlignmentInfo &alignmentInfo = target.GetAlignNonTerm(); |
| AlignmentInfo::const_iterator iterAlign = alignmentInfo.begin(); |
|
|
| UTrieNode *currNode = &m_root; |
| for (size_t pos = 0 ; pos < size ; ++pos) { |
| const Word &word = source.GetWord(pos); |
|
|
| if (word.IsNonTerminal()) { |
| assert(iterAlign != alignmentInfo.end()); |
| assert(iterAlign->first == pos); |
| size_t targetNonTermInd = iterAlign->second; |
| ++iterAlign; |
| const Word &targetNonTerm = target.GetWord(targetNonTermInd); |
| currNode = currNode->GetOrCreateNonTerminalChild(targetNonTerm); |
| } else { |
| currNode = currNode->GetOrCreateTerminalChild(word); |
| } |
|
|
| assert(currNode != NULL); |
| } |
|
|
| return *currNode; |
| } |
|
|
| ChartRuleLookupManager *RuleTableUTrie::CreateRuleLookupManager( |
| const ChartParser &parser, |
| const ChartCellCollectionBase &cellCollection, |
| std::size_t maxChartSpan) |
| { |
| return new Scope3Parser(parser, cellCollection, *this, maxChartSpan); |
| } |
|
|
| void RuleTableUTrie::SortAndPrune() |
| { |
| if (GetTableLimit()) { |
| m_root.Sort(GetTableLimit()); |
| } |
| } |
|
|
| } |
|
|