2020-08-28 18:30:34

성인 포르토 사이트를 홍보하려는 이메일에는 sex, sexy, cute, girl, girls 등의 단어가 많이 출현할 것 같습니다. (사실 요즘은 스팸 메일을 보내는 사람들이 더 정교해져서 이렇게 허술하진 않겠지만요^^;) sex, sexy, cute, girl, girls과 같은 단어들이 문장 내에서 총 3번 이상 출현하면 스팸메일로 지정하는 코드를 만들어보도록 하겠습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
email = list(input("문자열을 입력하세요>").split(" "))
 
cnt = 0
for word in email:
    if word.strip(".,"== "sex" or word.strip(".,"== "sexy" or word.strip(".,"== "girl" or word.strip(".,"== "girls" or word.strip(".,"== "cute":
        cnt += 1
 
print()
if cnt >= 3:
    print(f"유해 단어 {cnt}회 출현! 스팸메일입니다. ")
else:
    print(f"유해 단어 {cnt}회 출현! 스팸메일이 아닙니다. ")
print()
cs

 

위 코드에는 두 개의 문자열 클래스 메소드 split()strip()이 출현합니다. split() 메소드는 넘겨받은 매개변수를 기준으로 문자열을 분할해주는 메소드인데, 예제에서는 split(" ")와 같이 사용했기 때문에 공백을 기준으로 입력받은 문자열을 분할해서 하나씩 리스트에 담아줍니다. 또한 strip() 메소드는 문자열의 시작 또는 끝에 매개변수로 넘겨받은 문자가 있다면 그것을 제거해줍니다. 예제에서는 strip(".,")와 같이 사용되었기 때문에 문자열의 처음 또는 끝에 . 또는 ,가 있다면 제거해줍니다. 

 

한번 위 예제 코드가 스팸메일을 잘 찾아내는지 한번 테스트해보겠습니다. 

 

 

 

첫번째 문자열의 경우 위험 단어인 girl, sexy, girls가 각각 한번씩 출현했습니다. 총 3개의 유해 단어가 감지되었기 때문에 스팸메일로 분류되었습니다. 반면 두번째 문자열에는 단 하나의 유해 단어도 발견되지 않았기 때문에 스팸메일로 구분하지 않았습니다.  

 

실제로 스팸 메일을 찾아내는 알고리즘은 이것보다 훨씬 복잡하고 정교하겠지만, 기본 원리는 비슷하지 않을까요? ㅎㅎ 

 

관련 글

[python] 숫자 여러 개 한 번에 입력받기, input(), split(), map() 함수

 

(이 글은 2021-6-8에 마지막으로 수정되었습니다)