亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

統計英文文本中的詞頻

系統 2268 0

  NLP的文本分類過程中,大多會統計文章的詞頻,這是分類的重要依據之一。詞頻是由一個pair組成的,word是key

frequece是value。用什么方法統計最好,當然是map。用vector,list也可以實現,但是它們基于關鍵字的檢索效率沒有

map高,map一般是用rb-Tree實現的,查找效率是O(log(n)),list,vector都是線性的,查找復雜度是O(n)。

  先上代碼。

?

header
        
#ifndef _WORD_FREQUENCE_
#define _WORD_FREQUENCE_
#include
< map >
#include
< iostream >
#include
< string >
using std::map;
class WordFrequence{
public :
WordFrequence(): file_name_(NULL){}
WordFrequence(
char * file_name): file_name_(file_name){
LoadFromFile();
ReplaceSymbol();
parse();
}
private :
char * file_name_;
char * text;
map
< std:: string , int > word_frequence_map_;
void parse();
void ReplaceSymbol();
void LoadFromFile();
bool IsWhiteChar( const char chr);
friend std::ostream
& operator << (std::ostream & os, const WordFrequence & wf);
};
#endif

?

?

?

?

cpp
        
#include " word_frequence.h "
#include
< string >
#include
< iostream >
#include
< fstream >
#include
< map >

const char * symbols = " ~!@#$%^&*()_+-=[]\\{}|:\ " ; ' ,./<>?";
const int MAX_SIZE = 100000 ;

bool WordFrequence::IsWhiteChar( const char chr){
switch (chr){
case ' \t ' :
case ' \r ' :
case ' \n ' :
case ' ' :
case ' \0 ' :
return true ;
default :
return false ;
}
}

void WordFrequence::LoadFromFile(){
std::ifstream
is (file_name_, std::fstream:: in );
if ( ! is )
std::cerr
<< " error: can't open file: " << " [ " << file_name_ << " ] " << std::endl;
text
= new char [MAX_SIZE];
is .read(text, MAX_SIZE);
}

void WordFrequence::parse(){
word_frequence_map_.clear();
int index = 0 ;
int count = strlen(text);
std::
string str;
while (index < count){
for ( int i = index; i <= count; ++ i){
if (IsWhiteChar(text[i])){
int len = i - index + 1 ;
char * p = new char [len];
memcpy(p, text
+ index, i - index);
p[len
- 1 ] = ' \0 ' ;
str
= p;
++ word_frequence_map_[str];
index
= i + 1 ;
while (IsWhiteChar(text[index]))
++ index;
break ;
}
}
}
}

void WordFrequence::ReplaceSymbol(){
int j = 0 ;
while ( * (text + j) != ' \0 ' ){
for ( int i = 0 ; i < strlen(symbols); ++ i){
if ( * (text + j) == symbols[i])
* (text + j) = ' ' ;
}
j
++ ;
}
}

std::ostream
& operator << (std::ostream & os, const WordFrequence & wf){
os
<< " word\t\tfrequence " << std::endl;
os
<< " ----------------------- " << std::endl;
std::map
< std:: string , int > ::const_iterator i_begin = wf.word_frequence_map_.begin();
std::map
< std:: string , int > ::const_iterator i_end = wf.word_frequence_map_.end();
while (i_begin != i_end){
os
<< "" << i_begin -> first << " \t\t " << i_begin -> second << "" << std::endl;
++ i_begin;
}
return os;
}

?

?

?

?

      
#include < iostream >
#include
" word_frequence.h "
using namespace std;

int main( int argc, char * argv[])
{
WordFrequence wf(
" d:\\test.txt " );
return 0 ;
}

?

?

?

?

  實現的方式很簡單,首先把從文件里load出text,然后去掉里面的符號,最后掃描一遍文件,遇著單詞就塞到map

里面.

      ++word_freq_map["word"];


    

這句話太好用了。一句話實現插入map,如果有就增加value,如果沒有就插入。

?

  這個程序簡單訓練了一下map容器的使用方法,也用到文件的讀取。注意ostream open以后一定要判斷open

成功了沒有。ostream有幾種讀取方式,有格式化的>>讀取,也有getline這種一行讀取的,也有getchar這種一個字符

讀一次的。也有read這種一次讀一大段二進制的。讀的時候一定要對文件內容有先驗知識。

  如果一次讀的數據量很大,建議read來讀取,效率很高,用循環讀取可能效率很低。

統計英文文本中的詞頻


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久 在线 | 亚洲综合色网 | 色激情综合 | 久久久午夜精品 | 亚洲在线小视频 | 日本香蕉视频 | 亚洲一区播放 | 老子影院我不卡 | 欧美精品在线看 | 我想看一级毛片 | 在线欧美日韩 | 综合精品一区 | 国产亚洲美女精品久久久 | 欧美大片aaaa一级毛片 | 涩涩www在线观看免费高清 | 99久久国产综合精品成人影院 | 欧美日韩一二三 | 亚洲福利一区福利三区 | 91在线精品亚洲一区二区 | 亚洲成人伦理 | 久久精品国产999久久久 | 日韩se| www精品| 女色狠xx网18 | 亚洲一区二区高清 | 无夜精品久久久久久 | 欧美成人免费毛片 | 欧美激情免费 | 婷婷亚洲国产成人精品性色 | 2022色婷婷综合久久久 | 国产精品欧美一区二区三区不卡 | 国产亚洲精品sese在线播放 | 亚洲一级毛片在线播放 | 欧美成人全部免费观看1314色 | 狠狠色噜噜狠狠狠8888米奇 | 99久久国产综合精品成人影院 | 91久久精品都在这里 | 国产精品综合一区二区 | 久久九色 | www.欧美成 | 深夜天堂 |