C语言词频统计设计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言词频统计设计相关的知识,希望对你有一定的参考价值。
项目需求:
1.设计一个词频统计小软件,对给定的英文文章进行单词频率的统计。
2.文章中相应的标点不计入统计。
3.将统计结果以从大到小的排序方式输出。
设计:
1.因为功能相对简单,采用C语言直接进行编写。
2.项目包含的统计功能利用定义的结构体分别对单词和次数进行统计。
3.以字符串的形式读取单词,并对其中的每个字符进行标点分析。
4.统计完成后采用冒泡排序的方式对次数进行排序。
5.将整个统计结果循环输出。
部分核心代码:
结构体定义:
typedef struct addup { char word[50]; int count; }R;
读取文本:
char temp[50]; R fin[10000]={"\\0",0}; fp=fopen("f:/1.txt","r"); while(!feof(fp)) { fscanf(fp,"%s",temp); q=strlen(temp); n++; for(i=0;i<n;++i) if(strcmp(fin[i].word,temp)==0) { fin[i].count++; n--; break; } if(i>=n) { strcpy(fin[n-1].word,temp); fin[n-1].count++; } }
标点判定:
for(i=0;i<q;i++) { if(temp[i]==‘,‘||temp[i]==‘.‘||temp[i]==‘?‘||temp[i]==‘!‘||temp[i]==‘"‘) temp[i]=‘\\0‘; }
冒泡排序:
for (i=0;i<n;i++) for (j=0;j<n-i;j++) { if (fin[j].count<fin[j+1].count) { ls[0]=fin[j+1]; fin[j+1]=fin[j]; fin[j]=ls[0]; } }
输出结果:
freopen("f:/2.txt","w",stdout); for(i=0;i<n;i++) { printf("%s : ",fin[i].word); s=0; for(j=0;j<fin[i].count;++j) s++; printf("%d 次",s); printf("\\n"); } fclose(stdout);
测试用例:
因为词频统计单词重复几率不会过高,因此小篇幅文章不一定能得出好的测试结果,选取了马丁路德金的《I have a dream》演讲稿进行统计。
全篇单词量:1666
测试结果: