2013-10-17 3 views
0

나는 파일에서 많은 이메일 주소 목록을 가지고 있습니다. 약 1 백만 개의 이메일 ID가 나옵니다. 나는 스팸, 정크 등과 같은 나쁜 단어 목록을 가지고있다. 그것은 20,000 개 이상의 나쁜 단어로 구성되어있다.PHP를 사용하여 이메일 주소의 큰 목록에서 나쁜 단어 찾기 - 몽고

이메일 ID의 유효성을 검사해야합니다. 전자 메일 ID에 잘못된 단어가있는 경우 잘못된 것으로 표시됩니다.

예 :

[email protected] -

[email protected] 무효 -

무효 내가 배열 루프는 시간이 걸릴 것 같은 빠른 비교 방법이 될 것이다 알고 싶습니다.

I는 100 만 개 데이터를 비교할 때, 상기 방법은 더 많은 시간이 걸리는 방법

//$keyword_list- array of bad words; 

//$check_key- the email id which need to validate 

$arrays = array_chunk($keyword_list, 2000); 
for($i=0;$i<count($arrays);$i++) 
{ 
    if (preg_match('/'.implode('|', $arrays[$i]).'/', $check_key, $matches)){ 
     return 1; 
    } 

} 

다음 시도.

다음으로 우리는 다음과 같은 코드를 시도하고이 또한 더 많은 시간을

//$contain = bad words separated by '|' 
// $str - the email id which need to validate 

if(stripos($contain,"|") !== false) 
{ 
    $s = preg_split('/[|]+/i',$contain); 
    $len = sizeof($s); 
    for($i=0;$i < $len;$i++) 
    { 
     if(stripos($str,$s[$i]) !== false) 
     { 
      return(true); 
     } 
    } 
} 
if(stripos($str,$contain) !== false) 
{ 
    return(true); 
} 

return(false); 

마지막으로 내가 시도했다 MongoDB를 텍스트 검색을합니다.

'지옥'이 내 목록에있는 단어이고 내 이메일 ID가 [email protected]linglysussex.sch.uk 인 경우 Mongodb 텍스트 검색과 일치하지 않습니다.

다음은 내가 사용한 코드입니다.

$ret = $db->command(array("text" =>$section, "search" => $keyword_string,  "limit"=>$cnt_finalnonmatch)); 
where $section = Collection name, 
$keyword_string = Comparing keywords string separated by space, for eg "Hell Spam Junk" etc, 
$cnt_finalnonmatch = total number of comparing email ids 

나를이 문제를 해결하는 데 도움이 바랍니다.

+0

$ keyword_string을 100 %로 var_dump() 할 수 있었습니까? "지옥"이라는 단어가 어떤 이유로 든 엉성 해졌습니까? 실제로 거기에 있고 실제로보고되지 않은 성냥이 있다면 MongoDB에 버그가 있습니다. – bjori

+0

사실, 아니요, 틀렸어. MongoDB의 텍스트 검색은 텍스트 검색의 논리적 단위 인 단어에 대해 작동합니다. 이 설정은 조정할 수 없으므로 "부분 일치"를 할 수 없습니다. 미안합니다 – bjori

답변

0

소문자 (또는 대문자)하는 모든 문자열과 단어를 강제하는 것;

$ keywords = $ key [ 'keyword']; // 키워드를 비교해야합니다 $ regexObj = new MongoRegex ("/".$ 키워드."/ i "); // MongoRegex 함수 선언 $ where = array ($ section => $ regexObj); // $ section은 콜렉션 이름 $ resultset = $ info-> find ($ where);

0

전적으로 확신 할 수 없지만 mongodb는 대소 문자를 구분하므로 텍스트를 검색 할 때 '지옥'이 '지옥'과 같지 않은 것으로 의심됩니다.

이 솔루션은 우리가이 문제를 해결하기 위해 '처럼'MongoDB를 사용했다

+0

아니요, 대소 문자를 구분하지 않습니다. 나는 이것에 대해 더 확인하고있다. – Abhilash