00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028
00029 #ifndef _TAGGER
00030 #define _TAGGER
00031
00032 #include <map>
00033 #include <list>
00034 #include <set>
00035
00036 #include "language.h"
00037 #include "tagger.h"
00038
00039 using namespace std;
00040
00051
00052 class viterbi {
00053 public:
00055 viterbi(int);
00057 ~viterbi();
00058
00060 map <string, double> *delta_log;
00062 map <string, string> *phi;
00063 };
00064
00065
00073
00074 class emission_states: public set<string> {};
00075
00076
00083
00084 class hmm_tagger: public POS_tagger {
00085 private:
00086
00087 string Language;
00088
00090 map <string, double> PTag;
00091 map <string, double> PBg;
00092 map <string, double> PTrg;
00093 map <string, double> PInitial;
00094 map <string, double> PWord;
00095
00097 double c[3];
00098
00099 double ProbA_log(const string &, const string &) const;
00100 double ProbB_log(const string &, const word &) const;
00101 double ProbPi_log(const string &) const;
00102
00104 list<emission_states> FindStates(const sentence &) const;
00105
00106 public:
00108 hmm_tagger(const string &, const string &, bool);
00109
00111 void analyze(list<sentence> &);
00113 list<sentence> analyze(const list<sentence> &);
00114 };
00115
00116 #endif
00117