오늘부터 5일간 자연어처리 미니프로젝트가 진행합니다.
아직 실습이 모두 끝난 것이 아니라 실습 중에 사용한 코들르 좀 정리하겠습니다..솔직히 아직 이론적으로 부족해서 최대한 이해한 코드 위주로 정리하겠습니다.
강사님이 지원해준 코드로도 한글깨짐 방지가 안되서 전에 사용했던 한글 깨짐 방지 코드 적어두겠습니다.
#한글깨짐 방지
plt.rc('font', family='Malgun Gothic')
sns.set(font="Malgun Gothic",#"NanumGothicCoding",
rc={"axes.unicode_minus":False}, # 마이너스 부호 깨짐 현상 해결
style='darkgrid')
# scipy
import scipy.stats as spst
# 문의 내용이 저장되어 있는 컬럼을 선택합니다.
inquiries = data['text']
# 각 문의 내용의 길이를 구합니다.
lengths = [len(inquiry) for inquiry in inquiries]
# 최소, 최대 길이와 해당 길이를 가진 문의 내용을 찾습니다.
min_length = min(lengths)
max_length = max(lengths)
min_index = lengths.index(min_length)
max_index = lengths.index(max_length)
# 결과를 출력합니다.
print(f"문의 내용의 최소 길이: {min_length}")
print(f"문의 내용의 최대 길이: {max_length}")
print(f"최소 길이를 가진 문의 내용의 index: {min_index}")
print(f"최대 길이를 가진 문의 내용의 index: {max_index}")
# 최소 길이를 가진 문의내용
print(f'최소 길이를 가진 문의 내용 : {data.loc[min_index, "text"]}')
print(f'최대 길이를 가진 문의 내용 : {data.loc[max_index]}')
해당 코드를 사용해 가장 짧은 문장을 가진 내용과 인덱스를 가장 긴 문장을 가진 내용과 인덱스를 찾아보았습니다.
Okt를 사용하여 명사를 추출했습니다.
import nltk
from konlpy.tag import Okt
# Okt 객체 생성
okt = Okt()
# 각 문장에서 명사 추출하여 리스트로 저장
nouns_list = [okt.nouns(sentence) for sentence in data['text']]
# 이중 리스트를 단일 리스트로 변경
nouns = [n for ns in nouns_list for n in ns]
# nltk Text 객체 생성
text = nltk.Text(nouns)
추출한 명사와 조사를 가지고 가장 많이 사용된 단어를 알아보고자 시각화 했습니다.
# 가장 많이 등장한 상위 20개의 단어와 빈도수 출력
print(text.vocab().most_common(20))
# 빈도수 분포 시각화
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 5))
text.plot(20)
plt.show()
만약 `코드`라는 단어와 비슷한 맥락의 단어들을 찾아줍니다. 코드는 아래와 같습니다.
import nltk
text.similar('코드')
from wordcloud import WordCloud
import matplotlib.pyplot as plt
FONT_PATH = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'
# 명사 추출 결과를 사용하여 nouns 리스트 생성
nouns = [n for ns in nouns_list for n in ns if len(n) > 1]
# WordCloud 객체 생성
wordcloud = WordCloud(font_path=FONT_PATH, max_font_size=200, background_color='white',
width=1200, height=800, max_words=100, relative_scaling=.5)
# WordCloud에 사용될 텍스트 데이터 생성
wordcloud.generate(' '.join(nouns))
# 화면에 출력
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
추출한 명사를 가지고 해당 명사들로 WordCloude만드는 코드입니다. 결과는 아래와 같습니다.
자연어처리의 분석을 위조로한 코드인데어렵고 익숙하지 않은 코드들이라 자주 풀어봐야할 것 같습니다.
※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.