首页 > 其他 > 详细

分析一个英文文章,并找出10个高频词汇打印出来

时间:2014-03-03 18:00:40      阅读:423      评论:0      收藏:0      [点我收藏+]

遇到一个分析文章的程序,首先要解决的是文件的读入问题,保障程序能成功的读取文件,这里我选择了让程序能够读取TXT格式的文件。

当文件读取完毕,需要让程序能够区分单词与标点符号,需要将单词从文章中分离出来,并对单词进行分析。

分析单词之后就需要能正确的统计出所有单词的出现次数,并对其比较排序。

最后是需要程序能够成功的输出10个高频词汇

 

 

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
struct word
{
char str[20];
int number;
float frequency;
}W[1000];

int sum;
double all=0;

void Deal(char s[])
{
int i,j;
int t;
int flag=0;

for(i=0;i<=sum;i++)
{
if(strcmp(W[i].str,s)==0)
{
W[i].number++;
flag=1;
}

}
if(flag==0)
{
for(j=0;j<20;j++)
W[sum].str[j]=s[j];
W[sum].number++;
sum++;
}

}

void Read()
{


int i,j;
char ch,s[20];
FILE*fp;
if((fp=fopen("zzz.txt","r"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}

for(i=0;i<999;i++)
W[i].number=0;
sum=0;
ch=NULL;

while(ch!=-1)
{
for(i=0;i<20;i++)
s[i]=‘\0‘;

ch=fgetc(fp);
if(isalpha(ch)!=0)
{
for(i=0;;i++)
{
s[i]=ch;
ch=fgetc(fp);
if(isalpha(ch)!=0)continue;
else {break;}
}

for(i=0;i<20;i++)
{
if(s[i]>=65 && s[i]<=90)
s[i]=s[i]+32;
}
Deal(s);
}
else {continue;}
}


}

void jisuan()
{


for(int i=0;i<1000;i++)
{
W[i].frequency=W[i].number/all;
if(W[i].number>0)all=all+W[i].number;
}

finish=(double)clock();
printf("计算时间:%.4fms\n",(finish-start));
}

void paixu()
{
double start,finish;
start=(double)clock();

word t;
for(int j=0;j<999;j++)
for(int i=0;i<999-j;i++)
if(W[i].number<W[i+1].number)
{
t=W[i];W[i]=W[i+1];W[i+1]=t;
}

}

int main(int argc, char* argv[])
{
int i;
double start,finish;

start=(double)clock();
Read();
jisuan();
paixu();


for(i=0;i<10;i++)
printf("%-8s %8d\n",W[i].str,W[i].number) ;

printf("总单词数: %.0lf\n",all);


return 0;
}

分析一个英文文章,并找出10个高频词汇打印出来,布布扣,bubuko.com

分析一个英文文章,并找出10个高频词汇打印出来

原文:http://www.cnblogs.com/hujiaqi/p/3577669.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!