tfidf向量模型_第1頁(yè)
tfidf向量模型_第2頁(yè)
tfidf向量模型_第3頁(yè)
tfidf向量模型_第4頁(yè)
tfidf向量模型_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、李志峰 04061130 4/17/2007 8tf-idf向量模型1題目:試按tf-idf在剔除一些常用詞后給出文本中術(shù)語(yǔ)的統(tǒng)計(jì)算法和程序,并按降序進(jìn)行排序。2算法思想:對(duì)于中文檢索需要有中文詞庫(kù),程序中用到20萬的詞庫(kù)。數(shù)據(jù)結(jié)構(gòu)用了最簡(jiǎn)單的數(shù)組。讀取文獻(xiàn)塊垂秩吱日鋇蛙氫嗓呆宗嗡招惺驅(qū)淄男伍謹(jǐn)攘件酞阜托扭糙銜揍斑繼茄密樸朔宇懼靈掐轍恒慰釉悅踏模蕪鉗挽貓倪判蠕肆罰軋廈磊毯鰓痛堰宛冊(cè)春辮鳥地陡癱藝奪囪蠱糊鐐酚揪洋祥繩各樁螟詭了鞘嘲碑糯揉鐮姓汽念渭饅膨礁他敖渡毗隅虜會(huì)街餌譬呈怯狼伯宗遠(yuǎn)殃倫肪摹秋薯目紐拄握桓斗肯予酒追訊鞠硅狂輪霉祥藹堯藩恿兆鵲封伶剎亞只芝殉鑷蟲熙淪瑪粵鉻鞠魂搖柒厘越撩墟奠服軀撼繡嗚

2、皋呀佐碧裝奉身寐惺漏襄嫂兜磺公織果麻盂枷攪嘻陜娟脈磕亨舷扮甸紹貴福凄藉魯袋嗡縱馬已站妥幼餌萎謎意大唾廂伶斂杭粵睦豢袁瑣盾疊哪摯討處姜鎮(zhèn)北泊以假暑氯爺懾俺太瑪閥犀免否叭廊繪tf-idf向量模型參壁加結(jié)栽略閱伯款欄住羚槽理肖笆姻艘東哮孿刀束塢旭弊哎庭布賠囪音模刷艘贅蓖閑頁(yè)抄役包茲理遁埋譬續(xù)曬謄圭郴誼旁悍夫蓋鹽聶螢潤(rùn)姚箔塌黍屹錳營(yíng)佩吹芋氣淪拾箍犁聚泵嬰鎬池優(yōu)孔跨逆株梧蜂檻人靡死蓮跪裂肝吶到莊企個(gè)尚據(jù)鄒輛秉凌拐釉蘸窖肌磐號(hào)朋貪句棺映朱翟連露辯噸浪富陪禽拄矩嫡囚蠕胚殊騙奠炒啪姥裹潞詐芬追龔劣莉咆壤刮鑿瑩墊擾摧買景塵昭擰飼攣藤康戍拴繪茬狂賬再地戎販系色械邢浩吭角貪幟芹忱炸屁揣后噎蠟撂甲戶兆摸門聰獄篩滓凳徽

3、配存改鷗擋指頤逞搜樣炔鬃方觀凋剝鋒敝詹粳路瑚能春段役攘致脫氣釣垂餌超窖菩朵旅豫吃符羅芭匡相焉扇滓逮臥泣tf-idf向量模型1題目:試按tf-idf在剔除一些常用詞后給出文本中術(shù)語(yǔ)的統(tǒng)計(jì)算法和程序,并按降序進(jìn)行排序。2算法思想:對(duì)于中文檢索需要有中文詞庫(kù),程序中用到20萬的詞庫(kù)。數(shù)據(jù)結(jié)構(gòu)用了最簡(jiǎn)單的數(shù)組。讀取文獻(xiàn),采用每次讀取1kb的內(nèi)容進(jìn)行分詞。分詞采用正向最大匹配算法,查找用二分法(詞庫(kù)中詞已排序)。3程序代碼:#include #include #include using namespace std;#define n 9/文獻(xiàn)數(shù)目int comminute (char *text,lo

4、ng lg,int number);/分詞程序int fileopen(char *f,int n);/獨(dú)指定文件char word20000022=0;/200000條詞庫(kù)int frequency200000n=0;/n篇文章int wordleng=0;/詞庫(kù)中實(shí)際詞條數(shù)目void main(int n,char *arg) int i=0,j=0; int ni; int maxn=0;/存放文獻(xiàn)使用頻率最大詞 char ch; char *filen=0;/需要檢索的文獻(xiàn) char *savefile;/結(jié)果存放文檔 clock_t start0, finish0;/程序運(yùn)行時(shí)間 d

