⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recommendation.c

📁 C编写的用来实现search engine的推荐功能
💻 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 + -