<aside> 💬
lv1
, 문자열 처리
, N-gram
주어진 문자열과 정수 N에 대해, 문자열의 N-gram을 생성하는 코드를 작성해주세요. N-gram은 주어진 문자열에서 N개의 연속된 요소를 순차적으로 추출한 것입니다. 예를 들어, 문자열 "hello"에 대한 2-gram은 ['he', 'el', 'll', 'lo']입니다. 만약 문자열의 길이가 N보다 작다면, 빈 리스트를 반환합니다.
입력 (문자열, N) | 출력 (N-gram 리스트) |
---|---|
("hello", 2) | ['he', 'el', 'll', 'lo'] |
("world", 3) | ['wor', 'orl', 'rld'] |
("python", 5) | ['pytho', 'ython'] |
주어진 문자열에서 N개의 연속된 문자를 순차적으로 추출하여 리스트로 반환합니다. 문자열 길이가 N보다 작은 경우 빈 리스트를 반환합니다. 예를 들어, "python" 문자열에 대한 5-gram은 연속된 다섯 글자씩 추출한 결과이므로 ['pytho', 'ython']이 됩니다. 문자열의 길이가 N보다 작은 경우, 예를 들어 "hi" 문자열에 대한 3-gram은 불가능하므로, 이 경우에는 빈 리스트를 반환합니다. 주어진 문자열에서 N개의 연속된 문자를 순차적으로 추출하여 리스트로 반환합니다. 문자열 길이가 N보다 작은 경우 빈 리스트를 반환합니다.
</aside>
def solution(data): **#1 함수 정의**
text, n = data **#2 데이터 분리**
if len(text) < n: **#3 조건 검사**
return [] **#4 빈 리스트 반환**
return [text[i : i + n] for i in range(len(text) - n + 1)] **#5 N-gram 리스트 반환**
함수 정의
코드의 첫 부분에서 solution
이라는 함수를 정의합니다. 이 함수는 하나의 인자 data
를 받습니다. data
는 N
개의 연속된 문자열이 순차적으로 추출된 리스트를 구하기 위해 주어지는 문자열과 정수 N
입니다.
데이터 분리
data
에서 문자열과 정수 N
을 text, n
으로 언패킹합니다.
조건 검사
if len(text) < n:
을 통해 문자열 text
의 길이 len(text)
가 정수 n
보다 작다는 조건을 검사합니다. 문자열 text
가 해당 조건을 만족한다면, 조건문 아래 코드를 실행합니다.
빈 리스트 반환
만일 len(text)
이 정수 n
보다 작다면, 문자열 text
에서 n
개의 연속된 문자를 추출할 수 없습니다. 그러므로 이럴 때, 문제에서 요구한 대로 빈 리스트를 반환합니다.
N-gram 리스트 반환
len(text)
가 n
이상이면, text
에서 n
개의 연속된 문자로 추출하도록 슬라이싱하여 윈도우를 구할 수 있고 최초 슬라이싱을 포함하여 1번 이상 슬라이딩을 진행할 수 있습니다. 그렇다면 연속된 n
개의 문자를 순차적으로 슬라이딩하여 리스트로 반환해야 합니다.len(text) - n + 1
입니다. 그리고 for i in range(len(text) - n + 1)
와 같이 for
와 range
를 통해 슬라이딩 횟수만큼 슬라이딩을 진행합니다.i
는 윈도우를 구하기 위해 슬라이싱의 인덱스 시작점으로 사용됩니다. 그럼 슬라이딩할 때마다 text[i : i + n]
를 통해 문자열 text
를 슬라이싱하여 n
개의 연속된 문자를 구하고 리스트에 추가합니다.[text[i : i + n] for i in range(len(text) - n + 1)]
로 연산하고 그 결과인 N-gram 리스트를 반환합니다.N-gram
기본 형태: 전체 문자열로부터 연속된 N 개의 문자
를 순차적으로 추출하는 코드
개념: N-gram
은 전체 문자열에서 연속된 N
개의 문자로 이어진 문자열을 순차적으로 추출합니다.
string = 'Hello'
N = 3
sliding_count = len(string) - N
for i in range(sliding_count + 1):
print(string[i:i+N])
'''
# 출력 결과
Hel
ell
llo
'''
def solution(data): **#1 함수 정의**
word, n = data[0], data[1] **# 2 데이터 분리**
return [word[i:i+n] for i in range(len(word)-n+1)] **#3 N-gram 리스트 반환**
함수 정의
코드의 첫 부분에서 solution
이라는 함수를 정의합니다. 이 함수는 하나의 인자 data
를 받습니다. data
는 N
개의 연속된 문자열이 순차적으로 추출된 리스트를 구하기 위해 주어지는 문자열과 정수 N
입니다.
데이터 분리
data
에서 문자열 data[0]
과 정수 N
data[1]
을 word, n
으로 언패킹합니다.
N-gram 리스트 반환
n
개의 연속된 문자열은 word[0:0+n]
을 통해 구할 수 있습니다. 그리고 연속된 문자열을 추출할 수 있는 조건은 len(word) > n
이므로 마지막으로 오는 n
개의 연속된 문자열은 word[len(word)-n:len(word)]
으로 구할 수 있습니다.word[0:0+n]
을 시작으로 마지막에 word[len(word)-n:len(word)]
을 추출하기 위해, 문자열 word
의 슬라이싱의 인덱스 시작점을 0
에서 len(word)-n
까지 순차적으로 높일 수 있는 for
문 word[i:i+n] for i in range(len(word)-n+1)
을 만들 수 있습니다.for
문 아래 코드 word[i:i+n]
의 결과를 리스트에 바로 추가합니다. 이렇게 만들어진 N-gram 리스트를 return [word[i:i+n] for i in range(len(word)-n+1)]
을 통해 반환합니다.