30.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)를 넣어주면 됩니다.