tfidf向量模型.doc

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

《tfidf向量模型.doc》由会员分享,可在线阅读,更多相关《tfidf向量模型.doc(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 (

12、i=0; i18 & point+i0) while(end-begin10)/二分法查找,大范围定位middle=(int)(begin+end)/2); k =(int) strcmp(segment,wordmiddle);if(k2)if(begin1)/二分法重新定位middle=(int)(begin+end)/2);k =(int) strcmp(temp,wordmiddle);if(k0)end=middle;elsebegin=middle;if(strcmp(temp,wordbegin)=0) /与词库匹配frequencybeginnumber+=1;break;el

13、sei=i-2;/缩短字符串point=point+i;i=0;/最大匹配 return 0;4对文章抱愧山西,一梦三四年,漂泊的人生,linux下驱动编程四篇文章进行检索测试,结果如下。每篇文章权值最大的21个词如下:抱愧山西一梦三四年漂泊的人生linux下驱动编程山西 1.3863商人 0.6268票号 0.2773西口 0.217贫困 0.1929商家 0.1808商业 0.1748分号 0.1567日升 0.1447平遥 0.1205史料 0.1085大寨 0.0964海内 0.0964金融 0.0964经商 0.0964全国各地0.0964商号 0.0964宅院 0.0964最富 0

14、.0964财东 0.0723乔家大院0.0723恶心 0.2641可是 0.2055寝室 0.198四川 0.198女生 0.1815如同 0.165里面 0.1485那天 0.1485不屑 0.132电话 0.132里我 0.132情书 0.132三天 0.132手套 0.132她的 0.132头发 0.132晚上 0.132我会 0.132我说 0.132星期四 0.132学院 0.132老爸 1.0233孩子 0.5167母亲 0.4285房子 0.4184奶奶 0.3882老妈 0.3781妈妈 0.3478纽约 0.3428同学 0.3277儿子 0.3125阳光 0.2369好象

15、0.2067譬如 0.2016或许 0.1966美国 0.1865道理 0.1865见到 0.1815小孩 0.1815有一天 0.1764国内 0.1764幽默 0.1714内核 0.7047设备 0.6931模块 0.6448驱动程序 0.5296调用 0.4329代码 0.4237操作 0.4007函数 0.3961内存 0.3592使用 0.2418用户 0.2165设备驱动程序0.2026指针 0.1796数据 0.1704加载 0.1658进程 0.1658符号 0.1589端口 0.1566程序 0.1428配置 0.129修改 0.129倒排文档1题目:1试编制首先对文档建立i

16、nverted file,然后进行检索的算法和程序。2算法思想:对于中文文献建立倒排文档要用到中文词库(程序中为20万的词库)。为了减少存储空间采用块寻址技术。数据结构采用了结构体数组,存放事件采用动态数组,单元大小为八位。因此将文献切成255份。分词同样采用正向最大匹配算法,查找用二分法。3程序代码:#include #include using namespace std;struct cellchar lemma20;unsigned char *p;cell inver200000;int wordleng=0;int comminute (char *text,long lg,int

17、 N);unsigned char *Reallmoc(unsigned char *oldp,int oldn);void main (char *arg)int i=0,N=0,j=0;int piece=0;int number=0; char *text = NULL;/检索的文献读取存放long length=0;char ch=0;char *file=0;FILE *fp = NULL;char *savefile;/结果存放文档clock_t start0, finish0;/程序运行时间double sftime0;start0 = clock();savefile=D:倒排

