.split()
을 사용해 쉽게 단어 토큰화를 구현할 수 있다.
영어에서 공백을 기준으로 수행하는 단어 단위 토큰화를 **공백 단위 토큰화(space tokenization)**이라고 한다.<aside> 💡 토큰화기 구현 설명 공백으로 토큰을 구분하되 . , ! ? 문장 부호는 별개의 토큰으로 처리되어야 합니다. 영문에서 Apostrophe에 해당하는 ' 는 두가지 경우에 대해 처리해야합니다. 1. not의 준말인 n't은 하나의 토큰으로 처리되어야 합니다: don't ==> do n't 2. 다른 Apostrophe 용법은 뒤의 글자들을 붙여서 처리합니다: 's 'm 're 등등 그 외 다른 문장 부호는 고려하지 않으며, 작은 따옴표는 모두 Apostrophe로 처리합니다. 모든 토큰은 소문자로 변환되어야 합나다.
힌트: 정규표현식을 안다면 re 라이브러리를 사용해 보세요!
예시: 'I don't like Jenifer's work.'
==> ['i', 'do', 'n\\'t', 'like', 'jenifer', '\\'s', 'work', '.']
</aside>
방법1) append를 사용해 무지성 for문으로 구현
typing
모듈은 작성한 대로 변수의 데이터 타입을 강제하지 않아 output: List[int]
라고 작성해도 output= [1, 2, 3]
으로 값을 넣을 수 있다.from typing import List
def tokenize(sentence: str) -> List[str]:
"""
Arguments:
sentence -- 토큰화할 영문 문장
Return:
tokens -- 토큰화된 토큰 리스트
"""
### YOUR CODE HERE
tokens: List[str] = list()
tokens = sentence.lower().split()
res = []
punc = ['.', ',', '!', '?']
# 방법1 - append 사용
for token in tokens:
if token[-1] in punc:
res.append(token[:-1])
res.append(token[-1])
elif token[-3:] == "n't":
res.append(token[:-3])
res.append(token[-3:])
elif len(token)>=2 and token[-2] == "'":
# 's 'm
res.append(token[:-2])
res.append(token[-2:])
elif len(token)>=3 and token[-3] == "'":
# 're 've
res.append(token[:-3])
res.append(token[-3:])
else:
res.append(token)
# ### END YOUR CODE
return res
방법2) extend를 사용해 무지성 for문으로 구현
def tokenize2(sentence: str) -> List[str]:
tokens: List[str] = list()
tokens = sentence.lower().split()
res = []
punc = ['.', ',', '!', '?']
# 방법2 - extend 사용
for token in tokens:
if token[-1] in punc:
res.extend([token[:-1], token[-1]])
elif token[-3:] == "n't":
res.extend([token[:-3], token[-3:]])
elif len(token)>=2 and token[-2] == "'":
# 's 'm
res.extend([token[:-2], token[-2:]])
elif len(token)>=3 and token[-3] == "'":
# 're 've
res.extend([token[:-3], token[-3:]])
else:
res.append(token)
return res
방법3) 정규표현식 re 사용