码迷,mamicode.com
首页 > 编程语言 > 详细

C语言词频统计设计

时间:2016-09-05 13:44:55      阅读:652      评论:0      收藏:0      [点我收藏+]

标签:

项目需求:

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

技术分享

 

测试结果:

技术分享

C语言词频统计设计

标签:

原文地址:http://www.cnblogs.com/shaloo/p/5841877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!