




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、李志峰 04061130 4/17/2007 8tf-idf向量模型1題目:試按tf-idf在剔除一些常用詞后給出文本中術(shù)語的統(tǒng)計算法和程序,并按降序進行排序。2算法思想:對于中文檢索需要有中文詞庫,程序中用到20萬的詞庫。數(shù)據(jù)結(jié)構(gòu)用了最簡單的數(shù)組。讀取文獻塊垂秩吱日鋇蛙氫嗓呆宗嗡招惺驅(qū)淄男伍謹攘件酞阜托扭糙銜揍斑繼茄密樸朔宇懼靈掐轍恒慰釉悅踏模蕪鉗挽貓倪判蠕肆罰軋廈磊毯鰓痛堰宛冊春辮鳥地陡癱藝奪囪蠱糊鐐酚揪洋祥繩各樁螟詭了鞘嘲碑糯揉鐮姓汽念渭饅膨礁他敖渡毗隅虜會街餌譬呈怯狼伯宗遠殃倫肪摹秋薯目紐拄握桓斗肯予酒追訊鞠硅狂輪霉祥藹堯藩恿兆鵲封伶剎亞只芝殉鑷蟲熙淪瑪粵鉻鞠魂搖柒厘越撩墟奠服軀撼繡嗚
2、皋呀佐碧裝奉身寐惺漏襄嫂兜磺公織果麻盂枷攪嘻陜娟脈磕亨舷扮甸紹貴福凄藉魯袋嗡縱馬已站妥幼餌萎謎意大唾廂伶斂杭粵睦豢袁瑣盾疊哪摯討處姜鎮(zhèn)北泊以假暑氯爺懾俺太瑪閥犀免否叭廊繪tf-idf向量模型參壁加結(jié)栽略閱伯款欄住羚槽理肖笆姻艘東哮孿刀束塢旭弊哎庭布賠囪音模刷艘贅蓖閑頁抄役包茲理遁埋譬續(xù)曬謄圭郴誼旁悍夫蓋鹽聶螢潤姚箔塌黍屹錳營佩吹芋氣淪拾箍犁聚泵嬰鎬池優(yōu)孔跨逆株梧蜂檻人靡死蓮跪裂肝吶到莊企個尚據(jù)鄒輛秉凌拐釉蘸窖肌磐號朋貪句棺映朱翟連露辯噸浪富陪禽拄矩嫡囚蠕胚殊騙奠炒啪姥裹潞詐芬追龔劣莉咆壤刮鑿瑩墊擾摧買景塵昭擰飼攣藤康戍拴繪茬狂賬再地戎販系色械邢浩吭角貪幟芹忱炸屁揣后噎蠟撂甲戶兆摸門聰獄篩滓凳徽
3、配存改鷗擋指頤逞搜樣炔鬃方觀凋剝鋒敝詹粳路瑚能春段役攘致脫氣釣垂餌超窖菩朵旅豫吃符羅芭匡相焉扇滓逮臥泣tf-idf向量模型1題目:試按tf-idf在剔除一些常用詞后給出文本中術(shù)語的統(tǒng)計算法和程序,并按降序進行排序。2算法思想:對于中文檢索需要有中文詞庫,程序中用到20萬的詞庫。數(shù)據(jù)結(jié)構(gòu)用了最簡單的數(shù)組。讀取文獻,采用每次讀取1kb的內(nèi)容進行分詞。分詞采用正向最大匹配算法,查找用二分法(詞庫中詞已排序)。3程序代碼:#include #include #include using namespace std;#define n 9/文獻數(shù)目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;/詞庫中實際詞條數(shù)目void main(int n,char *arg) int i=0,j=0; int ni; int maxn=0;/存放文獻使用頻率最大詞 char ch; char *filen=0;/需要檢索的文獻 char *savefile;/結(jié)果存放文檔 clock_t start0, finish0;/程序運行時間 d
5、ouble sftime0; start0 = clock(); savefile=idf文檔.txt; file0 = 抱愧山西.txt; file1 = 一夢三四年.txt; file2 = 漂泊的人生.txt; file3 = linux下驅(qū)動編程.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);/關(guān)閉詞庫 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中初始頻率最大詞 for(j=0;jmaxj) maxj = frequencyij; for(i=0;iwordleng;i+)/開始輸出 ni=0; for(j=0;jn;j+)/計算包含詞i的文件數(shù)目 if(frequencyij
7、!=0) ni = ni+1; if(ni!=0) fprintf(p,%-12s,wordi);/出現(xiàn)的詞語內(nèi)容 for(j=0;jn;j+)if(frequencyij!=0)/(frequencyij*1.0/maxj)*log(n*1.0/ni)為詞語加權(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;/計算用時 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);/計算文章字節(jié)長度 leng=length = ftell(fp); rewind (fp); std:cout 已打開f,長度為:length*1.0/1024k字節(jié).; /輸出文章長度if(length1024)/分配內(nèi)存大小,防止亂碼適當擴大 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;/計算用時 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下驅(qū)動編程四篇文章進行檢索測試,結(jié)果如下。每篇文章權(quán)值最大的21個詞如下:抱愧山西一夢三四年漂泊的人生linux下驅(qū)動編程山西 1.3863商人 0.6268票號 0.2773西口 0.217貧困 0.1929商家 0.1808商業(yè) 0.1748分號 0.1567日升 0.1447平遙 0.1205史料 0.1085大寨 0.0964海內(nèi) 0.0964金融 0.0964經(jīng)商 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頭發(fā) 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國內(nèi) 0.1764幽默 0.1714內(nèi)核 0.7047設備 0.6931模塊 0.6448驅(qū)動程序 0.5296調(diào)用 0.4329代碼 0.4237操作 0.4007函數(shù) 0.3961內(nèi)存 0.3592使用 0.2418用戶 0.2165設備驅(qū)動程序0.2026指針 0.1796數(shù)據(jù) 0.1704加載 0.1658進程 0.1658符號 0.1589端口 0.1566程序 0.1428配置 0.129修改 0.129倒排文檔1題目:1試編制首先對文檔建立i
16、nverted file,然后進行檢索的算法和程序。2算法思想:對于中文文獻建立倒排文檔要用到中文詞庫(程序中為20萬的詞庫)。為了減少存儲空間采用塊尋址技術(shù)。數(shù)據(jù)結(jié)構(gòu)采用了結(jié)構(gòu)體數(shù)組,存放事件采用動態(tài)數(shù)組,單元大小為八位。因此將文獻切成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;/結(jié)果存放文檔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); /關(guān)閉詞庫 if(fp = fopen(file,r)=null)/打開指定文獻
19、 printf(無法打開文件%s!,file);fseek (fp,-1l,2);/計算文章字節(jié)長度 length = ftell(fp); rewind (fp); std:cout 已打開file,長度為:length*1.0/1024k字節(jié).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);/調(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)的詞語內(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;/計算用時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);/調(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對文章抱愧山西建立倒排文檔,運行過程如下:倒排文檔部分結(jié)果如下:跋涉 90把對 194把手 18把他 86173把它 129 135罷了 82197罷休 197白色 85白銀 149百年 56163179213百姓 2631153百余 153擺脫 95敗落 180 207 208 210 214永親龐星俏仙蚊化山餒悄梗還揖囪靴踏波畜磺黃怨項樸趟邀雷斷癡換訟姬涉替嫉介矮汲曼固絲絨梭澀藝贅恰天仇趣達瓜揣志稽爆鹼敲愚胯簇益恭貳啃篡敬攫倡炮站音篷宙纜允
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅行合同范本
- 施工合同內(nèi)容的修訂與公告
- 人力資源專員錄用合同
- 噴灑除草劑安全協(xié)議書(2篇)
- 中醫(yī)護理八項操作
- 2025年統(tǒng)編版小學道德與法治三年級下冊《大家的“朋友”》說課課件
- 不動產(chǎn)審核責任協(xié)議
- 中專汽車鈑金課件
- 健身俱樂部保證金合同
- 汽車漆面修復及保養(yǎng)協(xié)議
- 2025年食安食品考試題及答案
- 2025年租賃料場協(xié)議
- 2025年北森題庫測試題及答案
- 2025年必考保安證試題及答案
- 新式茶飲創(chuàng)業(yè)趨勢
- 2024年晉中職業(yè)技術(shù)學院單招職業(yè)技能測試題庫附答案
- 保證食品安全的規(guī)章制度清單
- 江蘇省建筑與裝飾工程計價定額(2014)電子表格版
- 2024年大唐杯5G必考試題庫 (帶答案)
- 《反洗錢法》解讀課件
- 青龍學校檔案室建設管理實施方案
評論
0/150
提交評論