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