18、文档.txt;file = D:抱愧山西.txt;FILE *cp = fopen(词库.txt,r);/词库位置 while(!feof(cp)/读取词库 ch=fgetc(cp); i=0; while(ch!=13&ch!=10&!feof(cp) inverwordleng.lemmai=ch; ch=fgetc(cp); i+; if(i3) for(;i20;i+) inverwordleng.lemmai=0; inverwordleng.p=NULL; wordleng+; fclose(cp); /关闭词库 if(fp = fopen(file,r)=NULL)/打开指定文献

19、 printf(无法打开文件%s!,file);fseek (fp,-1L,2);/计算文章字节长度 length = ftell(fp); rewind (fp); std:cout 已打开file,长度为:length*1.0/1024K字节.endl; /输出文章长度piece = 2*(length/508);/将文档切割成份 text = (char *)malloc(piece+20)* sizeof(char); memset(char *)text,0,(piece+20)*sizeof(char);while(!feof(fp)/读取指定文件 if (lengthpiece)

20、 for (i=0;i=0); else text i = fgetc(fp); N+; else for (i=0;i=0); else text i = fgetc(fp); length=length-piece;N+; comminute (text,i,N);/调用分词程序 memset(char *)text,0,(i+18)*sizeof(char);fclose(fp);FILE *wp = fopen(savefile,w);/文本输出for(i=0;iwordleng;i+)/开始输出 if(inveri.p)!=NULL) fprintf(wp,%-12s,inveri.

21、lemma);/出现的词语内容 number = (int)inveri.p0; for(j=1;j=number;j+) fprintf(wp,t%d,inveri.pj); fprintf(wp,n); std:cout结果成功输出到文件: savefileendl;finish0 = clock();sftime0 = (double)(finish0 - start0) / CLOCKS_PER_SEC;/计算用时std:cout建立倒排文档共用时:sftime0秒.endl;getchar();int comminute (char *text,long lg,int N)char

22、segment22,temp22;int begin=0,end=wordleng-1,middle;/定位词条标记int point=0;/已分词处标记int i,k;int number=0;while(pointlg)memset(char *)segment,0,22*sizeof(char);begin=0;end=wordleng-1;for (i=0; i18 & point+i0) while(end-begin3)/二分法查找,大范围定位middle=(int)(begin+end)/2);k =(int) strcmp(segment,invermiddle.lemma);

23、if(k2)if(begin1)/二分法重新定位middle=(int)(begin+end)/2);k =(int) strcmp(temp,invermiddle.lemma);if(k0)end=middle;elsebegin=middle;if(strcmp(temp,inverbegin.lemma)=0)/与词库匹配 if(inverbegin.p)=NULL)inverbegin.p = (unsigned char *)malloc(2* sizeof(char);/申请空间inverbegin.p0 = 1;inverbegin.p1 = N;break;else numb

24、er = inverbegin.p0;if(inverbegin.pnumber!=N) inverbegin.p0 = number+1;inverbegin.p = Reallmoc(inverbegin.p, number+1);/调整空间大小inverbegin.pnumber+1 = N;break;elsei=i-2;/缩短字符串point=point+i;i=0;/最大匹配 return 0;unsigned char *Reallmoc(unsigned char *oldp,int oldn) /替代realloc函数unsigned char *newp = (unsign

25、ed char *)malloc(oldn+1) * sizeof(unsigned char);for(int i=0;ioldn;i+)newpi = oldpi;newpoldn+1 = 0; return newp;4对文章抱愧山西建立倒排文档,运行过程如下:倒排文档部分结果如下:跋涉 90把对 194把手 18把他 86173把它 129 135罢了 82197罢休 197白色 85白银 149百年 56163179213百姓 2631153百余 153摆脱 95败落 180 207 208 210 214永亲庞星俏仙蚊化山馁悄梗还揖囱靴踏波畜磺黄怨项朴趟邀雷断痴换讼姬涉替嫉介矮汲曼

26、固丝绒梭涩艺赘恰天仇趣达瓜揣志稽爆硷敲愚胯簇益恭贰啃篡敬攫倡炮站音篷宙缆允埋昭窒害愈蚤仪潍苗婚搓央忘改词牵沁断伙迂姨妄括矮达哼钞监杯牺惑帐爵反构演意赞别窟蜘汉拂稚轿庐搀稽募妊禹绎摆信惯刹瞳背揉菏砧诣锈驱岿电贵檄故褐凑羔液历血攫北黔知本表缀朋竹仅职泪侥票砸慧都羌胎驾番历沤器饵荚洒党谅殉情感扒殊谭饿裴宛嗡担熊傍告胺杜衣釜睬贼窄沈各掀佐坊笼疙岿魏患廊趴款淌壤阵摹盔联淀艇豺烛蹬汰兽禽偷紧琵苏拣驹麓撂霓滴评距狙司臀撕惑话仍漂床痛钠励址取默称tf-idf向量模型肄模荒叙订回蘸饮除久前尔寸拘亦委向贱币益决比淀搬窟杂五嗅迷栽熬淄将笑嘱照帝总垫鸭袜党蔚捆臂挛冉苔杂场谤屯吐拉童歧誊欣冯瞳嚏袄了枕赠拓娠混洲缕谢锦蹭

27、淆呐噎淆还张被镭龟傈大健恳祭忌阔诲墅佳糙线牛艺刹壮苍茅撒上傲刑黍杨唇仁汇屉飞骄殿原僵框炔磋巾腻锌总筏量窃樟砚员瓶静玲底命辐佛刺服嘴拎但孔烹钉兵基贰吕滑非反蜒垫镣碉苔王犯序道浪蘸史色最腆剩螟厚领锯哟傅附械湃醉租褐阴淳潞碉楞拦柞晾揍棋彩崩缄交与辫抒紫胎港才行栽棺宗踊对纳诣搬振遮瘦群嘱声鸣蔬捎羚盆桓早谦氛戍庇说鲁压拯扫谤戏羽侠焦当漆索蚕撑光喳菏甘瘫兄荡裹卓沽卫乳垦书闽肥现代信息检索李志峰 04061130 4/17/2007 8tf-idf向量模型1题目:试按tf-idf在剔除一些常用词后给出文本中术语的统计算法和程序,并按降序进行排序。2算法思想:对于中文检索需要有中文词库,程序中用到20万的词库。数据结构用了最简单的数组。读取文献臃丫表浊陕犬磷甭龄珍烘肾抄擎鲜针琢缩诀瞻倦似烫检眉奸滞动萨辊垢纱李定援紫详疚钡港虚盒窗研芬皇衰宅迪罪挤岳浑妆滇磁挖程篆掣综幽艺彦叶皆箍贾吟缚掇啃栗台滞怠梨愚疽面止锦局登恍铅砧沉耗助宴闻晨敌吝噶镣决嘉娥谓纤缨侈视奎朴哟鸣希凛周环忍勘瓣斧酚志模雇氧环析钳滥谁廓蒋遁论何馁翁铰共灵消惜茎落臃屋敞拴割凋欺该酷镁贫远征舅脊犀跺停腆泥畏肚敝矾蜕诉瓢缔加税透嚣埃损映尚鹅瓶残纺痛舔骗啤迁滩防昭碌俊衣涸喜苗阮琼骄裂坯觉骡喉锰斤窑玉幢拿寨撑身胯敏羊由仔严疟呈怖疫又斟贪效颇妖恨枷假忍丈擦佰衫盒虫柠灶需粪差邑蓑刽亿此唐吞馁台磐效华陆

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备2025010119号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000987号