참고 절차
- 구글 머신러닝 텍스트 분류 가이드
- 에이블스쿨 강의 교안
할 '수' 있다
, ~할 '때'
처럼 명사로 쓰인것이 아니지만 명사로 분류되었고, 가장 높은 빈도를 보인다. 하지만 이는 자연어 처리시 전혀 중요한 데이터가 아니기 때문에 실제 분석시는 불용어로 처리하거나 TD-IDF와 같은 기법을 사용해서 낮은 중요도로 판단하도록 하는 처리 등이 필요해보인다.교정 전 : 현재 이미지를 여러개 업로드 하기 위해 자바스크립트로 동적으로 폼 여러개 생성하는데...
교정 후 : 현재 이미지를 여러 개 올리기 위해 자바스크립트로 동적으로 폼 여러 개 생성하는데 ...
업로드 하기
와 같은 외래어 조합이 올리기
로 변환되었다.cloud.to_file()
메소드를 통해 이미지 형태로 저장도 가능하다.공을 차다
는 공을 먹다
, 공을 하다
보다 훨씬 더 많이 연속하여 등장할 것이다. 이렇게 연속적으로 등장하는 빈도수를 통해 밀접한 관계가 있는 언어쌍을 추출할 수 있다.concordance()
와 similar()
메소드를 통해 쉽게 확인할 수 있다.def text_analysis(df, label=None, plot_num=50, counter_num=50):
# 데이터 확인
print('-' * 100)
print('분석할 label:', label)
print(data.head())
print('데이터 정보\n',data.info())
print('결측치 숫자\n',data.isnull().sum())
# 데이터 길이 시각화
print('-' * 100)
length = data['cor_text'].apply(len)
plt.figure(figsize=(10, 6))
sns.histplot(x=length, binwidth=1, cumulative=False)
plt.title('Distribution of data length')
plt.show()
# 명사 추출하여 분석
tokenizer = Kkma()
# kkma 형태소 분석기의 명사 토큰화 결과를 저장
nouns = []
for doc in data['cor_text']:
noun = tokenizer.nouns(doc)
nouns.append(noun)
nouns = [sum(nouns, [])]
# 리스트 -> nltk.Text
nltk_text = nltk.Text(*nouns)
# nltk.Text -> FreqDist
dist = FreqDist(nltk_text)
# Num of samples / Nom of words per samples
print(len(data['cor_text']) / length.mean())
# Type-Token Ratio 출력
print('-' * 100)
print('Type-Token Ratio:', np.round(dist.B() / dist.N(), 3))
# 단어 분포 시각화
print('-' * 100)
plt.figure(figsize=(12, 4))
dist.plot(plot_num, cumulative=False)
plt.show()
# Collocation 확인
print('-' * 100)
nltk_text.concordance(label)
print('-' * 100)
nltk_text.similar(label)
# 워드클라우드 분석 및 시각화
counter = Counter(nltk_text)
counts = counter.most_common(counter_num)
# 워드 클라우드 생성
wc = WordCloud(font_path='NanumBarunGothic.otf',
background_color="white",
max_font_size=80,
width=640,
height=640)
cloud = wc.generate_from_frequencies(dict(counts))
# 시각화 출력
plt.imshow(cloud)
plt.show()
# 저장
cloud.to_file('wordcloud.jpg')
전체 텍스트 데이터에 대해서만 길이 분포를 확인했었는데, 각 클래스별 길이분포를 구해보는 것도 좋을 것 같다. (subplot을 활용해보자)
결측치 확인 및 전체적인 분포 확인에는 ydata-profiling을 이용하는 것이 효율적일 수도 있을 것 같다.