mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-10-05 15:58:03 +03:00
Mmsapt now adds word alignment info to target phrases.
This commit is contained in:
parent
26666986f3
commit
576931b088
@ -25,12 +25,21 @@
|
||||
|
||||
namespace Moses
|
||||
{
|
||||
|
||||
AlignmentInfo::AlignmentInfo(const std::set<std::pair<size_t,size_t> > &pairs)
|
||||
: m_collection(pairs)
|
||||
{
|
||||
BuildNonTermIndexMap();
|
||||
}
|
||||
|
||||
AlignmentInfo::AlignmentInfo(const std::vector<unsigned char> &aln)
|
||||
{
|
||||
assert(aln.size()%2==0);
|
||||
for (size_t i = 0; i < aln.size(); i+= 2)
|
||||
m_collection.insert(std::make_pair(size_t(aln[i]),size_t(aln[i+1])));
|
||||
BuildNonTermIndexMap();
|
||||
}
|
||||
|
||||
void AlignmentInfo::BuildNonTermIndexMap()
|
||||
{
|
||||
if (m_collection.empty()) {
|
||||
|
@ -88,7 +88,7 @@ public:
|
||||
private:
|
||||
//! AlignmentInfo objects should only be created by an AlignmentInfoCollection
|
||||
explicit AlignmentInfo(const std::set<std::pair<size_t,size_t> > &pairs);
|
||||
|
||||
explicit AlignmentInfo(const std::vector<unsigned char> &aln);
|
||||
void BuildNonTermIndexMap();
|
||||
|
||||
CollType m_collection;
|
||||
|
@ -38,23 +38,23 @@ const AlignmentInfo &AlignmentInfoCollection::GetEmptyAlignmentInfo() const
|
||||
return *m_emptyAlignmentInfo;
|
||||
}
|
||||
|
||||
const AlignmentInfo *AlignmentInfoCollection::Add(
|
||||
const std::set<std::pair<size_t,size_t> > &pairs)
|
||||
AlignmentInfo const *
|
||||
AlignmentInfoCollection::
|
||||
Add(AlignmentInfo const& ainfo)
|
||||
{
|
||||
AlignmentInfo pairsAlignmentInfo(pairs);
|
||||
#ifdef WITH_THREADS
|
||||
{
|
||||
boost::shared_lock<boost::shared_mutex> read_lock(m_accessLock);
|
||||
AlignmentInfoSet::const_iterator i = m_collection.find(pairsAlignmentInfo);
|
||||
AlignmentInfoSet::const_iterator i = m_collection.find(ainfo);
|
||||
if (i != m_collection.end())
|
||||
return &*i;
|
||||
}
|
||||
boost::unique_lock<boost::shared_mutex> lock(m_accessLock);
|
||||
#endif
|
||||
std::pair<AlignmentInfoSet::iterator, bool> ret =
|
||||
m_collection.insert(pairsAlignmentInfo);
|
||||
std::pair<AlignmentInfoSet::iterator, bool> ret = m_collection.insert(ainfo);
|
||||
return &(*ret.first);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -46,7 +46,16 @@ public:
|
||||
* contains such an object then returns a pointer to it; otherwise a new
|
||||
* one is inserted.
|
||||
*/
|
||||
const AlignmentInfo *Add(const std::set<std::pair<size_t,size_t> > &);
|
||||
private:
|
||||
const AlignmentInfo* Add(AlignmentInfo const& ainfo);
|
||||
|
||||
public:
|
||||
template<typename ALNREP>
|
||||
AlignmentInfo const *
|
||||
Add(ALNREP const & aln)
|
||||
{
|
||||
return this->Add(AlignmentInfo(aln));
|
||||
}
|
||||
|
||||
//! Returns a pointer to an empty AlignmentInfo object.
|
||||
const AlignmentInfo &GetEmptyAlignmentInfo() const;
|
||||
@ -54,6 +63,7 @@ public:
|
||||
private:
|
||||
typedef std::set<AlignmentInfo, AlignmentInfoOrderer> AlignmentInfoSet;
|
||||
|
||||
|
||||
//! Only a single static variable should be created.
|
||||
AlignmentInfoCollection();
|
||||
~AlignmentInfoCollection();
|
||||
|
@ -177,18 +177,18 @@ void TargetPhrase::SetAlignmentInfo(const StringPiece &alignString)
|
||||
|
||||
}
|
||||
|
||||
void TargetPhrase::SetAlignTerm(const AlignmentInfo::CollType &coll)
|
||||
{
|
||||
const AlignmentInfo *alignmentInfo = AlignmentInfoCollection::Instance().Add(coll);
|
||||
m_alignTerm = alignmentInfo;
|
||||
// void TargetPhrase::SetAlignTerm(const AlignmentInfo::CollType &coll)
|
||||
// {
|
||||
// const AlignmentInfo *alignmentInfo = AlignmentInfoCollection::Instance().Add(coll);
|
||||
// m_alignTerm = alignmentInfo;
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
void TargetPhrase::SetAlignNonTerm(const AlignmentInfo::CollType &coll)
|
||||
{
|
||||
const AlignmentInfo *alignmentInfo = AlignmentInfoCollection::Instance().Add(coll);
|
||||
m_alignNonTerm = alignmentInfo;
|
||||
}
|
||||
// void TargetPhrase::SetAlignNonTerm(const AlignmentInfo::CollType &coll)
|
||||
// {
|
||||
// const AlignmentInfo *alignmentInfo = AlignmentInfoCollection::Instance().Add(coll);
|
||||
// m_alignNonTerm = alignmentInfo;
|
||||
// }
|
||||
|
||||
void TargetPhrase::SetSparseScore(const FeatureFunction* translationScoreProducer, const StringPiece &sparseString)
|
||||
{
|
||||
|
@ -28,6 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#include "Phrase.h"
|
||||
#include "ScoreComponentCollection.h"
|
||||
#include "AlignmentInfo.h"
|
||||
#include "AlignmentInfoCollection.h"
|
||||
#include "moses/PP/PhraseProperty.h"
|
||||
#include "util/string_piece.hh"
|
||||
|
||||
@ -121,8 +122,24 @@ public:
|
||||
m_alignNonTerm = alignNonTerm;
|
||||
}
|
||||
|
||||
void SetAlignTerm(const AlignmentInfo::CollType &coll);
|
||||
void SetAlignNonTerm(const AlignmentInfo::CollType &coll);
|
||||
// ALNREP = alignment representation,
|
||||
// see AlignmentInfo constructors for supported representations
|
||||
template<typename ALNREP>
|
||||
void
|
||||
SetAlignTerm(const ALNREP &coll)
|
||||
{
|
||||
m_alignTerm = AlignmentInfoCollection::Instance().Add(coll);
|
||||
}
|
||||
|
||||
// ALNREP = alignment representation,
|
||||
// see AlignmentInfo constructors for supported representations
|
||||
template<typename ALNREP>
|
||||
void
|
||||
SetAlignNonTerm(const ALNREP &coll)
|
||||
{
|
||||
m_alignNonTerm = AlignmentInfoCollection::Instance().Add(coll);
|
||||
}
|
||||
|
||||
|
||||
const AlignmentInfo &GetAlignTerm() const {
|
||||
return *m_alignTerm;
|
||||
|
@ -475,6 +475,7 @@ namespace Moses
|
||||
Word w; w.CreateFromString(Output,ofactor,wrd,false);
|
||||
tp->AddWord(w);
|
||||
}
|
||||
tp->SetAlignTerm(pool.aln);
|
||||
tp->GetScoreBreakdown().Assign(this, fvals);
|
||||
tp->EvaluateInIsolation(src);
|
||||
return tp;
|
||||
|
Loading…
Reference in New Issue
Block a user