Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

PPMLanguageModel.h

Go to the documentation of this file.
00001 // PPMLanguageModel.h
00002 //
00004 //
00005 // Copyright (c) 1999-2002 David Ward
00006 //
00008 
00009 #ifndef __PPMLanguageModel_h__
00010 #define __PPMLanguageModel_h__
00011 
00012 #include "NoClones.h"
00013 #include "MSVC_Unannoy.h"
00014 #include <vector>
00015 #include <stdio.h>
00016 
00017 #include "LanguageModel.h"
00018 
00019 // static char dumpTrieStr[40000];
00020 const int MAX_ORDER = 5;
00021 const int maxcont =200;
00022 
00023 namespace Dasher {class CPPMLanguageModel;}
00024 class Dasher::CPPMLanguageModel : public Dasher::CLanguageModel, private NoClones
00025 {
00026 public:
00027         CPPMLanguageModel(CAlphabet *_alphabet, int _normalization);
00028         virtual ~CPPMLanguageModel();
00029         
00030         class CPPMnode {
00031         public:
00032                 CPPMnode* find_symbol(int sym);
00033                 CPPMnode* add_symbol_to_node(int sym,int *update);
00034                 CPPMnode* child;
00035                 CPPMnode* next;
00036                 CPPMnode* vine;
00037                 short int count;
00038                 const short int symbol;
00039                 CPPMnode(int sym);
00040         };
00041         
00042         class CPPMContext : public CContext {
00043         public:
00044                 CPPMContext(CPPMContext const &input) : CContext(input)
00045                   { head = input.head;order= input.order;}
00046                 CPPMContext(CPPMnode* _head=0, int _order=0) : head(_head),order(_order) {};
00047                 ~CPPMContext() {};
00048                 void dump();
00049                 CPPMnode* head;
00050                 int order;
00051         };
00052         
00053         void ReleaseContext(CContext*);
00054         CContext* GetRootContext();
00055         inline CContext* CloneContext(CContext*);
00056         void EnterSymbol(CContext* context, modelchar Symbol);
00057         //inline bool GetProbs(CContext*,std::vector<symbol> &newchars,std::vector<unsigned int> &groups,std::vector<unsigned int> &probs,double addprob);
00058         bool GetProbs(CContext*, std::vector<unsigned int> &Probs, double AddProb);
00059         
00060         void LearnSymbol(CContext* Context, modelchar Symbol);
00061         void dump();
00062         
00063 private:
00064         CPPMContext *m_rootcontext;
00065         CPPMnode *root;
00066         void AddSymbol(CPPMContext& context,int symbol);
00067         void dumpSymbol(int symbol);
00068         void dumpString( char *str, int pos, int len );
00069         void dumpTrie( CPPMnode *t, int d );
00070 
00071 
00072 
00073 };
00074 
00076 // Inline functions 
00078 
00080 
00081 inline CPPMLanguageModel::CPPMnode::CPPMnode(int sym) : symbol(sym)
00082 {
00083         child=next=vine=0;
00084         count=1;
00085 }
00086 
00088 
00089 inline void CPPMLanguageModel::CPPMContext::dump() 
00090         // diagnostic output
00091 {
00092         // TODO uncomment this when headers sorted out
00093         //dchar debug[128];
00094         //Usprintf(debug,TEXT("head %x order %d\n"),head,order);
00095         //DebugOutput(debug);
00096 }
00097 
00099 
00100 inline CContext* CPPMLanguageModel::GetRootContext()
00101 {
00102         CPPMContext * nc = new CPPMLanguageModel::CPPMContext(*m_rootcontext);
00103         CContext *cont=static_cast<CContext *> (nc);
00104         return  cont;
00105 }
00106 
00108 
00109 inline CContext* CPPMLanguageModel::CloneContext(CContext *copythis)
00110 {
00111         CPPMContext *ppmcontext=static_cast<CPPMContext *> (copythis);
00112         CPPMContext * nc = new CPPMLanguageModel::CPPMContext(*ppmcontext);
00113         return  static_cast<CContext *> (nc);
00114 }
00115 
00117 
00118 inline void CPPMLanguageModel::ReleaseContext(CContext *release)
00119 {
00120         delete release;
00121 }
00122 
00123 #endif /* #ifndef __PPMLanguageModel_H__ */

Generated on Sat Nov 5 16:16:00 2005 for OPIE by  doxygen 1.4.2