당연한 이야기지만, 컴퓨터(인공지능)는 사람의 언어(자연어)를 이해하지 못한다.
자연어에 전처리 과정이 필수적이다.
주 전처리 과정
1. 소문자 변환: 한국어는 대소문자가 없으므로 생략.
2. 불필요한 문자 제거: 구두점, 숫자, 특수문자 등을 제거.
3. 불용어 제거: 의미가 적거나 필요 없는 단어(예: 조사, 접속사 등)를 제거.
4. 토큰화: 한국어는 형태소 단위로 토큰화해야 의미 있는 분석이 가능.
5. 어간 추출(형태소 분석): 한국어는 접미사, 어미 등이 다양해 어간 추출이 중요.
※ 예시 전처리 (GPT 참고)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # 필요한 라이브러리 설치 # pip install konlpy import re from konlpy.tag import Okt # 1. 형태소 분석기 설정 okt = Okt() # 2. 불용어 사전 정의 (한국어에서 자주 등장하는 조사, 접속사 등) stopwords = ['은', '는', '이', '가', '하', '을', '를', '에', '의', '도', '로', '과', '고', '에서', '까지', '부터', '에게', '한테', '지만', '또한'] # 3. 텍스트 전처리 함수 정의 def preprocess_korean_text(text): # 3.1. 특수문자, 숫자 제거 # re : python 에서 정규 표현식을 다루기 위한 내장 모듈 # 한국어에 대해서만 처리 text = re.sub(r'[^가-힣a-zA-Z0-9\s]', '', text) # 3.2. 형태소 분석을 통한 토큰화 tokens = okt.morphs(text) # 3.3. 불용어 제거 tokens = [token for token in tokens if token not in stopwords] # 3.4. 결과 반환 return tokens # 4. 테스트용 데이터 sample_text = "챗GPT는 인공지능 기술을 활용하여 사람들과 소통할 수 있는 언어 모델입니다!" # 5. 전처리 실행 processed_text = preprocess_korean_text(sample_text) print(processed_text) | cs |
- 챗 GPT 를 통해 작성, 일부 코드를 수정
- 한국어 형태소 분석기 Okt 모듈 사용
- 불용어 사전을 별도로 만들어 전처리를 수행하였으나, 일부 Token에 대해 추가 설정이 필요하다.('들', '있는' 등)
- 최초 작성 코드는 고유 영단어의 삭제("GPT") 가 발생되어 정규 표현식을 재작성함
위의 코드를 참고하여, Komoran 모듈(한국어 형태소 분석기)을 응용한 다른 코드를 작성하였다.
※ Komoran 모듈, 사용자 사전
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from konlpy.tag import Komoran #불용어 사전 제거 stopwords = ['ㅋ','ㅎ'] text = "오늘 챗GPT가 추천해준 영화 너무 재미있었다 ㅋㅋㅋㅋ!" for words in stopwords : text = text.replace(words,'') print(text) #사용자 사전 사용 komoran = Komoran(userdic='./user_dic.txt') # 단순 형태소 분리 morphs = komoran.morphs(text) print(morphs) # tag 작성 pos = komoran.pos(text) print(pos) # 명사 만 출력 n = komoran.nouns(text) print(n) | cs |
- 형태소 분석기, 사용자 사전을 사용하여 영어 고유 명사 등에 대해서도 분석 가능하도록 설정
- 별도의 사용자 지정 사전을 사용하여 '챗GPT'에 대해 인식 및 분석
- 불용어 제거(replace)
![]() |
| - 사용자 사전 user_dic.txt |
- 단어, 품사 형식으로 작성
- 작성된 단어와 품사는 'Tab' 으로 구분됨
![]() |
| - 출력 결과 |
불용어('ㅋ','ㅎ') 에 대해 처리할 필요는 없을지도 모르겠다 (불용어를 제거하지 않는 경우 NA로 분석됨)
- Komoran 분석기 품사표
| 대분류 | 소분류 | 세분류 |
|---|---|---|
| 체언 | 명사NN | 일반명사NNG |
| 고유명사NNP | ||
| 의존명사NNB | ||
| 대명사NP | 대명사NP | |
| 수사NR | ||
| 용언 | 동사VV | 동사VV |
| 형용사VA | 형용사VA | |
| 보조용언VX | 보조용언VX | |
| 지정사VC | 긍정지정사VCP | |
| 부정지정사VCN | ||
| 수식언 | 관형사MM | 관형사MM |
| 부사MA | 일반부사MAG | |
| 접속부사MAJ | ||
| 독립언 | 감탄사IC | 감탄사IC |
| 관계언 | 격조사JK | 주격조사JKS |
| 보격조사JKC | ||
| 관형격조사JKG | ||
| 목적격조사JKO | ||
| 부사격조사JKB | ||
| 호격조사JKV | ||
| 인용격조사JKQ | ||
| 보조사JX | 보조사JX | |
| 접속조사JC | 접속조사JC | |
| 의존형태 | 어미E | 선어말어미EP |
| 종결어미EF | ||
| 연결어미EC | ||
| 명사형전성어미ETN | ||
| 관형형전성어미ETM | ||
| 접두사XP | 체언접두사XPN | |
| 접미사XS | 명사파생접미사XSN | |
| 동사파생접미사XSV | ||
| 형용사파생접미사XSA | ||
| 어근XR | 어근XR | |
| 기호 | 마침표,물음표,느낌표SF | 마침표,물음표,느낌표SF |
| 쉼표,가운뎃점,콜론,빗금SP | 쉼표,가운뎃점,콜론,빗금SP | |
| 따옴표,괄호표,줄표SS | 따옴표,괄호표,줄표SS | |
| 줄임표SE | 줄임표SE | |
| 붙임표(물결,숨김,빠짐)SO | 붙임표(물결,숨김,빠짐)SO | |
| 외국어SL | 외국어SL | |
| 한자SH | 한자SH | |
| 기타기호(논리수학기호,화폐기호)SW | 기타기호(논리수학기호,화폐기호)SW | |
| 명사추정범주NF | 명사추정범주NF | |
| 용언추정범주NV | 용언추정범주NV | |
| 숫자SN | 숫자SN | |
| 분석불능범주NA | 분석불능범주NA |
※ 출처 : https://docs.komoran.kr/firststep/postypes.html


댓글
댓글 쓰기