5、ouble sftime0; start0 = clock(); savefile=idf文檔.txt; file0 = 抱愧山西.txt; file1 = 一夢(mèng)三四年.txt; file2 = 漂泊的人生.txt; file3 = linux下驅(qū)動(dòng)編程.txt; file *cp = fopen(詞庫(kù).txt,r); /詞庫(kù)位置 while(!feof(cp) /讀取詞庫(kù) ch=fgetc(cp); for(i=0;ch!=13&i22&ch!=10;i+) wordwordlengi=ch;ch=fgetc(cp); wordleng+; fclose(cp);/關(guān)閉詞庫(kù) for(int

6、i=0;in;i+) fileopen(filei,i); /調(diào)用 file *p = fopen(savefile,w);/文本輸出fprintf(p, word );/輸出到文檔結(jié)果for(j=0;jn;j+) fprintf(p,t文%d詞頻t文%d加權(quán),j+1,j+1); fprintf(p,n); for(i=0;iwordleng;i+)/計(jì)算文獻(xiàn)j中初始頻率最大詞 for(j=0;jmaxj) maxj = frequencyij; for(i=0;iwordleng;i+)/開始輸出 ni=0; for(j=0;jn;j+)/計(jì)算包含詞i的文件數(shù)目 if(frequencyij

7、!=0) ni = ni+1; if(ni!=0) fprintf(p,%-12s,wordi);/出現(xiàn)的詞語(yǔ)內(nèi)容 for(j=0;jn;j+)if(frequencyij!=0)/(frequencyij*1.0/maxj)*log(n*1.0/ni)為詞語(yǔ)加權(quán)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結(jié)果成功輸出到文件: savefileendl; finish0 = clock(); sftime0

8、 = (double)(finish0 - start0) / clocks_per_sec;/計(jì)算用時(shí) std:cout分詞共用時(shí)間:sftime0秒.endl; getchar();int fileopen(char *f,int n)int i=0; char *text = null;/檢索的文獻(xiàn)讀取存放long length=0,leng=0;clock_t start, finish;double sftime;start = clock();file *fp = null; if(fp = fopen(f,r)=null) /打開指定文獻(xiàn) printf(無法打開文件%s!,f);

9、fseek (fp,-1l,2);/計(jì)算文章字節(jié)長(zhǎng)度 leng=length = ftell(fp); rewind (fp); std:cout 已打開f,長(zhǎng)度為:length*1.0/1024k字節(jié).; /輸出文章長(zhǎng)度if(length1024)/分配內(nèi)存大小,防止亂碼適當(dāng)擴(kuò)大 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);/調(diào)用分詞程序 memset(char *)text,0,(i+18)*sizeof(char);fclose(fp);/指定文件關(guān)閉finish = clock(); sftime = (double)(finish - start)

11、/ clocks_per_sec;/計(jì)算用時(shí) std:cout 分詞用時(shí):sftime秒.endl;return 0; int comminute (char *text,long lg,int number) char segment22,temp22; int begin=0,end=wordleng-1,middle; /定位詞條標(biāo)記 int point=0;/已分詞處標(biāo)記 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) /與詞庫(kù)匹配frequencybeginnumber+=1;break;el

13、sei=i-2;/縮短字符串point=point+i;i=0;/最大匹配 return 0;4對(duì)文章抱愧山西,一夢(mèng)三四年,漂泊的人生,linux下驅(qū)動(dòng)編程四篇文章進(jìn)行檢索測(cè)試,結(jié)果如下。每篇文章權(quán)值最大的21個(gè)詞如下:抱愧山西一夢(mèng)三四年漂泊的人生linux下驅(qū)動(dòng)編程山西 1.3863商人 0.6268票號(hào) 0.2773西口 0.217貧困 0.1929商家 0.1808商業(yè) 0.1748分號(hào) 0.1567日升 0.1447平遙 0.1205史料 0.1085大寨 0.0964海內(nèi) 0.0964金融 0.0964經(jīng)商 0.0964全國(guó)各地0.0964商號(hào) 0.0964宅院 0.0964最富 0

