| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "PhraseDictionaryNodeMemory.h" |
| #include "moses/TargetPhrase.h" |
| #include "moses/TranslationModel/PhraseDictionary.h" |
|
|
| using namespace std; |
|
|
| namespace Moses |
| { |
|
|
| void PhraseDictionaryNodeMemory::Prune(size_t tableLimit) |
| { |
| |
| for (TerminalMap::iterator p = m_sourceTermMap.begin(); p != m_sourceTermMap.end(); ++p) { |
| p->second.Prune(tableLimit); |
| } |
| for (NonTerminalMap::iterator p = m_nonTermMap.begin(); p != m_nonTermMap.end(); ++p) { |
| p->second.Prune(tableLimit); |
| } |
|
|
| |
| m_targetPhraseCollection->Prune(true, tableLimit); |
| } |
|
|
| void PhraseDictionaryNodeMemory::Sort(size_t tableLimit) |
| { |
| |
| for (TerminalMap::iterator p = m_sourceTermMap.begin(); p != m_sourceTermMap.end(); ++p) { |
| p->second.Sort(tableLimit); |
| } |
| for (NonTerminalMap::iterator p = m_nonTermMap.begin(); p != m_nonTermMap.end(); ++p) { |
| p->second.Sort(tableLimit); |
| } |
|
|
| |
| m_targetPhraseCollection->Sort(true, tableLimit); |
| } |
|
|
| PhraseDictionaryNodeMemory* |
| PhraseDictionaryNodeMemory::GetOrCreateChild(const Word &sourceTerm) |
| { |
| return &m_sourceTermMap[sourceTerm]; |
| } |
|
|
| #if defined(UNLABELLED_SOURCE) |
| PhraseDictionaryNodeMemory *PhraseDictionaryNodeMemory::GetOrCreateNonTerminalChild(const Word &targetNonTerm) |
| { |
| UTIL_THROW_IF2(!targetNonTerm.IsNonTerminal(), |
| "Not a non-terminal: " << targetNonTerm); |
|
|
| return &m_nonTermMap[targetNonTerm]; |
| } |
| #else |
| PhraseDictionaryNodeMemory *PhraseDictionaryNodeMemory::GetOrCreateChild(const Word &sourceNonTerm, const Word &targetNonTerm) |
| { |
| UTIL_THROW_IF2(!sourceNonTerm.IsNonTerminal(), |
| "Not a non-terminal: " << sourceNonTerm); |
| UTIL_THROW_IF2(!targetNonTerm.IsNonTerminal(), |
| "Not a non-terminal: " << targetNonTerm); |
|
|
| NonTerminalMapKey key(sourceNonTerm, targetNonTerm); |
| return &m_nonTermMap[NonTerminalMapKey(sourceNonTerm, targetNonTerm)]; |
| } |
| #endif |
|
|
| const PhraseDictionaryNodeMemory *PhraseDictionaryNodeMemory::GetChild(const Word &sourceTerm) const |
| { |
| UTIL_THROW_IF2(sourceTerm.IsNonTerminal(), |
| "Not a terminal: " << sourceTerm); |
|
|
| TerminalMap::const_iterator p = m_sourceTermMap.find(sourceTerm); |
| return (p == m_sourceTermMap.end()) ? NULL : &p->second; |
| } |
|
|
| #if defined(UNLABELLED_SOURCE) |
| const PhraseDictionaryNodeMemory *PhraseDictionaryNodeMemory::GetNonTerminalChild(const Word &targetNonTerm) const |
| { |
| UTIL_THROW_IF2(!targetNonTerm.IsNonTerminal(), |
| "Not a non-terminal: " << targetNonTerm); |
|
|
| NonTerminalMap::const_iterator p = m_nonTermMap.find(targetNonTerm); |
| return (p == m_nonTermMap.end()) ? NULL : &p->second; |
| } |
| #else |
| const PhraseDictionaryNodeMemory *PhraseDictionaryNodeMemory::GetChild(const Word &sourceNonTerm, const Word &targetNonTerm) const |
| { |
| UTIL_THROW_IF2(!sourceNonTerm.IsNonTerminal(), |
| "Not a non-terminal: " << sourceNonTerm); |
| UTIL_THROW_IF2(!targetNonTerm.IsNonTerminal(), |
| "Not a non-terminal: " << targetNonTerm); |
|
|
| NonTerminalMapKey key(sourceNonTerm, targetNonTerm); |
| NonTerminalMap::const_iterator p = m_nonTermMap.find(key); |
| return (p == m_nonTermMap.end()) ? NULL : &p->second; |
| } |
| #endif |
|
|
| void PhraseDictionaryNodeMemory::Remove() |
| { |
| m_sourceTermMap.clear(); |
| m_nonTermMap.clear(); |
| m_targetPhraseCollection->Remove(); |
| } |
|
|
| std::ostream& operator<<(std::ostream &out, const PhraseDictionaryNodeMemory &node) |
| { |
| out << node.GetTargetPhraseCollection(); |
| return out; |
| } |
|
|
| TO_STRING_BODY(PhraseDictionaryNodeMemory) |
|
|
| } |
|
|
|
|