CREATE TABLE doc_info[0](rec_type, group_id, doc_id, word_id, topic_id, count_num, probability) AS FOR EACH d IN docs WITH newprobs AS Dirichlet ( (SELECT topic_id, prior.topic_prior FROM topics, prior ) ) SELECT 2 AS rec_type, d.group_id, d.doc_id, -1 AS word_id, n.out_id, -1 AS count_num, n.probability FROM newprobs AS n; CREATE TABLE word_prob_in_topic[0] (topic_id, word_id, probability) AS FOR EACH t IN topics WITH newprobs AS Dirichlet ( (SELECT ww.word_id, wp.word_prior FROM words ww, prior wp) ) SELECT t.topic_id, n.out_id, n.probability FROM newprobs n; CREATE TABLE doc_info[i] (rec_type, group_id, doc_id, word_id, topic_id, count_num, probability) AS FOR EACH g IN groups WITH res AS Multi_Dir_DocWordTopic ( (SELECT pair(di.doc_id, di.topic_id), di.probability FROM doc_info[i-1] di WHERE di.group_id = g.group_id and di.rec_type = 2), (SELECT pair(wp.topic_id, wp.word_id), wp.probability FROM word_prob_in_topic[i-1] wp), (SELECT pair(dw.doc_id, dw.word_id), dw.count_num FROM word_in_doc dw WHERE dw.group_id = g.group_id), (SELECT prior.topic_prior FROM prior) ) SELECT res.out_rec_type, g.group_id, res.out_doc_id, res.out_word_id, res.out_topic_id, res.out_count, res.out_topic_prob FROM res; CREATE TABLE word_prob_in_topic[i] (topic_id, word_id, probability) AS FOR EACH t IN topics WITH newprobs AS Dirichlet_Conjugate ( (SELECT ww.word_id, wp.word_prior FROM words ww, prior wp), (SELECT di.word_id, SUM(count_num) FROM doc_info[i] di WHERE di.topic_id = t.topic_id AND di.rec_type = 1 GROUP BY di.word_id) ) SELECT t.topic_id, n.out_id, n.probability FROM newprobs n;