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

技术分享

 

测试结果:

技术分享

以上是关于C语言词频统计设计的主要内容,如果未能解决你的问题,请参考以下文章

词频统计单元测试

201671010432词频统计软件项目报告

词频统计

C语言实现词频统计——第二版

python bs4怎么抓豆瓣评论做词频表

LinuxC/C++多进程协同词频统计