?? recommendation.c
字號:
/** * recommendation.c CGI program for outputing recommendations * by zhiyong, louisville, Dec..10 * $Id: Exp $ **/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.h>#include "recdef.h"#include "session.h"#include "content_rec.h"#include "collaborative.h"#include "markov.h"static char *cookie_name = "WebMiningProxy";static char markov_two_gdbm[256] = "/home/zhiyong/software/apache2/cgi-bin/markov_two.gdbm";static char markov_three_gdbm[256] = "/home/zhiyong/software/apache2/cgi-bin/markov_three.gdbm";static char site_root[256] = "http://webmining.spd.louisville.edu:8090";static char libr_root[256] = "http://library.louisville.edu";int main(){ int i,iRet; char* Cookie_ID = NULL; char sessionID[256] = {0}; char* ptr = NULL; char* pptr = NULL; SESSION_LINKS session; REC_LINKS rec_cf, rec_mk; char buf[20481]; int linkNum; int recNum1, recNum2; char curLink[256]; char *q = NULL; char query[256]; printf("Content-type: text/html\n\n"); bzero(sessionID, sizeof(sessionID)); bzero(&session, sizeof(SESSION_LINKS)); bzero(&rec_cf, sizeof(REC_LINKS)); bzero(&rec_mk, sizeof(REC_LINKS)); q = getenv("QUERY_STRING"); if(q == NULL || strchr(q, '=') == NULL) { //browsing mode Cookie_ID = getenv("HTTP_COOKIE"); //printf("<H3>Your Cookie ID:%s</H3>", Cookie_ID); if(Cookie_ID != NULL) { ptr = strstr(Cookie_ID, cookie_name); if(ptr != NULL) { if(strlen(ptr) >=256) { fprintf(stderr, "session ID length too long\n"); } else { strcpy(sessionID, ptr+strlen(cookie_name)+1); pptr = strchr(sessionID, ';'); if(pptr != NULL) *pptr = '\0'; } } } else //new user { printf("<H3>Welcome New User (%s)</H3>", Cookie_ID); return 0; } linkNum = getSessionUrlsFromGdbm(sessionID, &session); if(linkNum < 0) { fprintf(stderr, "getSessionUrlsFromGdbm failed\n"); return -1; } else if(linkNum == 0) { printf("<H3>Welcome New User (%s:%s)</H3>", Cookie_ID, sessionID); return 0; } } else {//testing mode plust query ptr = strchr(q, '='); if(ptr != NULL) pptr = ptr+1; if(pptr != NULL) { strncpy(query, pptr, 256); query[255] = '\0'; } else { printf("<H3>Decoding session failed</H3>"); return 0; } ptr = strchr(query, '+'); if(ptr != NULL && ptr+1 != NULL) { *ptr = '\0'; strcpy(session.urls[0].url, query); strcpy(session.urls[1].url, ptr+1); session.num = 2; } else { strcpy(session.urls[0].url, query); session.num = 1; } linkNum = session.num; } printf("<H3>Your visit history(%d):</H3>", session.num); for(i=0;i<linkNum;i++) { printf("<LI><a href=%s>%s</a></LI>", session.urls[i].url, session.urls[i].url); } //collaborative filtering results recNum1 = getCollaborativeFilteringRecs(session, &rec_cf); if(recNum1 < 0) { fprintf(stderr, "getCollaborativeFilteringRecs failed\n"); return -1; } //printf("<H3>Profile-based Collaborative Filtering Recommendations(%d)<a href=http://webmining.spd.louisville.edu:8090/profile.txt>[reference profiles]</a></H3>", recNum1); for(i=0;i<recNum1;i++) { strcpy(curLink, rec_cf.urls[i].url); myStrToLower((unsigned char*)rec_cf.urls[i].url); myStrToLower((unsigned char*)curLink); printf("<LI><a href=%s%s>%s</a>(%.0f)</LI>", libr_root, curLink, curLink, rec_cf.urls[i].wt); if(i >=MAX_RECS_SHOW/2-1) break; } //printf("<H3>KNN-based Collaborative Filtering Recommendations </H3>"); printf("<p>Under Construction</p>"); //Markov model based recommendation recNum2 = getMarkovRecs(session, &rec_mk); if(recNum2 < 0) { fprintf(stderr, "getMarkovRecs failed one\n"); return -1; } if(recNum2 > 0) { printf("<H3>Markov-based Recommendations(%d)</H3>", recNum2); } else { printf("<H3>That's Strange No Markov Based Recommendations</H3>"); } printf("<!--Markov_Begin-->"); for(i=0;i<recNum2;i++) { strcpy(curLink, rec_mk.urls[i].url); printf("<LI><a href=%s>%s</a>(%.2f)</LI>", curLink, curLink, rec_mk.urls[i].wt); if(i >=MAX_RECS_SHOW/2-1) break; } printf("<!--Markov_End-->"); //modify input parameter in tandem feed collaborative filtering output to content input. /*for(i=0;i<rec_cf.num;i++) { strcpy(session.urls[i].url,libr_root); strcat(session.urls[i].url, rec_cf.urls[i].url); } if(rec_cf.num > 0) session.num = rec_cf.num;*/ //modify input parameter in tandem feed markov out to content input. for(i=0;i<rec_mk.num&&i<2;i++) { if(rec_mk.num < 2) strcpy(session.urls[0].url, rec_mk.urls[0].url); else strcpy(session.urls[1-i].url, rec_mk.urls[i].url); } if(rec_mk.num > 0) session.num = i; //anchor text based results bzero(buf, sizeof(buf)); iRet = getAnchorBasedRecs(session, buf); if(iRet < 0) { fprintf(stderr, "getAnchorBasedRecs failed\n"); return -1; } if(iRet == 0) { printf("<H3>That's Strange No Anchor Text Based Recommendations</H3>"); } else { printf("<H3>Anchor Text-based Recommendations</H3>"); } printf("<!--Anchor_Begin-->"); printf("%s", buf); printf("<!-Anchor_End-->"); //content based results bzero(buf, sizeof(buf)); iRet = getContentBasedRecs(session, buf); if(iRet < 0) { fprintf(stderr, "getContentBasedRecs failed\n"); return -1; } printf("<H3>Content-based Recommendations</H3>"); printf("<!--Content_Begin-->"); printf("%s", buf); printf("<!--Content_End-->"); return 0; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -