2010-05-13 2 views
1

이것은 이것을 알아 내려고하는 사용 사례입니다.문자열 내의 유사점과 패턴을 찾습니다 - Python

나는 서비스에 대한 스팸 구독 목록을 가지고 있으며 변환 비율 및 기타 사용 가능성 연구를 죽이고 있습니다. 다음과 같은

이메일에 삽입보기 :

[email protected]

[email protected]

[email protected]

로저 ... ] _surname [...] @ hotmail.com


자동 스크립트를 사용하여이 항목을 찾는 방법에 대한 제안 사항은 무엇입니까? 그것은 실제로 보이는 것보다 조금 더 복잡하다고 느낍니다.

도움을 주시면 대단히 감사하겠습니다.

답변

3

나는 이것을 쉽게 확인할 수 있다고 생각하지 않습니다.'Roger'라는 이름을 사용하는 것이 단지 예일 뿐이므로 정규 표현식을 던질 수있는 간단한 문자열 매칭 문제 일 가능성은 낮습니다. 그리고 그 수만큼의 이름이 해당 위치에 나타날 수 있습니다. 또한 다른 포스터에서 제공하는 정규 표현식 중 하나를 실행하여 명백한 이름과 성의 모든 순열과 함께 매개 변수화 할 수 있습니다. 이것은 아마도 "너무 길다"와 "영원히"사이의 어딘가에 걸릴 것이고 많은 오탐 (false positive)을 일으킬 것입니다.

위에서 게시 한 패턴과 함께 작동하는 또 다른 접근법은 사용자 이름의 마지막 4자를 가져 와서 비교하는 것입니다. 합당한 텍스트에 마르코프 체인을 교육하면 분별력있게 (특정 언어가 지정된 경우) 정렬되지 않고 무작위로 나타나는 문자를 찾아 낼 수 있습니다. 그런 다음 해당 언어로 주어진 4 개의 문자가 나타날 확률을 계산할 수 있습니다. 무작위 문자의 경우이 확률은 일반적으로 합법적 인 이름보다 훨씬 낮습니다 (특수 문자 또는 숫자가있는 경우 모든 베팅은 꺼져 있음).

다른 방법으로는 합법적 인 이메일 주소의 마지막 4 글자에 대해 베이 즈안 필터 (예 : Reverend, 예 : Python의 경우)를 사용할 수 있습니다. 아마도 데이터를 사용할 수있게 만든다면 무작위였던 것의 95 %를 발견 할 것입니다. 예. 각 글자의 컨텍스트를 캡처하기 위해 4 글자가 아닌 2 글자와 3 글자의 하위 문자열을 제출하십시오. 나는 이것이 마르코프 스타일의 방법뿐만 아니라 작동 할 것이라고 생각하지 않는다.

어떤 검사를하든, 특정 전자 메일 주소 (예 : 밑줄을 포함하는 웹 메일 주소의 경우에만 3 자 이상, 5 자 이후) 만 제출하여 위양성을 줄일 수 있습니다.)

하지만 궁극적으로 스팸 주소인지 아니면 실제 목적인지 여부를 모를 수 있습니다. 그래서 가능하다면 콘텐츠를 분석하고 다른 곳에서 문제를 해결하려고 시도하는 것을 포기할 것을 제안합니다. 어떤 방법으로 그들은 전환율을 죽입니까? 이러한 가짜 계정을 일종의 측정 항목으로 계산하는 경우 먼저 확인 단계를 추가하고 인증을 통과 한 계정에 대한 측정 항목 만 신경 써주는 것이 가장 좋습니다. 어떤 사람들에게는 실제로 [email protected]과 같은 주소가 있습니다.

+0

성직자는 아주 굉장한 것처럼 보입니다. 그리고 끝내 대답에 감사드립니다! – RadiantHex

1

나는 당신이 확인하여, 잠재적 인 문제로 플래그 그것보다 더 많은 일을 할 수 있다고 생각하지 않습니다 : 그 스패머가 반복적으로 사용하는 패턴의 경우

^roger([a-z]{2})_([a-z]+)@hotmail.com

, regular expressions를 사용하여.

roger 뒤에 소문자 2자를 사용하는 것처럼 보이므로 작성했습니다. 성의 사전을 사용하는 방법에 대해 어떻게 생각하는지 모르시겠습니까? 당신은 아마 할 수 있지만, 어려울 수도 있습니다 (이는 다음 4 소문자 알파벳 문자가 성을 것으로 보인다).

^roger([a-z]{2})_([a-z]{5,})@hotmail.com

모든 성씨는 적어도 하나 개의 문자가 있다고 가정하는

1

처럼 소리 정규식 작업 :

if re.match("^roger[a-z]+_[a-z][email protected]$", email_address): 
    # might be your spammer 

(정규 표현식을 사용한 적이있는 경우, 여기에 무엇을 의미하는지에 대한 빠른 개요는 다음과 같습니다 ^는 문자열의 시작과 일치 $이 말과 일치하는, 그래서 우리가 그 심볼 사이의 모든 패턴 것을 요구하고 전체 문자열을 설명합니다. [a-z]은 소문자와 일치하며 +은 "1 회 이상"을 의미하므로 [a-z]+은 하나 이상의 소문자와 일치합니다. 문자열을 "문자열의 시작 부분, 문자 뒤에"roger ", 하나 이상의 소문자 뒤에 밑줄, 뒤에 하나 이상의 소문자가 오는 문자로 설명 할 수 있다면 정규 표현식은 모두 일치합니다 문자 다음에 @hotmail.com이오고 그 뒤에 문자열이옵니다. " 정규식이 일치하면 전자 메일 주소는 질문에 설명 된 패턴과 일치합니다.

물론, 패턴을 잡아서 변경하면 (예 : 이름을 바꿈)이 방법은 실패하고 보안 문자 (CAPTCHA) 사용과 같은보다 일반적인 스팸 방지 기술로 되돌아 가야합니다.

관련 문제