青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

勤能補拙,Expter

成都游戲Coder,記錄游戲開發過程的筆記和心得!

一個關鍵字過濾算法

      經常某些論壇,或者軟件中對某些字符串進行了關鍵字過濾, 一般代替為*號,一般的算法是利用strstr算法,即使是string的find子串算法復雜度也是(N*log(n)),并非kmp算法,也非bm查找子串算法。
     對于一組關鍵字過濾,特別是對于一組字符串多,且長度不規律的字符串過濾算法完全是有必要的。
   
    網上對于關鍵字過濾算法較多,且實現方法較多,本文主要介紹基于一種把關鍵字轉換為Unicode,然后對關鍵字的字符或者單個關鍵字hash求值。算法復雜度為O(n).
   對于漢字的hash值的求法,因為是Unicode編碼是16位,哈希求值:

  /// 求漢字的哈希值
long HashFun(wchar_t  word)
{
 BYTE l 
= LOBYTE(word);
 
int  h = HIBYTE(word);

 
long num = h << 8 ;
 num 
+=l;
 
return num;
}



    基本算法思想;
   1.建立2個過濾關鍵字數組:數組1:為單個字符  數組2:為2個或者多個字符
   2.求出數組1,2的hash值,數組2的hash值只求出前2個字符的hash值即可。
   3.掃描待檢測的文本,然后每次取2個字符,查找數組2是否有匹配,如果沒有則查找數組1。。。。  查找為O(1)

  主要代碼如下:


/*
   File :  WordFilter.cpp 
   brief:  關鍵字過濾程序,復雜度為O(n),線性
   Author: Expter
   Data  : 2009/06/30

   對漢字或者字符進行哈希算法,先轉換為unicode編碼,然后求其hash值。

   主要算法為:
   1.建立2個過濾關鍵字數組:數組1:為單個字符  數組2:為2個或者多個字符
   2.求出數組1,2的hash值,數組2的hash值只求出前2個字符的hash值即可。
   3.掃描待檢測的文本,然后每次取2個字符,查找數組2是否有匹配,如果沒有則查找數組1。。。。  查找為O(1)


   不足:
   不能很好的分詞。過濾不是很準確,每次只能1,2個詞的過濾。
*/

#include 
<stdlib.h>
#include 
<iostream>
#include 
<map>
#include 
<vector>
#include 
<string>
#include 
<windows.h>
#include 
<wchar.h>  
#include 
<iosfwd>
using namespace std;

