Colab으로 하루에 하나씩 딥러닝

20 뉴스그룹 데이터 준비 및 특성 추출 본문

딥러닝_프로젝트

20 뉴스그룹 데이터 준비 및 특성 추출

Elleik 2022. 12. 22. 22:59
728x90

데이터셋 확인 및 분리 (사이킷런 20 뉴스그룹)

  • 해당 데이터는 언론에서 나오는 기사가 아닌 게시판에 올라온 사용자들의 포스트
  • categories 매개 변수를 이용해 20개의 topic 중에서 원하는 토픽을 선택할 수 있음
  • remove로 필요 없는 데이터 삭제 가능
  • 각 데이터셋 내에서 .data는 텍스트의 내용,. target은 숫자로 표시된 라벨을 가져옴
### 데이터셋 불러오기

from sklearn.datasets import fetch_20newsgroups

# 20개 토픽 중 선택하고자 하는 토픽을 리스트로 생성
categories = ['alt.atheism', 'talk.religion.misc','comp.graphics','sci.space']

# 학습 데이터셋을 가져옴
newsgroups_train = fetch_20newsgroups(subset='train',
                                      # 매일 내용에서 hint가 되는 부분을 삭제(순수하게 내용만으로 분류)
                                      remove=("headers","footers","quotes"),
                                      categories=categories)

# 평가 데이터셋을 가져옴
newsgroups_test = fetch_20newsgroups(subset='test',
                                     remove=("headers","footers","quotes"),
                                     categories = categories)

print('Train set size: ',len(newsgroups_train.data))
print('Test set size: ', len(newsgroups_test.data))
print('Selected categories: ', newsgroups_train.target_names)
print('Train labels: ', set(newsgroups_train.target))

카테고리는 문자열이지만, 라벨은 이를 숫자로 변경한 값

### 데이터 직접 확인하기

print('Train set text samples: ', newsgroups_train.data[0])
print('Train set label samples: ', newsgroups_train.target[0])
print('Train set text samples: ', newsgroups_test.data[0])
print('Train set label samples: ', newsgroups_test.data[0])

해당 데이터는 comp.graphics에 해당하는 토픽을 가짐

 

### 카운트 기반 특성 추출

X_train = newsgroups_train.data # 학습 데이터셋 문서
y_train = newsgroups_train.target # 학습 데이터셋 라벨

X_test = newsgroups_test.data # 평가 데이터셋 문서
y_test = newsgroups_test.target # 평가 데이터셋 라벨 

from sklearn.feature_extraction.text import CountVectorizer

cv = CountVectorizer(max_features=2000, min_df=5, max_df=0.5)
# max_features: 특성의 수를 제한
# min_df: 단어가 최소 해당 개수만큼 문서에 나타나야함
# max_df: 공통으로 나타나는 단어 제외(0.5 는 문서의 50%를 초과해 나타나는 단어 제외)

X_train_cv = cv.fit_transform(X_train)  # train set 변환
print('Train set dimension: ', X_train_cv.shape)
X_test_cv = cv.transform(X_test)  # test set 변환
print('Test set dimension: ', X_test_cv.shape)

카운트 기반 특성 추출 결과

### 단어 빈도 파악

for word, count in zip(
    cv.get_feature_names_out()[:100], X_train_cv[0].toarray()[0, :100]):
  
  print(word, ':', count, end=', ')

단어 빈도 파악 결과 일부분

참고: 박상언, 『파이썬 텍스트 마이닝 완벽 가이드』, 위키북스(2022)

'딥러닝_프로젝트' 카테고리의 다른 글

한국어 영화 리뷰 카운트 벡터 변환  (0) 2022.12.20