数据结构(六)—— 散列查找(5):应用实例 —— 词频统计

数据结构系列内容的学习目录 → \rightarrow 浙大版数据结构学习系列内容汇总

5. 应用实例 —— 词频统计

  应用: 文件中单词词频统计
  例: 给定一个英文文本文件,统计文件中所有单词出现的频率,并输出词频最大的前10%的单词及其词频。
     假设单词字符定义为大小写字母、数字和下划线,其它字符均认为是单词分隔符,不予考虑。
  分析: 关键是对新读入的单词在已有单词表中查找,如果已经存在,则将该单词的词频加1,如果不存在,则插入该单词并记词频为1。
      如何设计该单词表的数据结构才可以进行快速地查找和插入? 散列表!

int main() 
{
    int TableSize = 10000;  // 散列表的估计大小
    int wordcount = 0, length;
    HashTable H;
    ElementType word;
    FILE *fp;
    char document[30]="HarryPotter.txt";  // 要被统计词频的文件名
    H = InitializeTable( TableSize );  // 建立散列表
    if((fp = fopen(document,"r")) == NULL) 
        FatalError("无法打开文件!\n");
    while( !feof(fp))
    {
        length = GetAWord(fp, word);  // 从文件中读取一个单词
        if(length > 3)  // 只考虑适当长度的单词
        {
            wordcount++;  // 统计文件中单词总数
            InsertAndCount( word, H );
        }
    }
    fclose(fp);
    cout << "该文档共出现" << wordcount << "个有效单词" << endl;
    show( H, 10.0/100);  // 显示词频前10%的所有单词
    DestroyTable(H);  // 销毁散列表
    return 0;
}

  函数show( H, 10.0/100);:(1)统计最大词频;
              (2)用一组数统计从1到最大词频的单词数;
              (3)计算前10%的词频应该是多少;
              (4)输出前10%词频的单词。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值