00001 #pragma once
00002
00003 #include <string>
00004 #include <boost/foreach.hpp>
00005 #include <algorithm>
00006 #include "VWFeatureContext.h"
00007 #include "moses/Util.h"
00008
00009 namespace Moses
00010 {
00011
00012 class VWFeatureContextBilingual : public VWFeatureContext
00013 {
00014 public:
00015 VWFeatureContextBilingual(const std::string &line)
00016 : VWFeatureContext(line, DEFAULT_WINDOW_SIZE) {
00017 ReadParameters();
00018
00019
00020 VWFeatureBase::UpdateRegister();
00021 }
00022
00023 virtual void operator()(const InputType &input
00024 , const Phrase &contextPhrase
00025 , const AlignmentInfo &alignmentInfo
00026 , Discriminative::Classifier &classifier
00027 , Discriminative::FeatureVector &outFeatures) const {
00028 for (size_t i = 0; i < m_contextSize; i++) {
00029 std::string tgtWord = GetWord(contextPhrase, i);
00030 std::vector<std::string> alignedTo = GetAlignedSourceWords(contextPhrase, input, alignmentInfo, i);
00031 BOOST_FOREACH(const std::string &srcWord, alignedTo) {
00032 outFeatures.push_back(classifier.AddLabelIndependentFeature("tcblng^-" + SPrint(i + 1) + "^" + tgtWord + "^" + srcWord));
00033 }
00034 }
00035 }
00036
00037 virtual void SetParameter(const std::string& key, const std::string& value) {
00038 VWFeatureContext::SetParameter(key, value);
00039 }
00040
00041 private:
00042 static const int DEFAULT_WINDOW_SIZE = 1;
00043 };
00044
00045 }