00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _TERCPPTERCALC_H___
00022 #define _TERCPPTERCALC_H___
00023
00024 #include <vector>
00025 #include <cstdio>
00026 #include <cstring>
00027 #include <sstream>
00028 #include "hashMap.h"
00029 #include "hashMapInfos.h"
00030 #include "hashMapStringInfos.h"
00031 #include "terAlignment.h"
00032 #include "tools.h"
00033 #include "terShift.h"
00034 #include "alignmentStruct.h"
00035 #include "bestShiftStruct.h"
00036
00037 using namespace std;
00038 using namespace TERCPPNS_Tools;
00039 using namespace TERCPPNS_HashMapSpace;
00040 namespace TERCPPNS_TERCpp
00041 {
00042
00043
00044 typedef vector<terShift> vecTerShift;
00048 class terCalc
00049 {
00050 private :
00051
00052 WERalignment l_WERalignment;
00053
00054 hashMap bagOfWords;
00055 int TAILLE_PERMUT_MAX;
00056 int NBR_PERMUT_MAX;
00057
00058 int NBR_SEGS_EVALUATED;
00059 int NBR_PERMUTS_CONSID;
00060 int NBR_BS_APPELS;
00061 int DIST_MAX_PERMUT;
00062 int CALL_TER_ALIGN;
00063 int CALL_CALC_PERMUT;
00064 int CALL_FIND_BSHIFT;
00065 int MAX_LENGTH_SENTENCE;
00066 bool PRINT_DEBUG;
00067
00068
00069 vector < vector < double > > * S;
00070 vector < vector < char > > * P;
00071 vector<vecInt> refSpans;
00072 vector<vecInt> hypSpans;
00073 int TAILLE_BEAM;
00074
00075 public:
00076 int shift_cost;
00077 int insert_cost;
00078 int delete_cost;
00079 int substitute_cost;
00080 int match_cost;
00081 double infinite;
00082 terCalc();
00083
00084 ~terCalc();
00085
00086 void setDebugMode ( bool b );
00087
00088
00089
00090 terAlignment WERCalculation ( vector< string >& hyp, vector< string >& ref );
00091
00092
00093 hashMapInfos createConcordMots ( vector<string>& hyp, vector<string>& ref );
00094 terAlignment minimizeDistanceEdition ( vector<string>& hyp, vector<string>& ref, vector<vecInt>& curHypSpans );
00095 void minimizeDistanceEdition ( vector<string>& hyp, vector<string>& ref, vector<vecInt>& curHypSpans , terAlignment* l_terAlign);
00096
00097 bool trouverIntersection ( vecInt& refSpan, vecInt& hypSpan );
00098 terAlignment TER ( vector<string>& hyp, vector<string>& ref , float avRefLength );
00099 terAlignment TER ( vector<string>& hyp, vector<string>& ref );
00100 terAlignment TER ( vector<int>& hyp, vector<int>& ref );
00101 bestShiftStruct * findBestShift ( vector< string >& cur, vector< string >& hyp, vector< string >& ref, hashMapInfos& rloc, TERCPPNS_TERCpp::terAlignment& med_align );
00102 void calculateTerAlignment ( terAlignment& align, vector<bool>* herr, vector<bool>* rerr, vector<int>* ralign );
00103 vector<vecTerShift> * calculerPermutations ( vector< string >& hyp, vector< string >& ref, hashMapInfos& rloc, TERCPPNS_TERCpp::terAlignment& align, vector<bool>* herr, vector<bool>* rerr, vector<int>* ralign );
00104 alignmentStruct permuter ( vector<string>& words, terShift& s );
00105 alignmentStruct permuter ( vector<string>& words, terShift* s );
00106 alignmentStruct permuter ( vector<string>& words, int start, int end, int newloc );
00107 };
00108
00109 }
00110
00111 #endif