mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-09-11 11:25:40 +03:00
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
#include "moses/LM/oxlm/OxLMParallelMapper.h"
|
|
|
|
#include "lbl/parallel_vocabulary.h"
|
|
|
|
#include "moses/FactorCollection.h"
|
|
|
|
using namespace std;
|
|
|
|
namespace Moses
|
|
{
|
|
|
|
OxLMParallelMapper::OxLMParallelMapper(
|
|
const boost::shared_ptr<oxlm::Vocabulary>& vocab,
|
|
bool pos_back_off,
|
|
const FactorType& pos_factor_type)
|
|
: OxLMMapper(vocab, pos_back_off, pos_factor_type)
|
|
{
|
|
boost::shared_ptr<oxlm::ParallelVocabulary> parallel_vocab =
|
|
dynamic_pointer_cast<oxlm::ParallelVocabulary>(vocab);
|
|
assert(parallel_vocab != nullptr);
|
|
|
|
for (int i = 0; i < parallel_vocab->sourceSize(); ++i) {
|
|
string word = parallel_vocab->convertSource(i);
|
|
FactorCollection& fc = FactorCollection::Instance();
|
|
const Moses::Factor* factor = fc.AddFactor(word, false);
|
|
moses2SourceOxlm[factor] = i;
|
|
}
|
|
|
|
kSOURCE_UNKNOWN = parallel_vocab->convertSource("<unk>");
|
|
}
|
|
|
|
int OxLMParallelMapper::convertSource(const Word& word) const
|
|
{
|
|
const Moses::Factor* word_factor = word.GetFactor(0);
|
|
Coll::const_iterator iter = moses2SourceOxlm.find(word_factor);
|
|
if (posBackOff && iter == moses2SourceOxlm.end()) {
|
|
const Moses::Factor* pos_factor = word.GetFactor(posFactorType);
|
|
iter = moses2SourceOxlm.find(pos_factor);
|
|
}
|
|
return iter == moses2SourceOxlm.end() ? kSOURCE_UNKNOWN : iter->second;
|
|
}
|
|
|
|
} // namespace Moses
|