您的位置:首页 > 编程语言

词频统计(结对编程)

2016-03-22 22:25 197 查看
从上次作业就感受到了词频统计的难度,虽然在有了一定的想法,但是实际实现起来却是很难,上次作业写得太乱于是重写,而且这次是结对编程,两个人之间难免发生思想上的冲突,但彼此却能相互弥补。

结对对象:张琪琪(博客:http://www.cnblogs.com/zhangqiqi/)

双方贡献比例:1:1

结对照片:



[必做 1] 基于作业3的结果,读取一个较小的文本文件A_Tale_of_Two_Cities.txt,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件。 (第一阶段初稿完成该要求)

命令行格式: 提示符> Myapp.exe -f filename.txt > Result.txt (PS:C++ 程序,Java 程序输出方式类似) filename.txt 为前面下载的文件名。

解释:此外, 读取一个较大的文本文件Gone_with_the_wind.txt实验对比程序执行效率,做如下改进,比较改进前后程序执行时间

选项 -f 表示后面跟文件名

输出格式规定(参考作业3中的示例):

首先按照频率由高到低排序

频率一样的词, 按照字典顺序排序

改动的地方之一就是将结果保存到文件中,读取部分就由队友代劳了:

void PrintResult()//建立一个输出函数
{
FILE* fp1=fopen("Result1.txt", "w");//建立一个新的文件,并把结果保存到文件中
if(NULL == pHead)
{
printf("No Word!!\n");
}
else
{
WordNode *pCurr = pHead;


while(NULL != pCurr)
{

fprintf(fp1,"%s\t%d\n", pCurr->word, pCurr->times);
printf("%s\t%d\n", pCurr->word, pCurr->times);
pCurr = pCurr->pNext;
}
fclose(fp1);


对频率进行排序:

void SortWordDown(Word * words, int size)
{
for(int i=0;i<size;i++)
{
for(int j=0;j <size-1;j++)
{
if(words[j].Count<words[j+1].Count)
{
words[j].exchange(words[j+1]);
}
}
}
}


还有基本的识别单词和大小写转化等:

void array(char x[])
{   int k = 0;
while (x[k] != '\0')
{
if (x[k] >= 'A'&&x[k] <= 'Z')
x[k] = x[k] + 32;
k++;
}
}

int identity(char a[])
{   int m=(strlen(a)>=4)?1:0;
int n=(a[0]>='a'&&a[0]<='z')?1:0;
if(!m||!n)
return 0;
else
while(a)
{   for(int i=1;;i++)
{
if(!(a[i]>='a'&&a[i]<='z')||!(a[i]>='0'&&a[i]<='9'))
return 0;
else
return 1;
}
}
}


其他部分就由队友代劳了

结果:


完整的代码请看:https://github.com/MocQiQi/homework

总结:对于这次的结对练习,两个人的交流显得格外重要,分工合作,两个人相互讨论,相互学习对方写程序的优点,这样一来不仅提高了效率,也节省了时间。虽然在结对的过程中,两个人也会因为意见不同而有些小的争吵,也正因为这样,两个人都有了不同的进步。希望以后能够多学习,多交流,感谢队友在这次编程中给我的帮助和支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: