나는 파일에서 많은 이메일 주소 목록을 가지고 있습니다. 약 1 백만 개의 이메일 ID가 나옵니다. 나는 스팸, 정크 등과 같은 나쁜 단어 목록을 가지고있다. 그것은 20,000 개 이상의 나쁜 단어로 구성되어있다.PHP를 사용하여 이메일 주소의 큰 목록에서 나쁜 단어 찾기 - 몽고
이메일 ID의 유효성을 검사해야합니다. 전자 메일 ID에 잘못된 단어가있는 경우 잘못된 것으로 표시됩니다.
예 :
[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
나를이 문제를 해결하는 데 도움이 바랍니다.
$ keyword_string을 100 %로 var_dump() 할 수 있었습니까? "지옥"이라는 단어가 어떤 이유로 든 엉성 해졌습니까? 실제로 거기에 있고 실제로보고되지 않은 성냥이 있다면 MongoDB에 버그가 있습니다. – bjori
사실, 아니요, 틀렸어. MongoDB의 텍스트 검색은 텍스트 검색의 논리적 단위 인 단어에 대해 작동합니다. 이 설정은 조정할 수 없으므로 "부분 일치"를 할 수 없습니다. 미안합니다 – bjori