다른 Apostrophe 용법은 뒤의 글자들을 붙여서 처리합니다 ('s 'm 're)

기존의 코드는 다음과 같았다.

    sentence = re.sub(r"(\\w+)'(s|m|re)",r"\\1 '\\2",sentence)

하지만, 영어에는 3가지 경우 외에도 ‘ll. ‘ve 등 한정적이지만 다양한 표현이 존재한다. 따라서 Apostrophe 뒤에 t가 오는 경우를 제외하고 다른 알파벳의 조합이 오는 경우 sub할 수 있도록 코드를 변경하였다.

    sentence = re.sub(r"(\\w+)'([a-s,u-z]+)",r"\\1 '\\2",sentence)

not의 준말인 n't은 하나의 토큰으로 처리하기 위해 아래와 같은 코드를 작성하였다.

    sentence = re.sub(r"(\\w+)n't",r"\\1 n't",sentence)

하지만 can’t의 경우, ca n’t가 되어 의미가 사라진다.

어떤 tokenizer를 사용하느냐에 따라서 나뉘는 형식이 달라지는데요. 말씀해주신 것처럼 코드 상에서는 do와 n't로 토큰화가 수행되고, 다른 tokenizer를 이용한다면 don과 't와 같은 방식으로도 토큰화가 수행될 수 있습니다.

말씀해주신 것처럼, can의 의미가 사라진다고 볼 수 있습니다.

보통 can't와 같은 조동사는 불용어 사전에 포함되어, 불용어 제거 단계에서 제거가 되는데요. 사실 모델이 문장을 이해하는데 주로 사용하는 단어는 동사, 형용사, 명사와 같이 “의미를 가지는 단어”라고 이해하시면 좋을 것 같습니다.

이런 방식으로 조동사가 제거 되어도, 언어 모델들은 문장의 전체적인 문맥을 분석해서 그 의미를 분석할 수 있습니다. 제거되지 않은 단어들의 패턴이나 위치에서 부정적인 의미를 추론할 수 있다고 이해해주시면 좋을 것 같습니다.

다양한 토크나이저 라이브러리가 존재하는데,