Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mgiza.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mgizapp/src/AlignTables.h')
-rw-r--r--mgizapp/src/AlignTables.h318
1 files changed, 164 insertions, 154 deletions
diff --git a/mgizapp/src/AlignTables.h b/mgizapp/src/AlignTables.h
index d4bcf09..52debc9 100644
--- a/mgizapp/src/AlignTables.h
+++ b/mgizapp/src/AlignTables.h
@@ -1,154 +1,164 @@
-/*
-
-EGYPT Toolkit for Statistical Machine Translation
-Written by Yaser Al-Onaizan, Jan Curin, Michael Jahr, Kevin Knight, John Lafferty, Dan Melamed, David Purdy, Franz Och, Noah Smith, and David Yarowsky.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program 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 General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-USA.
-
-*/
-#ifndef _aligntables_h
-#define _aligntables_h 1
-
-#include "defs.h"
-
-
-#include <cassert>
-
-#include <iostream>
-#include <algorithm>
-#include <functional>
-#include <map>
-#include <set>
-//#include <vector>
-#include "Vector.h"
-#include <utility>
-#if __GNUC__>2
-#include <ext/hash_map>
-using __gnu_cxx::hash_map;
-#else
-#include <hash_map>
-#endif
-#include <cmath>
-#include <fstream>
-#include "transpair_model1.h"
-
-
-/* ----------------- Class Defintions for hashmyalignment --------------------
- Objective: This class is used to define a hash mapping function to map
- an alignment (defined as a vector of integers) into a hash key
- ----------------------------------------------------------------------------*/
-
-class hashmyalignment : public unary_function< Vector<WordIndex>, size_t >
-{
-public:
- size_t operator() (const Vector<WordIndex>& key) const
- // to define the mapping function. it takes an alignment (a vector of
- // integers) and it returns an integer value (hash key).
- {
- WordIndex j ;
- size_t s ;
- size_t key_sum = 0 ;
- // logmsg << "For alignment:" ;
- for (j = 1 ; j < key.size() ; j++){
- // logmsg << " " << key[j] ;
- key_sum += (size_t) (int) pow(double(key[j]), double((j % 6)+1));
- }
- // logmsg << " , Key value was : " << key_sum;
- s = key_sum % 1000000 ;
- // logmsg << " h(k) = " << s << endl ;
- return(s);
- }
-#ifdef WIN32
- enum
- { // parameters for hash table
- bucket_size = 1 // 0 < bucket_size
- };
-
- bool operator()(const Vector<WordIndex> t1,
- const Vector<WordIndex> t2) const
- {WordIndex j ;
- if (t1.size() != t2.size())
- return(false);
- for (j = 1 ; j < t1.size() ; j++)
- if (t1[j] != t2[j])
- return(false);
- return(true);
- }
-#endif
-};
-
-#ifndef WIN32
-class equal_to_myalignment{
- // returns true if two alignments are the same (two vectors have same enties)
-public:
- bool operator()(const Vector<WordIndex> t1,
- const Vector<WordIndex> t2) const
- {WordIndex j ;
- if (t1.size() != t2.size())
- return(false);
- for (j = 1 ; j < t1.size() ; j++)
- if (t1[j] != t2[j])
- return(false);
- return(true);
- }
-
-};
-#endif
-
-/* ---------------- End of Class Defnition for hashmyalignment --------------*/
-
-
-/* ------------------ Class Defintions for alignmodel -----------------------
- Class Name: alignmodel
- Objective: Alignments neighborhhoods (collection of alignments) are stored in
- a hash table (for easy lookup). Each alignment vector is mapped into a hash
- key using the operator defined above.
- *--------------------------------------------------------------------------*/
-
-class alignmodel{
-private:
-#ifdef WIN32
- typedef hash_map<Vector<WordIndex>, LogProb, hashmyalignment > alignment_hash;
-
-#else
- typedef hash_map<Vector<WordIndex>, LogProb, hashmyalignment, equal_to_myalignment > alignment_hash;
-
-#endif
- alignment_hash a;
-private:
- // void erase(Vector<WordIndex>&);
-public:
-
- // methods;
-
- inline alignment_hash::iterator begin(void){return a.begin();} // begining of hash
- inline alignment_hash::iterator end(void){return a.end();} // end of hash
- inline const alignment_hash& getHash() const {return a;}; // reference to hash table
- bool insert(Vector<WordIndex>&, LogProb val=0.0); // add a alignmnet
- // void setValue(Vector<WordIndex>&, LogProb val); // not needed
- LogProb getValue(Vector<WordIndex>&)const; // retrieve prob. of alignment
- inline void clear(void){ a.clear();}; // clear hash table
- // void printTable(const char* filename);
- inline void resize(WordIndex n) {
-#ifndef WIN32
- a.resize(n);
-#endif
- }; // resize table
-
-};
-
-/* -------------- End of alignmode Class Definitions ------------------------*/
-#endif
+/*
+
+EGYPT Toolkit for Statistical Machine Translation
+Written by Yaser Al-Onaizan, Jan Curin, Michael Jahr, Kevin Knight, John Lafferty, Dan Melamed, David Purdy, Franz Och, Noah Smith, and David Yarowsky.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+USA.
+
+*/
+#ifndef _aligntables_h
+#define _aligntables_h 1
+
+#include "defs.h"
+
+
+#include <cassert>
+
+#include <iostream>
+#include <algorithm>
+#include <functional>
+#include <map>
+#include <set>
+//#include <vector>
+#include "Vector.h"
+#include <utility>
+#if __GNUC__>2
+#include <ext/hash_map>
+using __gnu_cxx::hash_map;
+#else
+#include <hash_map>
+#endif
+#include <cmath>
+#include <fstream>
+#include "transpair_model1.h"
+
+
+/* ----------------- Class Defintions for hashmyalignment --------------------
+ Objective: This class is used to define a hash mapping function to map
+ an alignment (defined as a vector of integers) into a hash key
+ ----------------------------------------------------------------------------*/
+
+class hashmyalignment : public unary_function< Vector<WordIndex>, size_t >
+{
+public:
+ size_t operator() (const Vector<WordIndex>& key) const
+ // to define the mapping function. it takes an alignment (a vector of
+ // integers) and it returns an integer value (hash key).
+ {
+ WordIndex j ;
+ size_t s ;
+ size_t key_sum = 0 ;
+ // logmsg << "For alignment:" ;
+ for (j = 1 ; j < key.size() ; j++) {
+ // logmsg << " " << key[j] ;
+ key_sum += (size_t) (int) pow(double(key[j]), double((j % 6)+1));
+ }
+ // logmsg << " , Key value was : " << key_sum;
+ s = key_sum % 1000000 ;
+ // logmsg << " h(k) = " << s << endl ;
+ return(s);
+ }
+#ifdef WIN32
+ enum {
+ // parameters for hash table
+ bucket_size = 1 // 0 < bucket_size
+ };
+
+ bool operator()(const Vector<WordIndex> t1,
+ const Vector<WordIndex> t2) const {
+ WordIndex j ;
+ if (t1.size() != t2.size())
+ return(false);
+ for (j = 1 ; j < t1.size() ; j++)
+ if (t1[j] != t2[j])
+ return(false);
+ return(true);
+ }
+#endif
+};
+
+#ifndef WIN32
+class equal_to_myalignment
+{
+ // returns true if two alignments are the same (two vectors have same enties)
+public:
+ bool operator()(const Vector<WordIndex> t1,
+ const Vector<WordIndex> t2) const {
+ WordIndex j ;
+ if (t1.size() != t2.size())
+ return(false);
+ for (j = 1 ; j < t1.size() ; j++)
+ if (t1[j] != t2[j])
+ return(false);
+ return(true);
+ }
+
+};
+#endif
+
+/* ---------------- End of Class Defnition for hashmyalignment --------------*/
+
+
+/* ------------------ Class Defintions for alignmodel -----------------------
+ Class Name: alignmodel
+ Objective: Alignments neighborhhoods (collection of alignments) are stored in
+ a hash table (for easy lookup). Each alignment vector is mapped into a hash
+ key using the operator defined above.
+ *--------------------------------------------------------------------------*/
+
+class alignmodel
+{
+private:
+#ifdef WIN32
+ typedef hash_map<Vector<WordIndex>, LogProb, hashmyalignment > alignment_hash;
+
+#else
+ typedef hash_map<Vector<WordIndex>, LogProb, hashmyalignment, equal_to_myalignment > alignment_hash;
+
+#endif
+ alignment_hash a;
+private:
+ // void erase(Vector<WordIndex>&);
+public:
+
+ // methods;
+
+ inline alignment_hash::iterator begin(void) {
+ return a.begin(); // begining of hash
+ }
+ inline alignment_hash::iterator end(void) {
+ return a.end(); // end of hash
+ }
+ inline const alignment_hash& getHash() const {
+ return a;
+ }; // reference to hash table
+ bool insert(Vector<WordIndex>&, LogProb val=0.0); // add a alignmnet
+// void setValue(Vector<WordIndex>&, LogProb val); // not needed
+ LogProb getValue(Vector<WordIndex>&)const; // retrieve prob. of alignment
+ inline void clear(void) {
+ a.clear();
+ }; // clear hash table
+ // void printTable(const char* filename);
+ inline void resize(WordIndex n) {
+#ifndef WIN32
+ a.resize(n);
+#endif
+ }; // resize table
+
+};
+
+/* -------------- End of alignmode Class Definitions ------------------------*/
+#endif