250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 설정
- end to end
- 손실함수
- 경사하강법
- n과 m
- pyenv
- 실버
- 백준
- 신경망 학습
- 가상환경
- 1101
- 15649
- 파이썬
- streamlit
- N-Queen
- 1002
- 백트래킹
- 밑바닥부터 시작하는 딥러닝
- Mac
- 개발환경
- 재귀
- BOJ
- Python
- 그리디 알고리즘
- 기계학습
- 4948
- 파이싼
- 9020
Archives
- Today
- Total
파이톨치
[데이터 전처리] Mecab 을 사용하여 단어를 토큰화하기 본문
728x90
기본 전처리
사용 데이터는 AI 허브의 감성 대화 말뭉치이다.
df_train = pd.read_excel('train.xlsx', engine='openpyxl')
df_test = pd.read_excel('test.xlsx', engine='openpyxl')
df_train.replace(np.nan, '', inplace=True)
ls = {}
df = pd.DataFrame(ls)
df['문장'] = df_train[['사람문장1', '사람문장2',
'사람문장3', '사람문장4']].apply(' '.join, axis =1)
df['감정'] = df_train['감정_대분류']
df['문장'].replace('', np.nan, inplace=True)
print(df.isnull().values.any())
print(df.isnull().sum())
df = df.dropna(how = 'any')
다음과 같이 데이터를 불러와서 사람문장에 해당하는 데이터로 새로운 데이터를 만들어 주면 다음과 같이 나온다.
감정에 해당하는 문장이 잘 들어갔다.
하지만 다음 코드를 사용해서 문장의 감정 값을 보자.
df['감정'].unique()
그러면 감정이 array(['기쁨', '불안', '당황', '슬픔', '분노', '상처', '불안 ', '기쁨 '], dtype=object) 다음과 같이 나온다.
'불안 ', '기쁨 '의 경우는 아마 잘 못 들어간 데이터이다. 때문에 이런 데이터를 수정해주어야 한다.
df['감정'][df['감정'] == '기쁨 '] = '기쁨'
df['감정'][df['감정'] == '불안 '] = '불안'
다음 코드를 사용하면 수정해줄 수 있다.
# 한글과 공백을 제외하고 모두 제거
df['문장'] = df['문장'].str.replace("[^ㄱ-ㅎㅏ-ㅣ가-힣 ]","")
다음 코드 사용시 특수문자와 같은 것들을 지워줄 수 있다.
그래프를 그려볼 수 있다. 하지만 그냥 그래프를 그리면 한글이 깨져서 다음 코드를 사용해주어야 한다.
참고로 맥북 기준이다.
from matplotlib import rc
rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False
이 코드를 사용하면
df['감정'].value_counts().plot(kind='bar')
다음과 같이 감정의 분포를 살펴볼 수 있다. 불안한 감정이 제일 많지만 대부분의 감정이 비슷하게 있어서 그대로 진행해도 괜찮을 것 같다.
데이터 분포가 불균형한 경우에는 그에 맞는 작업을 해주어야 한다. (예: 오버샘플링)
Mecab 오류 시 다음 링크 참고
https://jung0228.tistory.com/56
from konlpy.tag import Mecab
stopwords = ['도', '는', '다', '의', '가', '이', '은', '한',
'에', '하', '고', '을', '를', '인', '듯', '과',
'와', '네', '들', '듯', '지', '임', '게', '것',
'어', '겠', '있', '군요', '해', '계섯', '시',
'나', '셨', '을까요', '으로']
mecab = Mecab()
train_data['tokenized'] = train_data['문장'].apply(mecab.morphs)
train_data['tokenized'] = train_data['tokenized'].apply(lambda x: [item for item in x if item not in stopwords])
test_data['tokenized'] = test_data['문장'].apply(mecab.morphs)
test_data['tokenized'] = test_data['tokenized'].apply(lambda x: [item for item in x if item not in stopwords])
train_data
다음 코드를 사용시 아래와 같이 토큰화를 할 수 있다.
728x90
'프로젝트' 카테고리의 다른 글
[github] intial setting github With VSCode (수정 중) (0) | 2024.08.26 |
---|---|
[Dacon] Samsung AI Challenge 2024 (0) | 2024.08.20 |
[Mecab 오류] Exception: Install MeCab in order to use it: http://konlpy.org/en/latest/install/ (0) | 2022.09.03 |
[데이터 수집] AI 허브 이용하기 (0) | 2022.09.03 |
[오류 해결] ImportError: Missing optional dependency 'openpyxl'. (0) | 2022.09.03 |