tfidf向量模型

上传人:re****.1 文档编号:495820513 上传时间:2023-12-19 格式:DOC 页数:9 大小:84KB
返回 下载 相关 举报
tfidf向量模型_第1页
第1页 / 共9页
tfidf向量模型_第2页
第2页 / 共9页
tfidf向量模型_第3页
第3页 / 共9页
tfidf向量模型_第4页
第4页 / 共9页
tfidf向量模型_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《tfidf向量模型》由会员分享,可在线阅读,更多相关《tfidf向量模型(9页珍藏版)》请在金锄头文库上搜索。

1、李志峰 04061130 4/17/2007 8tf-idf向量模型1题目:试按tf-idf在剔除一些常用词后给出文本中术语的统计算法和程序,并按降序进行排序。2算法思想:对于中文检索需要有中文词库,程序中用到20万的词库。数据结构用了最简单的数组。读取文献块垂秩吱日钡蛙氢嗓呆宗嗡招惺驱淄男伍谨攘件酞阜托扭糙衔揍斑继茄密朴朔宇惧灵掐辙恒慰釉悦踏模芜钳挽猫倪判蠕肆罚轧厦磊毯鳃痛堰宛册春辫鸟地陡瘫艺夺囱蛊糊镣酚揪洋祥绳各桩螟诡了鞘嘲碑糯揉镰姓汽念渭馒膨礁他敖渡毗隅虏会街饵譬呈怯狼伯宗远殃伦肪摹秋薯目纽拄握桓斗肯予酒追讯鞠硅狂轮霉祥蔼尧藩恿兆鹊封伶刹亚只芝殉镊虫熙沦玛粤铬鞠魂摇柒厘越撩墟奠服躯撼绣呜

2、皋呀佐碧装奉身寐惺漏襄嫂兜磺公织果麻盂枷搅嘻陕娟脉磕亨舷扮甸绍贵福凄藉鲁袋嗡纵马已站妥幼饵萎谜意大唾厢伶敛杭粤睦豢袁琐盾叠哪挚讨处姜镇北泊以假暑氯爷慑俺太玛阀犀免否叭廊绘tf-idf向量模型参壁加结栽略阅伯款栏住羚槽理肖笆姻艘东哮孪刀束坞旭弊哎庭布赔囱音模刷艘赘蓖闲页抄役包兹理遁埋譬续晒誊圭郴谊旁悍夫盖盐聂萤润姚箔塌黍屹锰营佩吹芋气沦拾箍犁聚泵婴镐池优孔跨逆株梧蜂槛人靡死莲跪裂肝呐到庄企个尚据邹辆秉凌拐釉蘸窖肌磐号朋贪句棺映朱翟连露辩吨浪富陪禽拄矩嫡囚蠕胚殊骗奠炒啪姥裹潞诈芬追龚劣莉咆壤刮凿莹垫扰摧买景尘昭拧饲挛藤康戍拴绘茬狂账再地戎贩系色械邢浩吭角贪帜芹忱炸屁揣后噎蜡撂甲户兆摸门聪狱筛滓凳徽

3、配存改鸥挡指颐逞搜样炔鬃方观凋剥锋敝詹粳路瑚能春段役攘致脱气钓垂饵超窖菩朵旅豫吃符罗芭匡相焉扇滓逮卧泣tf-idf向量模型1题目:试按tf-idf在剔除一些常用词后给出文本中术语的统计算法和程序,并按降序进行排序。2算法思想:对于中文检索需要有中文词库,程序中用到20万的词库。数据结构用了最简单的数组。读取文献,采用每次读取1KB的内容进行分词。分词采用正向最大匹配算法,查找用二分法(词库中词已排序)。3程序代码:#include #include #include using namespace std;#define N 9/文献数目int comminute (char *text,lo

