00001
00002
00003 #ifndef moses_SyntacticLanguageModelFiles_h
00004 #define moses_SyntacticLanguageModelFiles_h
00005
00006 #include "nl-iomacros.h"
00007 #include "nl-string.h"
00008
00009 namespace Moses
00010 {
00011
00012 template <class MH, class MO>
00013 class SyntacticLanguageModelFiles
00014 {
00015
00016 public:
00017
00018 SyntacticLanguageModelFiles(const std::vector<std::string>& filePaths);
00019 ~SyntacticLanguageModelFiles();
00020
00021 MH* getHiddenModel();
00022 MO* getObservedModel();
00023
00024 private:
00025 MH* hiddenModel;
00026 MO* observedModel;
00027
00028 };
00029
00030
00031 template <class MH, class MO>
00032 SyntacticLanguageModelFiles<MH,MO>::SyntacticLanguageModelFiles(const std::vector<std::string>& filePaths)
00033 {
00034
00035 this->hiddenModel = new MH();
00036 this->observedModel = new MO();
00037
00039 std::cerr << "Reading syntactic language model files...\n";
00040
00041 for ( int a=0, n=filePaths.size(); a<n; a++ ) {
00042 FILE* pf = fopen(filePaths[a].c_str(),"r");
00043 if(!pf) {
00044 std::cerr << "Error loading model file " << filePaths[a] << std::endl;
00045 return;
00046 }
00047 std::cerr << "Loading model \'" << filePaths[a] << "\'...\n";
00048 int c=' ';
00049 int i=0;
00050 int line=1;
00051 String sBuff(1000);
00052 CONSUME_ALL ( pf, c, WHITESPACE(c), line);
00053 while ( c!=-1 && c!='\0' && c!='\5' ) {
00054 CONSUME_STR ( pf, c, (c!='\n' && c!='\0' && c!='\5'), sBuff, i, line );
00055 StringInput si(sBuff.c_array());
00056 if ( !( sBuff[0]=='#'
00057 || si>>*(this->hiddenModel)>>"\0"!=NULL
00058 || si>>*(this->observedModel)>>"\0"!=NULL
00059 ))
00060 std::cerr<<"\nERROR: can't parse \'"<<sBuff<<"\' in line "<<line<<"\n\n";
00061 CONSUME_ALL ( pf, c, WHITESPACE(c), line);
00062 if ( line%100000==0 ) std::cerr<<" "<<line<<" lines read...\n";
00063 }
00064 std::cerr << "Model \'" << filePaths[a] << "\' loaded.\n";
00065 }
00066
00067 std::cerr << "...reading syntactic language model files completed\n";
00068
00069
00070 }
00071
00072
00073 template <class MH, class MO>
00074 SyntacticLanguageModelFiles<MH,MO>::~SyntacticLanguageModelFiles()
00075 {
00076
00077 VERBOSE(3,"Destructing syntactic language model files" << std::endl);
00078 delete hiddenModel;
00079 delete observedModel;
00080
00081 }
00082
00083
00084 template <class MH, class MO>
00085 MH* SyntacticLanguageModelFiles<MH,MO>::getHiddenModel()
00086 {
00087
00088 return this->hiddenModel;
00089
00090 }
00091
00092 template <class MH, class MO>
00093 MO* SyntacticLanguageModelFiles<MH,MO>::getObservedModel()
00094 {
00095
00096 return this->observedModel;
00097
00098 }
00099
00100
00101 }
00102
00103 #endif