2010-08-10 17:12:00 +04:00
|
|
|
// $Id: PhraseDictionaryMemory.cpp 2477 2009-08-07 16:47:54Z bhaddow $
|
|
|
|
// vim:tabstop=2
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
Moses - factored phrase-based language decoder
|
|
|
|
Copyright (C) 2010 University of Edinburgh
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with this library; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
#include "DecodeFeature.h"
|
2014-05-12 18:16:11 +04:00
|
|
|
#include "moses/DecodeStep.h"
|
2013-08-30 19:03:06 +04:00
|
|
|
#include "moses/StaticData.h"
|
2010-08-10 17:12:00 +04:00
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
2011-02-24 16:14:42 +03:00
|
|
|
namespace Moses
|
|
|
|
{
|
2015-04-29 22:16:52 +03:00
|
|
|
|
|
|
|
DecodeFeature::DecodeFeature(const std::string &line, bool registerNow)
|
|
|
|
: StatelessFeatureFunction(line, registerNow)
|
2014-05-12 18:16:11 +04:00
|
|
|
, m_container(NULL)
|
2013-02-04 05:09:15 +04:00
|
|
|
{
|
2013-05-20 22:57:46 +04:00
|
|
|
VERBOSE(2,"DecodeFeature:" << std::endl);
|
2013-02-04 05:09:15 +04:00
|
|
|
}
|
|
|
|
|
2013-10-29 22:44:33 +04:00
|
|
|
DecodeFeature::DecodeFeature(size_t numScoreComponents
|
2014-01-15 19:42:02 +04:00
|
|
|
, const std::string &line)
|
2013-10-29 22:44:33 +04:00
|
|
|
: StatelessFeatureFunction(numScoreComponents, line)
|
2014-05-12 18:16:11 +04:00
|
|
|
, m_container(NULL)
|
2013-01-18 21:57:26 +04:00
|
|
|
{
|
|
|
|
VERBOSE(2,"DecodeFeature: no factors yet" << std::endl);
|
|
|
|
}
|
2010-08-10 17:12:00 +04:00
|
|
|
|
2013-10-29 22:44:33 +04:00
|
|
|
DecodeFeature::DecodeFeature(size_t numScoreComponents
|
2013-05-29 21:16:15 +04:00
|
|
|
, const std::vector<FactorType> &input
|
|
|
|
, const std::vector<FactorType> &output
|
|
|
|
, const std::string &line)
|
2013-10-29 22:44:33 +04:00
|
|
|
: StatelessFeatureFunction(numScoreComponents, line)
|
2013-05-29 21:16:15 +04:00
|
|
|
, m_input(input), m_output(output)
|
2014-10-10 18:47:53 +04:00
|
|
|
, m_container(NULL)
|
2011-02-24 16:14:42 +03:00
|
|
|
{
|
|
|
|
m_inputFactors = FactorMask(input);
|
|
|
|
m_outputFactors = FactorMask(output);
|
|
|
|
VERBOSE(2,"DecodeFeature: input=" << m_inputFactors << " output=" << m_outputFactors << std::endl);
|
2010-08-10 17:12:00 +04:00
|
|
|
}
|
|
|
|
|
2013-06-20 16:25:02 +04:00
|
|
|
void DecodeFeature::SetParameter(const std::string& key, const std::string& value)
|
2013-06-10 19:29:07 +04:00
|
|
|
{
|
2013-06-10 21:11:55 +04:00
|
|
|
if (key == "input-factor") {
|
|
|
|
m_input =Tokenize<FactorType>(value, ",");
|
|
|
|
m_inputFactors = FactorMask(m_input);
|
|
|
|
} else if (key == "output-factor") {
|
|
|
|
m_output =Tokenize<FactorType>(value, ",");
|
|
|
|
m_outputFactors = FactorMask(m_output);
|
|
|
|
} else {
|
2013-06-20 16:25:02 +04:00
|
|
|
StatelessFeatureFunction::SetParameter(key, value);
|
2013-06-10 21:11:55 +04:00
|
|
|
}
|
2013-06-10 19:29:07 +04:00
|
|
|
}
|
|
|
|
|
2010-08-10 17:12:00 +04:00
|
|
|
|
|
|
|
const FactorMask& DecodeFeature::GetOutputFactorMask() const
|
|
|
|
{
|
|
|
|
return m_outputFactors;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const FactorMask& DecodeFeature::GetInputFactorMask() const
|
|
|
|
{
|
|
|
|
return m_inputFactors;
|
|
|
|
}
|
|
|
|
|
2011-02-24 16:14:42 +03:00
|
|
|
const std::vector<FactorType>& DecodeFeature::GetInput() const
|
2010-08-10 17:12:00 +04:00
|
|
|
{
|
|
|
|
return m_input;
|
|
|
|
}
|
|
|
|
|
2011-02-24 16:14:42 +03:00
|
|
|
const std::vector<FactorType>& DecodeFeature::GetOutput() const
|
2010-08-10 17:12:00 +04:00
|
|
|
{
|
|
|
|
return m_output;
|
|
|
|
}
|
|
|
|
|
2013-05-30 15:41:08 +04:00
|
|
|
bool DecodeFeature::IsUseable(const FactorMask &mask) const
|
|
|
|
{
|
2013-05-30 15:51:40 +04:00
|
|
|
for (size_t i = 0; i < m_output.size(); ++i) {
|
|
|
|
const FactorType &factor = m_output[i];
|
|
|
|
if (!mask[factor]) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
2014-05-12 18:16:11 +04:00
|
|
|
}
|
2013-05-30 15:41:08 +04:00
|
|
|
|
2014-05-12 18:16:11 +04:00
|
|
|
const DecodeGraph &DecodeFeature::GetDecodeGraph() const
|
|
|
|
{
|
|
|
|
assert(m_container);
|
|
|
|
const DecodeGraph *graph = m_container->GetContainer();
|
|
|
|
assert(graph);
|
|
|
|
return *graph;
|
2013-05-30 15:41:08 +04:00
|
|
|
}
|
|
|
|
|
2010-08-10 17:12:00 +04:00
|
|
|
}
|
|
|
|
|