23.3 연습문제: 단어 단위 N-gram 만들기
표준 입력으로 정수와 문자열이 각 줄에 입력됩니다. 다음 소스 코드를 완성하여 입력된 숫자에 해당하는 단어 단위 N-gram을 출력하세요. 만약 입력된 문자열의 단어 개수가 입력된 정수 미만이라면 'wrong'을 출력하세요.
practice_n_gram_word.py
n = int(input()) text = input() words = ① if (② ): print('wrong') else: for i in ③ : for j in ④ : print(words[i + j], end=' ') print()
실행 결과
7 (입력) Python is a programming language that lets you work quickly (입력) Python is a programming language that lets is a programming language that lets you a programming language that lets you work programming language that lets you work quickly
실행 결과
7 (입력) Python is a programming language (입력) wrong
정답
① text.split() ② len(words) < n ③ range(len(words) - (n - 1)) ④ range(n)
해설
먼저 input으로 입력된 값은 한 줄로 된 문자열이므로 split을 사용하여 공백을 기준으로 분리한 뒤 words에 저장해줍니다.
여기서는 N-gram의 N이 변수 n에 저장되므로 n을 활용하여 조건식을 작성합니다. 먼저 단어 개수가 입력된 숫자 미만이면 'wrong'을 출력하라고 했으므로 if 조건문에는 len(words) < n을 넣어줍니다.
단어 리스트를 반복할 때는 리스트의 범위를 벗어나지 않도록 range(len(words) - (n - 1))만큼 반복합니다. 참고로 2-gram은 요소 한 개 앞까지 반복하므로 range(len(words) - 1)이고, 7-gram은 요소 여섯 개 앞까지 반복하므로 range(len(words) - (7 - 1))입니다. 그러므로 문자열 마지막에서 (n - 1) 글자 앞까지 반복합니다.
단어를 출력할 때도 n개만큼 출력할 수 있도록 range(n)를 넣어주면 됩니다.