<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    c++實現文本中英文單詞和漢字字符的統計

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    源代碼下載:http://download.csdn.net/detail/nuptboyzhb/4987141

    1.統計文本中漢字的頻數,為后續的文本分類做基礎。對于漢字的統計,需要判斷讀取的是否為漢字。源代碼如下:

    [C++ code]

    [cpp] view plaincopy
    1. /* 
    2.  *@author:鄭海波 http://blog.csdn.net/NUPTboyZHB 
    3.  *參考:實驗室小熊 
    4.  *注:有刪改 
    5.  */  
    6. #pragma warning(disable:4786)  
    7. #include <iostream>  
    8. #include <vector>  
    9. #include <fstream>  
    10. #include <string>  
    11. #include <map>  
    12. #include <queue>  
    13. #include <ctime>  
    14. using namespace std;  
    15. void topK(const int &K)  
    16. {  
    17.     double t=clock();  
    18.   
    19.     ifstream infile("test.txt");  
    20.     if (!infile)  
    21.         cout<<"can not open file"<<endl;  
    22.   
    23.     string s="";  
    24.     map<string,int>wordcount;  
    25.     unsigned char temp[2];  
    26.     while(true)//國標2312  
    27.     {  
    28.         infile>>temp[0];  
    29.         if(infile.eof()) break;  
    30.         if (temp[0]>=0xB0)//GB2312下的漢字,最小是0XB0  
    31.         {  
    32.             s+=temp[0];  
    33.             infile>>temp[1];  
    34.             s+=temp[1];  
    35.         }  
    36.         else//非漢字字符不統計  
    37.         {  
    38.             s="";  
    39.             continue;  
    40.         }  
    41.         wordcount[s]++;  
    42.         s="";  
    43.     }  
    44.     cout<<"單詞種類:"<<wordcount.size()<<endl;  
    45.     //優先隊列使用小頂堆,排在前面的數量少,使用">";  
    46.     priority_queue< pair< int,string >,vector< pair< int,string > >,greater< pair< int,string> > > queueK;  
    47.     for (map<string,int>::iterator iter=wordcount.begin(); iter!=wordcount.end(); iter++)  
    48.     {  
    49.         queueK.push(make_pair(iter->second,iter->first));  
    50.         if(queueK.size()>K)  
    51.             queueK.pop();  
    52.     }  
    53.     pair<int,string>tmp;  
    54.     //將排在后面的數量少,排在前面的數量多  
    55.     priority_queue< pair< int,string >,vector< pair< int,string > >,less< pair< int,string> > > queueKless;  
    56.     while (!queueK.empty())  
    57.     {  
    58.         tmp=queueK.top();  
    59.         queueK.pop();  
    60.         queueKless.push(tmp);  
    61.     }  
    62.     while(!queueKless.empty())  
    63.     {  
    64.         tmp=queueKless.top();  
    65.         queueKless.pop();  
    66.         cout<<tmp.second<<"\t"<<tmp.first<<endl;  
    67.     }  
    68.     cout<<"< Elapsed Time: "<<(clock()-t)/CLOCKS_PER_SEC<<" s>"<<endl;  
    69. }  
    70.   
    71. int main()  
    72. {  
    73.     int k=0;  
    74.     cout<<"http://blog.csdn.net/NUPTboyZHB\n";  
    75.     while (true)  
    76.     {  
    77.         cout<<"查看前K個頻率最高的漢字,K=";  
    78.         cin>>k;  
    79.         if(k<=0)break;  
    80.         topK(k);  
    81.     }  
    82.     return 0;  
    83. }  


    [圖1]

    RFID設備管理軟件

    2.統計英文單詞的出現頻率。這比統計漢字更加的容易,因為單詞和單詞之間是用空格分開的,所以,直接將單詞保存到string中即可。

    [c++ code]

    [cpp] view plaincopy
    1. /* 
    2.  *@author:鄭海波 http://blog.csdn.net/NUPTboyZHB 
    3.  *參考:實驗室小熊 
    4.  *注:有刪改 
    5.  */  
    6. #pragma warning(disable:4786)  
    7. #include <iostream>  
    8. #include <vector>  
    9. #include <fstream>  
    10. #include <string>  
    11. #include <map>  
    12. #include <queue>  
    13. #include <ctime>  
    14. using namespace std;  
    15. void topK(const int &K)  
    16. {  
    17.     double t=clock();  
    18.   
    19.     ifstream infile;  
    20.     infile.open("test.txt");  
    21.     if (!infile)  
    22.         cout<<"can not open file"<<endl;  
    23.     string s;  
    24.     map<string,int>wordcount;  
    25.   
    26.     while(true)  
    27.     {  
    28.         infile>>s;  
    29.         if(infile.eof()) break;  
    30.         wordcount[s]++;  
    31.     }  
    32.     cout<<"單詞種類:"<<wordcount.size()<<endl;  
    33.     //優先隊列使用小頂堆,排在前面的數量少,使用">";  
    34.     priority_queue< pair< int,string >,vector< pair< int,string > >,greater< pair< int,string> > > queueK;  
    35.     for (map<string,int>::iterator iter=wordcount.begin(); iter!=wordcount.end(); iter++)  
    36.     {  
    37.         queueK.push(make_pair(iter->second,iter->first));  
    38.         if(queueK.size()>K)  
    39.             queueK.pop();  
    40.     }  
    41.     pair<int,string>tmp;  
    42.     priority_queue< pair< int,string >,vector< pair< int,string > >,less< pair< int,string> > > queueKless;  
    43.     while (!queueK.empty())  
    44.     {  
    45.         tmp=queueK.top();  
    46.         queueK.pop();  
    47.         queueKless.push(tmp);  
    48.     }  
    49.     while(!queueKless.empty())  
    50.     {  
    51.         tmp=queueKless.top();  
    52.         queueKless.pop();  
    53.         cout<<tmp.second<<"\t"<<tmp.first<<endl;  
    54.     }  
    55.     cout<<"< Elapsed Time: "<<(clock()-t)/CLOCKS_PER_SEC<<" >"<<endl;  
    56. }  
    57. int main()  
    58. {  
    59.     int k=0;  
    60.     cout<<"http://blog.csdn.net/NUPTboyZHB\n";  
    61.     while (true)  
    62.     {  
    63.         cout<<"PUT IN K: ";  
    64.         cin>>k;  
    65.         if(k<=0)break;  
    66.         topK(k);  
    67.     }  
    68.     return 0;  
    69. }  


    [圖2]

    RFID設備管理軟件

    參考:實驗室小熊 RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全