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

Posted 大彤小忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构—— 散列查找:应用实例 —— 词频统计相关的知识,希望对你有一定的参考价值。

数据结构系列内容的学习目录 → \\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%词频的单词。

以上是关于数据结构—— 散列查找:应用实例 —— 词频统计的主要内容,如果未能解决你的问题,请参考以下文章

组合数据类型练习,英文词频统计实例上

组合数据类型练习,英文词频统计实例上

组合数据类型练习,英文词频统计实例上

组合数据类型练习,英文词频统计实例上

组合数据类型练习,英文词频统计实例上

组合数据类型练习英语词频统计