File size: 3,776 Bytes
158b61b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
// $Id$
#ifndef moses_PhraseDictionaryTree_h
#define moses_PhraseDictionaryTree_h
#include <string>
#include <vector>
#include <iostream>
#ifdef WITH_THREADS
#include <boost/thread/mutex.hpp>
#endif
#include "moses/TypeDef.h"
#include "moses/PrefixTree.h"
#include "moses/File.h"
#include "moses/ObjectPool.h"
#include "moses/FF/LexicalReordering/LexicalReorderingTable.h"
#include "moses/LVoc.h"
#include "moses/TypeDef.h"
#include "moses/Util.h"
namespace Moses
{
class Phrase;
class Word;
class ConfusionNet;
class PDTimp;
typedef PrefixTreeF<LabelId,OFF_T> PTF;
//typedef std::pair<std::vector<std::string const*>,Scores > StringTgtCand;
struct StringTgtCand {
typedef std::vector<std::string const*> Tokens;
Tokens tokens;
Scores scores;
Tokens fnames;
std::vector<FValue> fvalues;
};
/** A phrase table for phrase-based decoding that is held on disk, rather than in memory
* Wrapper around a PDTimp class
*/
class PhraseDictionaryTree
{
PDTimp *imp; //implementation
PhraseDictionaryTree(const PhraseDictionaryTree&); //not implemented
void operator=(const PhraseDictionaryTree&); //not implemented
public:
PhraseDictionaryTree();
void NeedAlignmentInfo(bool a);
void PrintWordAlignment(bool a);
bool PrintWordAlignment();
virtual ~PhraseDictionaryTree();
size_t GetSize() const {
return 0;
}
// convert from ascii phrase table format
// note: only creates table, does not keep it in memory
// -> use Read(outFileNamePrefix);
int Create(std::istream& in,const std::string& outFileNamePrefix);
int Read(const std::string& fileNamePrefix);
// free memory used by the prefix tree etc.
void FreeMemory() const;
/**************************************
* access with full source phrase *
**************************************/
// print target candidates for a given phrase, mainly for debugging
void PrintTargetCandidates(const std::vector<std::string>& src,
std::ostream& out) const;
// get the target candidates for a given phrase
void GetTargetCandidates(const std::vector<std::string>& src,
std::vector<StringTgtCand>& rv) const;
// get the target candidates for a given phrase
void GetTargetCandidates(const std::vector<std::string>& src,
std::vector<StringTgtCand>& rv,
std::vector<std::string>& wa) const;
/*****************************
* access to prefix tree *
*****************************/
// 'pointer' into prefix tree
// the only permitted direct operation is a check for NULL,
// e.g. PrefixPtr p; if(p) ...
// other usage only through PhraseDictionaryTree-functions below
class PrefixPtr
{
PPimp* imp;
friend class PDTimp;
public:
PrefixPtr(PPimp* x=0) : imp(x) {}
operator bool() const;
};
// return pointer to root node
PrefixPtr GetRoot() const;
// extend pointer with a word/Factorstring and return the resulting successor
// pointer. If there is no such successor node, the result will evaluate to
// false. Requirement: the input pointer p evaluates to true.
PrefixPtr Extend(PrefixPtr p,const std::string& s) const;
// get the target candidates for a given prefix pointer
// requirement: the pointer has to evaluate to true
void GetTargetCandidates(PrefixPtr p,
std::vector<StringTgtCand>& rv) const;
void GetTargetCandidates(PrefixPtr p,
std::vector<StringTgtCand>& rv,
std::vector<std::string>& wa) const;
// print target candidates for a given prefix pointer to a stream, mainly
// for debugging
void PrintTargetCandidates(PrefixPtr p,std::ostream& out) const;
};
}
#endif
|