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

📄 hash.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/*** Copyright (C) 1995, Enterprise Integration Technologies Corp.        ** All Rights Reserved.** Kevin Hughes, kevinh@eit.com ** 3/11/94**** Added addStopList to support printing of common words** G. Hill 4/7/97  ghill@library.berkeley.edu*/#include "swish.h"#include "hash.h"#include "string.h"#include "mem.h"/* Hashes a string.*/unsigned hash(s)     char *s;{        unsigned hashval;        for (hashval = 0; *s != '\0'; s++)                hashval = *s + 31 * hashval;        return hashval % HASHSIZE;}/* Hashes a string for a larger hash table.*/unsigned bighash(s)     char *s;{        unsigned hashval;        for (hashval = 0; *s != '\0'; s++)                hashval = *s + 31 * hashval;        return hashval % BIGHASHSIZE;}/* Reads the internal list of default stopwords.*/void readdefaultstopwords(){        int i;        for (i = 0; defaultstopwords[i] != NULL; i++)                addstophash(defaultstopwords[i]);}/* Adds a stop word to the list of removed common words*/void addStopList(word)     char * word;{  char* arrayWord;    if (isstopword(word) )    return;    arrayWord = (char *) mystrdup (word);  stopList[stopPos++] = arrayWord;}/* Adds a stop word to a hash table.*/void addstophash(word)     char *word;{        unsigned hashval;        struct swline *sp;	if (isstopword(word))		return;        sp = (struct swline *) emalloc(sizeof(struct swline));        sp->line = (char *) mystrdup(word);        hashval = hash(word);        sp->next = hashstoplist[hashval];        hashstoplist[hashval] = sp;}/* Sees if a word is a stop word by looking it up in the hash table.*/int isstopword(word)     char *word;{        unsigned hashval;        struct swline *sp;        hashval = hash(word);        sp = hashstoplist[hashval];        while (sp != NULL) {                if (!strcmp(sp->line, word))                        return 1;                sp = sp->next;        }        return 0;}/* Adds a file number and its associated file location** to a hash table.*/void addtofilehashlist(fileshort, filelong)     int fileshort;     long filelong;{        unsigned hashval;        struct filenum *fp;        char tmpstr[MAXSTRLEN];        fp = (struct filenum *) emalloc(sizeof(struct filenum));        fp->fileshort = fileshort;        fp->filelong = filelong;        sprintf(tmpstr, "%d", fileshort);        hashval = bighash(tmpstr);        fp->next = filehashlist[hashval];        filehashlist[hashval] = fp;}/* Looks up a file number in the hash table and** returns the file position of the associated file info.*/long getfilenum(filenum)     int filenum;{        unsigned hashval;        struct filenum *fp;        char tmpstr[MAXSTRLEN];        sprintf(tmpstr, "%d", filenum);        hashval = bighash(tmpstr);        fp = filehashlist[hashval];        while (fp != NULL) {                if (fp->fileshort == filenum)                        return fp->filelong;                fp = fp->next;        }        return 0;}/* Adds a file number and the number of indexed words** to a hash table.*/void addtofwordtotals(filenum, ftotalwords)     int filenum;     int ftotalwords;{        unsigned hashval;        struct fwordtotal *fp;        char tmpstr[MAXSTRLEN];        fp = (struct fwordtotal *) emalloc(sizeof(struct fwordtotal));        fp->filenum = filenum;        fp->totalwords = ftotalwords;        fp->next = NULL;        sprintf(tmpstr, "%d", filenum);        hashval = bighash(tmpstr);        fp->next = fwordtotals[hashval];        fwordtotals[hashval] = fp;}/* Looks up a file number in the hash table and** returns the total number of words indexed in it.*/int gettotalwords(filenum)     int filenum;{        unsigned hashval;        struct fwordtotal *fp;        char tmpstr[MAXSTRLEN];        sprintf(tmpstr, "%d", filenum);        hashval = bighash(tmpstr);        fp = fwordtotals[hashval];        while (fp != NULL) {                if (fp->filenum == filenum)                        return fp->totalwords;                fp = fp->next;        }        return 0;}/* Adds a file number to a hash table of results.** If the entry's alrady there, add the ranks,** else make a new entry.*/void mergeresulthashlist(filenum, rank)     int filenum;     int rank;{        unsigned hashval;        struct result *rp, *newrp;        char word[MAXWORDLEN];        sprintf(word, "%d", filenum);	hashval = hash(word);	rp = resulthashlist[hashval];	while (rp != NULL) {		if (rp->filenum == filenum) {			rp->rank += rank;			return;		}		rp = rp->next;	}	        newrp = (struct result *) emalloc(sizeof(struct result));        newrp->filenum = filenum;        newrp->rank = rank;        newrp->next = resulthashlist[hashval];        resulthashlist[hashval] = newrp;}/* Initializes the result hash list.*/void initresulthashlist(){	int i;	for (i = 0; i < HASHSIZE; i++)		resulthashlist[i] = NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -