아래 단어들은 형태가 조금씩 다르지만 의미는 같습니다.
● US, USA, U.S., USA, America ...
이렇게 형태가 다르지만 같은 의미를 나타내는 단어들이 많아질수록 코퍼스는 복잡해지고 분석이 어려워집니다. 그래서 의미가 같은 단어라면 형태를 하나로 통일하는 게 좋습니다. 해당 과정을 정규화(Normalization)라고 합니다.
정규화에는 여러 방법이 있는데요. 이번 포스팅에서는 가장 보편적으로 사용되는 두 가지만 소개해 드리겠습니다.
정규화 방법: 대소문자 통합
대부분의 프로그래밍 언어는 대소문자를 구분합니다. 그래서 코퍼스를 대문자나 소문자 중 하나로 통일하면 정규화가 됩니다.
영어 문법 상 대문자는 특수한 상황에서만 사용되고, 보통은 소문자가 많이 사용됩니다. 따라서 대문자를 소문자로 바꾸는게 일반적입니다. 해당 과정에는 파이썬의 문자열 내장함수인 lower()가 사용됩니다.
text = "What can I do for you? Do your homework now."
# 소문자로 변환
print(text.lower())
do와 Do는 원래 다른 단어였지만, 소문자로 변환하여 완전히 같은 형태가 되었습니다.
정규화 방법: 규칙 기반 정규화
USA, US, U.S.는 형태가 다르지만 의미는 같습니다. 표준어는 아니지만 Umm과 Ummmm도 같은 의미이기 때문에 정규화 할 수 있죠. 이런 단어들은 규칙을 정의해서 하나의 표현으로 통합할 수 있습니다.
아래 코드는 US를 USA로, Ummmm을 Umm으로 통합하는 코드입니다.
# 동의어 사전
synonym_dict = {'US':'USA', 'U.S':'USA', 'Ummm':'Umm', 'Ummmm':'Umm' }
text = "She became a US citizen. Ummmm, I think, maybe and or."
normalized_words = []
# 단어 토큰화
tokenized_words = nltk.word_tokenize(text)
for word in tokenized_words:
# 동의어 사전에 있는 단어라면, value에 해당하는 값으로 변환
if word in synonym_dict.keys():
word = synonym_dict[word]
normalized_words.append(word)
한 부분씩 살펴볼게요. 먼저, 같은 의미를 가지는 단어들을 어떤 형태로 정규화할지 미리 정해야 합니다. 기준이 정해졌다면 정규화 할 단어들을 짝지어 딕셔너리 형태의 동의어 사전을 만들어 줍니다. 그리고, 분석에 활용할 텍스트와 정규화 된 단어들을 저장할 리스트트normalized_words도 만들어 줄게요.
# 동의어 사전
synonym_dict = {'US':'USA', 'U.S':'USA', 'Ummm':'Umm', 'Ummmm':'Umm' }
text = "She became a US citizen. Ummmm, I think, maybe and or."
normalized_words = []
다음으로, 문장을 단어 토큰화 한 다음 토큰들을 순회하면서 동의어 사전의 키에 해당 단어가 포함되는지 확인합니다. 만약에 포함된다면 정규화할 단어로 바꿉니다.
# 단어 토큰화
tokenized_words = nltk.word_tokenize(text)
for word in tokenized_words:
# 동의어 사전에 있는 단어라면, value에 해당하는 값으로 변환
if word in synonym_dict.keys():
word = synonym_dict[word]
normalized_words.append(word)
결과를 확인해 볼게요.
# 결과 확인
print(normalized_words)
US는 USA로, Ummmm은 Umm으로 잘 변경되었네요.
이번 포스팅에서는 가장 기본적인 정규화 방법을 배워봤는데요. 이외에도 어간 추출, 표제어 추출이라는 방법도 있습니다.
어간 추출은 바로 다음 포스팅에서, 표제어 추출은 다음 챕터에서 다뤄보겠습니다.
'Data Analysis > Natural Language Processing(NLP)' 카테고리의 다른 글
어간 추출 실습 (0) | 2023.06.09 |
---|---|
어간 추출(Stemming) (0) | 2023.06.08 |
자연어 전처리 적용 I (0) | 2023.06.08 |
불용어 제거 실습 (0) | 2023.06.08 |
불용어(Stopwords) (0) | 2023.06.08 |