词频统计实现方法大致思路(软工个人作业一)

基本功能

1. 统计文件的字符数
2. 统计文件的单词总数
3. 统计文件的总行数
4. 统计文件中各单词的出现次数
5. 对给定文件夹及其递归子文件夹下的所有文件进行统计
6. 统计两个单词(词组)在一起的频率,输出频率最高的前10个。
7. 在Linux系统下,进行性能分析,过程写到blog中(附加题)

数据结构:
characterNum 字符数  全局变量
wordNum   单词总数 全局变量
lineNum   总行数  全局变量
采用结构体数组(动态内存)存储单词及其出现次数

struct wordInfo {
 char* wordStr;
 int*  nextWordFrequency[26];
 int   frequency;
};
struct alphaArray {
 wordInfo* wordArray;
 int       total;
};

alphaArray dictionary[26];

遍历文件的方法:
_findfirst,_findnext函数实现,参考例程:https://www.cnblogs.com/ranjiewen/p/5960976.html

实现方案:
初始化各变量
遍历给定文件夹中的每个文件
只读方式打开符合要求的文件
单词统计
循环至所有文件遍历完成
关闭文件
输出统计结果

单词统计函数:
遍历字符并统计
判断是否是换行符并统计
建立缓冲区域存储一个单词中连续的字符
采集单词字符串
生成单词的哈希值(散列函数使用ELFHash、冲突解决方案采用二次探测)
根据首字母和哈希值确定单词的存储位置并存储单词信息
将当前单词的存储位置映射到前一个单词的nextWordFrequency[26][]矩阵当中,实现词组频率统计

统计规则:
http://www.cnblogs.com/denghp83/p/8627840.html

统计方法:
1.判断是否是ASCII码字符,若是,字符计数加一;若是换行符,行数加一
2.将间隔符之间的内容读入临时数组,用变量记录最后一个字母在数组中的位置
3.提取单词主体(除去最后的数字部分),产生哈希值
4.根据哈希值查找对应单元是否已经存在该单词,若存在,则该单词频率加一且按照词典顺序更新单词;若不存在,根据散列函数继续查找,直到找到同样的单词或者空闲的空间,更新或者记录单词信息

posted @ 2018-03-22 23:40  _最冷一天  阅读(422)  评论(3编辑  收藏  举报