English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

我有一篇已經段好詞的文章,想要讓它變的更簡潔因此要去除一些停用字
例如:了/吧/啊/的/而且/如果......之類的。已經有了停用字庫
想要讓程式去讀停用字庫,然後將文章裡的停用字刪除

範例:
志玲 還 透露 自己 發明 的 獨家 秀髮 防曬 秘方,就是 在 鎖水 噴霧 中 加入 防曬乳 後 塗抹 於 頭髮 上,就算 在 外 東奔西跑 也 不怕 細 軟 的 髮質 受損 !

假設停用字庫裡有的詞為:


就是






就算


執行結果:
志玲 透露 自己 發明 獨家 秀髮 防曬 秘方,鎖水 噴霧 加入 防曬乳 塗抹 頭髮 ,在外 東奔西跑 不怕 細軟 髮質 受損!

2006-08-04 13:07:06 · 3 個解答 · 發問者 亞妍 1 in 電腦與網際網路 程式設計

阿~~先說個抱歉我一時心急沒有表示清楚
執行前跟執行後的排列都是換行分隔的

執行前:
志玲

透露
自己
發明
的.............

執行後的也是以換行分隔 :
志玲
透露
自己
發明
獨家
秀髮
防曬

2006-08-04 18:18:28 · update #1

3 個解答

我的程式碼:
http://163.32.58.5/class/32/08/yahoo/c/filter.c

1. 測試檔(文章 )
http://163.32.58.5/class/32/08/yahoo/c/filter_input.txt
ps: 測試檔有無換行皆可, 若無換行, 標點符號和字之間都需空一格(如同 ASD 大所說的)

2. 過濾檔(停用字庫)
http://163.32.58.5/class/32/08/yahoo/c/filter.txt

若要去除標點符號, 就在過濾檔加入要刪除的標點符號
參考看看囉~~~還請多多包涵 :)

2006-08-14 02:12:22 補充:
沒當掉也許是因為我陣列設很大吧 :p

妳可以視妳需要修改唷 !

#define MAX_One_Word_SIZE 20
↑這行意思是說讀取一篇文章時每個單字的最大長度
Ex: I am a student
I: 1 個長度, am : 2 個長度...

#define MAX_Word_SIZE 100
↑這行意思是說停用字庫(filter.txt)
最多幾個(預設值 100 個)
Ex:(filter.txt 內容)
I
am
a
所以是 3 個

謝謝妳的評鑑囉 ^^

2006-08-04 22:06:17 · answer #1 · answered by 榮章 4 · 0 0

來源內容沒有換行停用字庫有無換行都可以使用結果:補充問題前所要求的執行結果!//Power by Microsoft Visual Studio 2005//可以使用 Dev-C++ 編譯此程式#include #include #include #define BUFFER 256int main(int argc, char *argv[]){ //=====STATEMENT=====// void file_process(const char *SOURCE,const char *LIB); char source[]="source.txt";//來源檔名 //來源內容未換行 char lib[]="lib.txt";//停用字庫 //字庫有無換行皆可 file_process(source,lib); //=====END=====// system("PAUSE"); return 0;}//mainvoid file_process(const char *SOURCE,const char *LIB){ FILE *source,*lib,*des; char des_file[]="Result.txt";//目的檔案 char l_Buffer[BUFFER],s_Buffer[BUFFER]; char s_word[3],sep_word[3],temp[BUFFER][BUFFER]; char temp_result[BUFFER][BUFFER]; unsigned int i,j,k; source=fopen(SOURCE,"r"); lib=fopen(LIB,"r"); des=fopen(des_file,"w"); if(source!=NULL&&lib!=NULL&&des!=NULL){  for(k=0;!feof(lib);k++){   fgets(l_Buffer,BUFFER,lib);   while(!feof(source)){    if(k==0){     fgets(s_Buffer,BUFFER,source);     strcpy(temp[0],s_Buffer);    }else{     fgets(s_Buffer,BUFFER,source);     strcpy(temp[0],temp_result[k-1]);    }    for(j=0;j

2006-08-04 20:14:55 · answer #2 · answered by Big_John-tw 7 · 0 0

ps..你的文章都已斷詞斷好了,那逗號前後順便加一個空格,請記住(否則跑以下程式會有誤。),aa.txt和bb.txt文字檔請先行建立。#include #include #include int main(){ FILE *fp,*tp; char bfr[255],str[20]; fp=fopen("aa.txt","r"); //aa.txt是文章所在檔 while(fscanf(fp,"%s",bfr)!=EOF) //既然你都斷好了,這時用fscanf()是不錯選擇。 {  tp=fopen("bb.txt","r"); //bb.txt是停用字所在檔  while(fscanf(tp,"%s",str)!=EOF) //停用字庫也同樣可以用fscanf()  {   if(strcmp(bfr,str)==0) //做比對,看是否是停用字庫裡的字。   {strcpy(bfr,"\0");break;} //是的話,刪掉,然後離開迴圈。  }  fclose(tp);  if(strcmp(bfr,"\0")!=0) //非停用字庫裡的字就印出。   printf("%s ",bfr); } fclose(fp); printf("\n"); system("pause"); return 0;}

2006-08-05 10:14:44 補充:
printf("%s ",bfr);--->改成printf("%s\n",bfr);執行結果及一系列的圖檔:http://img150.imageshack.us/img150/9749/0805vh3.jpg

2006-08-04 17:11:38 · answer #3 · answered by Almond 6 · 0 0

fedest.com, questions and answers