64,281
社区成员
发帖
与我相关
我的任务
分享
class SuffTree {
private:
struct SuffTreeNode {
int _SuffLexCount;
map<int, int> _SuffPosCount;
map<int, double> _SuffPosProb;
};
Trie<SuffTreeNode> _SuffLexPosCount;
static Trie<SuffTreeNode> _nullVal;
void AddSuff(string &word, PosFreqMap &PosFreq, Trie<SuffTreeNode>::TrieNode * CurrentPtr);
22: void ComputeProbNode(Trie<SuffTreeNode>::TrieNode * CurrentPtr, map<int, double> &tagprobs, double theta);
23: void WriteTreeNode(Trie<SuffTreeNode>::TrieNode *CurrentPtr, ofstream &output, vector<string> *ptrPosStrVec, string &str);
void InverseProbNode(Trie<SuffTreeNode>::TrieNode * CurrentPtr, UnigramFreqMap &unigrams);
public:
SuffTree(): _SuffLexPosCount(SuffTreeNode()) {}
void AddWord(string &word, PosFreqMap &PosFreq);
void ComputeProb(double theta, UnigramFreqMap &unigrams) {
29: ComputeProbNode(_SuffLexPosCount.GetTrieHead(), map<int, double>(), theta);
InverseProbNode(_SuffLexPosCount.GetTrieHead(), unigrams);
}
void WriteTree(ofstream &output, vector<string> *ptrPosStrVec){
33: WriteTreeNode(_SuffLexPosCount.GetTrieHead(), output, ptrPosStrVec, string());
}
};
void ComputeProbNode(Trie<SuffTreeNode>::TrieNode * CurrentPtr, map<int, double> &tagprobs, double theta);
29: ComputeProbNode(_SuffLexPosCount.GetTrieHead(), map<int, double>(), theta);
void ComputeProb(double theta, UnigramFreqMap &unigrams)
{
map<int, double> a_non_temporary_map;
ComputeProbNode(_SuffLexPosCount.GetTrieHead(), a_non_temporary_map, theta);
InverseProbNode(_SuffLexPosCount.GetTrieHead(), unigrams);
}