cx330..... 2021-07-01 10:13 采纳率: 100%
浏览 43
已采纳

英文文本统计及预处理

问题描述:给出一篇英文文章,文件不小于 5M 的大小。统计其中的每个不 同英文单词和总单词的数量,(含标点符号),并实现对停用词(给定)和低频率 词(出现次数小于某个参数,如小于 3)的过滤。 实现要求: 1)分别用链表和哈希表来实现,注意要给出不同大小文件耗费的时间,对 时间性能进行进一步分析; 2)关于英文文章,可以自动生成文本文件,也可以从网络上下载几篇英文 文章。 (求求大佬了,孩子要无了)

  • 写回答

1条回答 默认 最新

  • CSDN专家-黄老师 2021-07-01 15:49
    关注
    #pragma warning(disable:4786)  
    #include <iostream>  
    #include <vector>  
    #include <fstream>  
    #include <string>  
    #include <map>  
    #include <queue>  
    #include <ctime>  
    using namespace std;  
    void topK(const int &K)  
    {  
        double t=clock();  
      
        ifstream infile;  
        infile.open("test.txt");  
        if (!infile)  
            cout<<"can not open file"<<endl;  
        string s;  
        map<string,int>wordcount;  
      
        while(true)  
        {  
            infile>>s;  
            if(infile.eof()) break;  
            wordcount[s]++;  
        }  
        cout<<"单词种类:"<<wordcount.size()<<endl;  
        //优先队列使用小顶堆,排在前面的数量少,使用">";  
        priority_queue< pair< int,string >,vector< pair< int,string > >,greater< pair< int,string> > > queueK;  
        for (map<string,int>::iterator iter=wordcount.begin(); iter!=wordcount.end(); iter++)  
        {  
            queueK.push(make_pair(iter->second,iter->first));  
            if(queueK.size()>K)  
                queueK.pop();  
        }  
        pair<int,string>tmp;  
        priority_queue< pair< int,string >,vector< pair< int,string > >,less< pair< int,string> > > queueKless;  
        while (!queueK.empty())  
        {  
            tmp=queueK.top();  
            queueK.pop();  
            queueKless.push(tmp);  
        }  
        while(!queueKless.empty())  
        {  
            tmp=queueKless.top();  
            queueKless.pop();  
            cout<<tmp.second<<"\t"<<tmp.first<<endl;  
        }  
        cout<<"< Elapsed Time: "<<(clock()-t)/CLOCKS_PER_SEC<<" >"<<endl;  
    }  
    int main()  
    {  
        int k=0;  
        cout<<"http://blog.csdn.net/NUPTboyZHB\n";  
        while (true)  
        {  
            cout<<"PUT IN K: ";  
            cin>>k;  
            if(k<=0)break;  
            topK(k);  
        }  
        return 0;  
    }  
    

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序