wchar_t des1 [
5][2= { L"",L"",L"",L"",L""};
wchar_t des2 [
3][5= { L"用漢", L"的啥" ,L"測試啊"};
wchar_t src[]  
= { L"這個原來是打算的啥子東西用漢字只是一個是不是測試"};


/// 求漢字的哈希值
long HashFun(wchar_t  word)
{
    BYTE l 
= LOBYTE(word);
    
int  h = HIBYTE(word);

    
long num = h << 8 ;
    num 
+=l;
    
return num;
}


long HashFun(wchar_t * word)
{
    
return HashFun(word[0])*10 + HashFun(word[1]);
}



void  ParamVer(map<long,int> hashmp , wchar_t *src , int i)
{
    
long val = HashFun(src[i+1]);
    
if(hashmp[val] == 1)
    
{
        src[i
+1= L'*';
    }

}

void  VmAlorgthm(map<long,int> hashmp,wchar_t *src)
{
    
long val = 0;
    
int  m = wcslen(src) ;
    
// O(n);
    for(int i = 0 ; i < m-1  ; i ++)
    
{
        
if( HashFun(src[i]) != L'*')
        
{
            val 
= HashFun(src[i]) + HashFun(src[i+1]);
            
if( hashmp[val] == 1)
            
{
                src[i] 
= L'*';
                src[i
+1=L'*';
            }

            
else
            
{
                val 
= HashFun(src[i]);
                
if(hashmp[val] == 1)
                
{
                    src[i] 
= L'*';
                }

                
else
                
{
                    ParamVer(hashmp,src,i);
                }

            }

        }

        
else
        
{
            ParamVer(hashmp,src,i
+1);
        }

    }

    ParamVer(hashmp,src,m
-1);
}



int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(
"chs"));     
    typedef map
<long,int> HASHMAP;

    cout 
<<" 需要過濾文本: ";
    wcout
<< src <<endl;
    cout 
<<" 過濾關鍵字 : " ;
    
for(int i = 0 ;i < 5; i++)
        wcout 
<< des1[i][0<<" ";
    wcout 
<<endl;
    cout 
<<" 過濾關鍵詞 : " ;
    
for(int i = 0 ;i < 3; i++)
        wcout 
<< des2[i] <<" ";
    wcout 
<<endl;

    
long  val = 0;

    HASHMAP hash_map;
    
/// 字 hash
    for(int i = 0 ; i < 5 ; i++)
    
{
        val 
= HashFun(des1[i][0]);
        hash_map[val] 
= 1;
    }

    
/// 詞 hash
    for(int i =0 ; i < 3 ; i++)
    
{
        val 
= HashFun(des2[i]);
        hash_map[val] 
= 1;
    }

    
    VmAlorgthm(hash_map,src);
    
    cout 
<<"\n-------------------------------------------------------------\n"
        
<<" 過濾后的文本: ";
    wcout
<< src <<endl;

    
return 0;
}

posted on 2009-07-12 22:07 expter 閱讀(4156) 評論(4)  編輯 收藏 引用 所屬分類: 其他學習筆記算法與數據結構

評論

# re: 一個關鍵字過濾算法[未登錄] 2009-07-13 11:33 megax

用hash,對于詞組來說本身就有不確定性  回復  更多評論   

# re: 一個關鍵字過濾算法 2009-07-14 00:42 XXOO

我一般是先把詞組排序,然后對每個字進行二分法這樣。或者也可以HASH
  回復  更多評論   

# re: 一個關鍵字過濾算法 2009-07-14 12:37 戴爾電腦

看了有點幫助!!  回復  更多評論   

# re: 一個關鍵字過濾算法[未登錄] 2009-07-20 09:10 cc

你這個hashfun有干活嗎?傳進去的值沒有變化啊  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区亚洲欧洲国产日韩| 亚洲与欧洲av电影| 一本色道久久88综合亚洲精品ⅰ| 在线观看欧美日韩国产| 激情六月婷婷综合| 亚洲高清色综合| av成人天堂| 亚洲欧美在线另类| 久久婷婷麻豆| 亚洲精品国产精品乱码不99按摩| 夜夜躁日日躁狠狠久久88av| 亚洲在线1234| 免费影视亚洲| 国产精品美女久久福利网站| 国产视频一区欧美| 亚洲美女在线一区| 欧美中文字幕视频| 女人色偷偷aa久久天堂| 亚洲免费精彩视频| 久久精品免费观看| 欧美视频网址| 亚洲大胆女人| 先锋影音网一区二区| 免费日韩av电影| 一本久道久久久| 久久综合给合久久狠狠色| 欧美日韩视频在线观看一区二区三区| 国产色产综合产在线视频| 亚洲精品一区二| 久久国产精品高清| 国产又爽又黄的激情精品视频| 一区二区视频免费在线观看| 亚洲午夜av电影| 欧美国产精品一区| 欧美亚洲一级| 国产欧美欧洲在线观看| 欧美在线国产| 欧美日韩中文字幕日韩欧美| 精品成人乱色一区二区| 午夜精品福利一区二区蜜股av| 欧美福利一区| 欧美一级久久| 国产精品国产精品| 在线一区二区三区四区五区| 蜜桃精品一区二区三区 | 在线成人激情| 欧美一区免费视频| 99热免费精品| 欧美四级在线| 国产精品99久久久久久久vr| 亚洲欧洲日本在线| 麻豆国产精品va在线观看不卡| 国产一区二区中文| 欧美一级电影久久| 亚洲愉拍自拍另类高清精品| 欧美系列精品| 午夜精品免费| 午夜亚洲影视| 国产日韩欧美在线| 久久国产日韩| 欧美在线视频播放| 影音先锋国产精品| 女同一区二区| 欧美v国产在线一区二区三区| 亚洲国产精品99久久久久久久久| 欧美jizz19性欧美| 女同一区二区| 一本色道久久| 亚洲一区久久久| 国产欧美一区二区视频| 欧美在线一区二区三区| 久久精品中文字幕一区| 伊人夜夜躁av伊人久久| 欧美大片一区| 欧美日韩成人在线播放| 亚洲一区久久| 亚洲影院在线| 玉米视频成人免费看| 欧美福利在线观看| 欧美视频成人| 久久嫩草精品久久久精品一| 久久嫩草精品久久久精品一| 久久精品视频免费观看| 亚洲国产黄色| 亚洲一区国产精品| 亚洲福利一区| 一个人看的www久久| 国产农村妇女精品一二区| 麻豆精品国产91久久久久久| 欧美日韩国产精品| 久久人人97超碰国产公开结果| 欧美福利精品| 久久久99爱| 欧美人与性动交α欧美精品济南到| 欧美视频精品在线观看| 久久精品在这里| 国产精品成人aaaaa网站| 亚洲综合色在线| 久久精品亚洲| 亚洲图片欧美一区| 噜噜噜噜噜久久久久久91| 亚洲夜间福利| 六月婷婷久久| 欧美在线免费播放| 欧美日韩三级| 欧美国产一区二区| 国产日韩欧美亚洲一区| 日韩一区二区高清| 亚洲高清不卡一区| 亚洲欧美中日韩| 中日韩美女免费视频网址在线观看 | 亚洲电影在线| 香蕉乱码成人久久天堂爱免费| 99re热这里只有精品视频| 久久久久久九九九九| 欧美一区二区性| 欧美日韩精品一区二区天天拍小说| 久久亚洲私人国产精品va媚药| 国产精品久久999| 亚洲日本中文| 亚洲三级电影在线观看| 久久噜噜噜精品国产亚洲综合| 欧美日韩亚洲一区| 欧美成人免费网站| 激情综合五月天| 欧美一区二区在线看| 亚洲欧美日韩国产一区二区三区| 模特精品裸拍一区| 欧美成人午夜影院| 伊人男人综合视频网| 久久国产精品72免费观看| 久久av二区| 国产在线日韩| 久久精品国产清高在天天线 | 性欧美激情精品| 国产精品jvid在线观看蜜臀| 亚洲精品日韩激情在线电影| 亚洲乱码一区二区| 欧美黑人多人双交| 99re热精品| 亚洲综合视频网| 国产精品久久影院| 亚洲欧美日韩天堂| 久久精品国产久精国产一老狼 | 亚洲激情电影中文字幕| 亚洲第一精品夜夜躁人人爽| 午夜精品一区二区三区在线播放| 国产精品久久久久久久第一福利| 亚洲性视频h| 欧美综合国产| 亚洲国产日韩欧美| 女女同性女同一区二区三区91| 欧美激情精品久久久久久免费印度 | 国产农村妇女精品一区二区| 午夜精品一区二区三区电影天堂 | 欧美国产三级| 日韩亚洲成人av在线| 欧美日韩国产精品专区| 亚洲视频在线观看网站| 久久久久久91香蕉国产| 亚洲高清一二三区| 欧美日韩国产一区二区| 午夜精品一区二区三区在线视| 麻豆av一区二区三区| 亚洲人成小说网站色在线| 欧美日韩视频专区在线播放| 香蕉乱码成人久久天堂爱免费| 欧美成人精品福利| 国产精品99久久久久久人| 国产亚洲一级高清| 欧美区国产区| 久久精品人人| 亚洲天堂成人在线观看| 美国十次成人| 午夜综合激情| 一本久久青青| 亚洲国产欧美一区二区三区同亚洲 | 亚洲另类在线视频| 国产精品进线69影院| 欧美在线看片a免费观看| 亚洲精品极品| 噜噜爱69成人精品| 亚洲综合大片69999| 亚洲第一毛片| 国产麻豆精品theporn| 欧美韩日一区二区| 久久精品视频导航| 亚洲私人影院在线观看| 亚洲国产高清aⅴ视频| 久久久久久91香蕉国产| 亚洲欧美另类在线| 一本久道久久久| 亚洲三级影院| 亚洲成色www8888| 狠狠色丁香久久综合频道| 国产精品羞羞答答| 欧美性感一类影片在线播放 | 久久精品在线免费观看| 亚洲综合日韩中文字幕v在线| 亚洲精品一区二区网址|