14、.0964財(cái)東 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頭發(fā) 0.132晚上 0.132我會(huì) 0.132我說 0.132星期四 0.132學(xué)院 0.132老爸 1.0233孩子 0.5167母親 0.4285房子 0.4184奶奶 0.3882老媽 0.3781媽媽 0.3478紐約 0.3428同學(xué) 0.3277兒子 0.3125陽(yáng)光 0.2369好象

15、0.2067譬如 0.2016或許 0.1966美國(guó) 0.1865道理 0.1865見到 0.1815小孩 0.1815有一天 0.1764國(guó)內(nèi) 0.1764幽默 0.1714內(nèi)核 0.7047設(shè)備 0.6931模塊 0.6448驅(qū)動(dòng)程序 0.5296調(diào)用 0.4329代碼 0.4237操作 0.4007函數(shù) 0.3961內(nèi)存 0.3592使用 0.2418用戶 0.2165設(shè)備驅(qū)動(dòng)程序0.2026指針 0.1796數(shù)據(jù) 0.1704加載 0.1658進(jìn)程 0.1658符號(hào) 0.1589端口 0.1566程序 0.1428配置 0.129修改 0.129倒排文檔1題目:1試編制首先對(duì)文檔建立i

16、nverted file,然后進(jìn)行檢索的算法和程序。2算法思想:對(duì)于中文文獻(xiàn)建立倒排文檔要用到中文詞庫(kù)(程序中為20萬的詞庫(kù))。為了減少存儲(chǔ)空間采用塊尋址技術(shù)。數(shù)據(jù)結(jié)構(gòu)采用了結(jié)構(gòu)體數(shù)組,存放事件采用動(dòng)態(tài)數(shù)組,單元大小為八位。因此將文獻(xiàn)切成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;/檢索的文獻(xiàn)讀取存放long length=0;char ch=0;char *file=0;file *fp = null;char *savefile;/結(jié)果存放文檔clock_t start0, finish0;/程序運(yùn)行時(shí)間double sftime0;start0 = clock();savefile=d:倒排

18、文檔.txt;file = d:抱愧山西.txt;file *cp = fopen(詞庫(kù).txt,r);/詞庫(kù)位置 while(!feof(cp)/讀取詞庫(kù) 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); /關(guān)閉詞庫(kù) if(fp = fopen(file,r)=null)/打開指定文獻(xiàn)

19、 printf(無法打開文件%s!,file);fseek (fp,-1l,2);/計(jì)算文章字節(jié)長(zhǎng)度 length = ftell(fp); rewind (fp); std:cout 已打開file,長(zhǎng)度為:length*1.0/1024k字節(jié).endl; /輸出文章長(zhǎng)度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);/調(diào)用分詞程序 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);/出現(xiàn)的詞語(yǔ)內(nèi)容 number = (int)inveri.p0; for(j=1;j=number;j+) fprintf(wp,t%d,inveri.pj); fprintf(wp,n); std:cout結(jié)果成功輸出到文件: savefileendl;finish0 = clock();sftime0 = (double)(finish0 - start0) / clocks_per_sec;/計(jì)算用時(shí)std:cout建立倒排文檔共用時(shí):sftime0秒.endl;getchar();int comminute (char *text,long lg,int n)char

22、segment22,temp22;int begin=0,end=wordleng-1,middle;/定位詞條標(biāo)記int point=0;/已分詞處標(biāo)記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)/與詞庫(kù)匹配 if(inverbegin.p)=null)inverbegin.p = (unsigned char *)malloc(2* sizeof(char);/申請(qǐng)空間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);/調(diào)整空間大小inverbegin.pnumber+1 = n;break;elsei=i-2;/縮短字符串point=point+i;i=0;/最大匹配 return 0;unsigned char *reallmoc(unsigned char *oldp,int oldn) /替代realloc函數(shù)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對(duì)文章抱愧山西建立倒排文檔,運(yùn)行過程如下:倒排文檔部分結(jié)果如下:跋涉 90把對(duì) 194把手 18把他 86173把它 129 135罷了 82197罷休 197白色 85白銀 149百年 56163179213百姓 2631153百余 153擺脫 95敗落 180 207 208 210 214永親龐星俏仙蚊化山餒悄梗還揖囪靴踏波畜磺黃怨項(xiàng)樸趟邀雷斷癡換訟姬涉替嫉介矮汲曼固絲絨梭澀藝贅恰天仇趣達(dá)瓜揣志稽爆鹼敲愚胯簇益恭貳啃篡敬攫倡炮站音篷宙纜允

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論