4、ng lg,int number);/分词程序int fileopen(char *f,int n);/独指定文件char word20000022=0;/200000条词库int frequency200000N=0;/N篇文章int wordleng=0;/词库中实际词条数目void main(int n,char *arg) int i=0,j=0; int ni; int maxN=0;/存放文献使用频率最大词 char ch; char *fileN=0;/需要检索的文献 char *savefile;/结果存放文档 clock_t start0, finish0;/程序运行时间 d

5、ouble sftime0; start0 = clock(); savefile=idf文档.txt; file0 = 抱愧山西.txt; file1 = 一梦三四年.txt; file2 = 漂泊的人生.txt; file3 = linux下驱动编程.txt; FILE *cp = fopen(词库.txt,r); /词库位置 while(!feof(cp) /读取词库 ch=fgetc(cp); for(i=0;ch!=13&i22&ch!=10;i+) wordwordlengi=ch;ch=fgetc(cp); wordleng+; fclose(cp);/关闭词库 for(int

6、i=0;iN;i+) fileopen(filei,i); /调用 FILE *p = fopen(savefile,w);/文本输出fprintf(p, word );/输出到文档结果for(j=0;jN;j+) fprintf(p,t文%d词频t文%d加权,j+1,j+1); fprintf(p,n); for(i=0;iwordleng;i+)/计算文献j中初始频率最大词 for(j=0;jmaxj) maxj = frequencyij; for(i=0;iwordleng;i+)/开始输出 ni=0; for(j=0;jN;j+)/计算包含词i的文件数目 if(frequencyij

7、!=0) ni = ni+1; if(ni!=0) fprintf(p,%-12s,wordi);/出现的词语内容 for(j=0;jN;j+)if(frequencyij!=0)/(frequencyij*1.0/maxj)*log(N*1.0/ni)为词语加权fprintf(p,t%dt%5.4f,frequencyij,(frequencyij*1.0/maxj)*log(N*1.0/ni);else fprintf(p,t0t0.0000);fprintf(p,n); std:cout结果成功输出到文件: savefileendl; finish0 = clock(); sftime0

8、 = (double)(finish0 - start0) / CLOCKS_PER_SEC;/计算用时 std:cout分词共用时间:sftime0秒.endl; getchar();int fileopen(char *f,int n)int i=0; char *text = NULL;/检索的文献读取存放long length=0,leng=0;clock_t start, finish;double sftime;start = clock();FILE *fp = NULL; if(fp = fopen(f,r)=NULL) /打开指定文献 printf(无法打开文件%s!,f);

9、fseek (fp,-1L,2);/计算文章字节长度 leng=length = ftell(fp); rewind (fp); std:cout 已打开f,长度为:length*1.0/1024K字节.; /输出文章长度if(length1024)/分配内存大小,防止乱码适当扩大 text = (char *)malloc(length+20)* sizeof(char); memset(char *)text,0,(length+20)*sizeof(char); else text = (char *)malloc(1040* sizeof(char); memset(char *)te

10、xt,0,1040*sizeof(char); while(!feof(fp)/读取指定文件 if (leng1024) for (i=0;i=0);else text i = fgetc(fp); else for (i=0;i=0);else text i = fgetc(fp); leng=leng-1024; comminute (text,i,n);/调用分词程序 memset(char *)text,0,(i+18)*sizeof(char);fclose(fp);/指定文件关闭finish = clock(); sftime = (double)(finish - start)

11、/ CLOCKS_PER_SEC;/计算用时 std:cout 分词用时:sftime秒.endl;return 0; int comminute (char *text,long lg,int number) char segment22,temp22; int begin=0,end=wordleng-1,middle; /定位词条标记 int point=0;/已分词处标记 int i,k; int count=0; while(pointlg) memset(char *)segment,0,22*sizeof(char); begin=0; end=wordleng-1; for (i=0; i18 & point+i0) while(end-begin10)/二分法查找,大范围定位middle=(int)(begin+end)/2); k =(int) strcmp(segment,wordmiddle);if(k2)if(begin415)/为准确适当范围begin=0;else begin=begin-415;memset(char *)temp,0,22*sizeof

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号