英文文本统计及预处理

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

#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;  
}  

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