1. 시작 > PowerShell 우클릭 > 관리자 권한으로 실행 > "pip install wordcloud", "pip install matplotlib"
2. word croud 그래프 생성 코드
<hide/>
from wordcloud import WordCloud
gulim_font_path = 'C:\Windows\Fonts\gulim.ttc'
strings = open('testfile.txt', encoding='utf-8').read()
world_cloud_graph = WordCloud(max_words=100, background_color='white', font_path=gulim_font_path).generate(strings)
import matplotlib.pyplot as plt
plt.figure(figsize=(15, 10))
plt.imshow(world_cloud_graph)
plt.axis('off')
plt.show()
world_cloud_graph.to_file('graph.jpg')
3. 결과
4. 최종코드
제목+상담 내용을 분석해서 가장 많이 등장한 단어 20개 출력(단어 필터링 기능 포함)
상담 내용만 따로 떼서 가장 많이 등장한 단어 20개 출력
상담 내용에서 가장 많이 등장한 단어로 word croud 그래프 랜더링
상담 내용에서 특정 단어를 검색하고, 검색된 단어와 함께 자주 쓰인 단어 20개 출력
<hide/>
#이 코드를 실행하기 전, 분석하고자 하는 엑셀파일이 txt 파일로 변환되어 있어야 합니다.
#변환된 파일이름은 testfile.txt이어야 합니다.(변경하셔도 됩니다.)
#파일을 읽어들이는 코드입니다. 이 파일은 제목 + 상담내용 모두 들어있습니다.
original_file = open("testfile.txt",'rt',encoding='utf-8')
customer_complaints = original_file.readlines()
original_sentences = []
for line_number in range(len(customer_complaints)):
original_sentences.append(customer_complaints[line_number])
original_file.close()
#읽은 파일 속 불필요한 기호(띄어쓰기나 특수문자, ...)를 모두 제거하고, 한글만 남겨주는 코드입니다.
import re
compile = re.compile("[^ ㄱ-ㅣ가-힣]+")
for sentence_number in range(len(original_sentences)):
original_sentences[sentence_number] = compile.sub("", original_sentences[sentence_number])
#문장 중에서 의미 없는 문장들을 제거합니다.
filtered_worlds = ["제", "분", "롯데리아", "문의", "것", "점", "확인", "말", "시", "저",
"때", "일", "안", "수", "더", "이", "후", "좀", "좆", "씨발", "거", "왜", "개"]
processed_sentences = []
for original_sentence in original_sentences:
if (original_sentence not in filtered_worlds):
processed_sentences.append(original_sentence)
#한글에서 명사만 추출하고, 추출된 명사들에서 사용하지 않을 단어를 제거 합니다.
from konlpy.tag import Okt
okt = Okt()
lines_of_nouns = []
for processed_sentence in processed_sentences:
lines_of_nouns.append(okt.nouns(processed_sentence))
original_nouns = []
for line_of_nouns in lines_of_nouns:
for noun in line_of_nouns:
original_nouns.append(noun)
processed_nouns = []
for original_noun in original_nouns:
if (original_noun not in filtered_worlds):
processed_nouns.append(original_noun)
#final_result = [w for w in final_result if w not in unused_worlds]
#가장 높은 빈도수의 단어들을 보여줍니다.
import pandas as pd
top_20_nouns = pd.Series(processed_nouns).value_counts().head(20)
print("\n")
print("가장 자주 등장한 단어[제목 + 상담내용]")
print(top_20_nouns)
print("..... 분석중 .....")
#상담 내용만 따로 떼서 새로운 파일에 저장합니다.
except_title_file = pd.read_csv('testfile.csv', names=["상담 내용"])
except_title_file.to_csv('OnlyContentsExceptTitles.txt', index=False, encoding='utf-8-sig')
#파일을 읽어들이는 코드입니다. 이 파일은 상담내용만 모두 들어있습니다.
original_file = open("OnlyContentsExceptTitles.txt",'rt',encoding='utf-8')
customer_complaints = original_file.readlines()
original_sentences = []
for line_number in range(len(customer_complaints)):
original_sentences.append(customer_complaints[line_number])
original_file.close()
#읽은 파일 속 불필요한 기호(띄어쓰기나 특수문자, ...)를 모두 제거하고, 한글만 남겨주는 코드입니다.
import re
compile = re.compile("[^ ㄱ-ㅣ가-힣]+")
for sentence_number in range(len(original_sentences)):
original_sentences[sentence_number] = compile.sub("", original_sentences[sentence_number])
#문장 중에서 의미 없는 문장들을 제거합니다.
filtered_worlds = ["제", "분", "롯데리아", "문의", "것", "점", "확인", "말", "시", "저",
"때", "일", "안", "수", "더", "이", "후", "좀", "좆", "씨발", "거", "왜", "개"]
processed_sentences = []
for original_sentence in original_sentences:
if (original_sentence not in filtered_worlds):
processed_sentences.append(original_sentence)
#한글에서 명사만 추출하고, 추출된 명사들에서 사용하지 않을 단어를 제거 합니다.
from konlpy.tag import Okt
okt = Okt()
lines_of_nouns = []
for processed_sentence in processed_sentences:
lines_of_nouns.append(okt.nouns(processed_sentence))
original_nouns = []
for line_of_nouns in lines_of_nouns:
for noun in line_of_nouns:
original_nouns.append(noun)
processed_nouns = []
for original_noun in original_nouns:
if (original_noun not in filtered_worlds):
processed_nouns.append(original_noun)
#가장 높은 빈도수의 단어들을 보여줍니다.
import pandas as pd
top_20_nouns = pd.Series(processed_nouns).value_counts().head(20)
print("\n")
print("가장 자주 등장한 단어[상담내용]")
print(top_20_nouns)
print("..... 분석 끝 .....")
#필터링된 최종 단어들을 파일로 다시 저장합니다.
processed_nouns_pd = pd.Series(processed_nouns)
processed_nouns_pd.to_csv('ProcessedOnlyContentsExceptTitles.txt', index=False, encoding='utf-8-sig')
#워드클라우드 그래프를 그립니다.
from wordcloud import WordCloud
gulim_font_path = 'C:\Windows\Fonts\gulim.ttc'
strings = open('ProcessedOnlyContentsExceptTitles.txt', encoding='utf-8').read()
world_cloud_graph = WordCloud(max_words=100, background_color='white', font_path=gulim_font_path).generate(strings)
import matplotlib.pyplot as plt
plt.figure(figsize=(15, 10))
plt.imshow(world_cloud_graph)
plt.axis('off')
plt.show()
world_cloud_graph.to_file('graph.jpg')
input_string = input('단어를 입력해주세요[stop 입력시 종료]: ')
while True:
if (input_string == 'stop'):
break
related_nouns = []
for line_of_nouns in lines_of_nouns:
if input_string in line_of_nouns:
#print(line_of_nouns)
for related_noun in line_of_nouns:
if related_noun not in filtered_worlds:
related_nouns.append(related_noun)
top_20_nouns = pd.Series(related_nouns).value_counts().head(20)
print("\n")
print("입력된 단어와 함께 가장 자주 등장한 단어[상담내용]")
print(top_20_nouns)
related_nouns_pd = pd.Series(related_nouns)
related_nouns_pd.to_csv('RelatedOnlyContentsExceptTitles.txt', index=False, encoding='utf-8-sig')
strings = open('RelatedOnlyContentsExceptTitles.txt', encoding='utf-8').read()
world_cloud_graph2 = WordCloud(max_words=100, background_color='white', font_path=gulim_font_path).generate(strings)
plt.figure(figsize=(15, 10))
plt.imshow(world_cloud_graph2)
plt.axis('off')
plt.show()
world_cloud_graph.to_file('graph2.jpg')
input_string = input('단어를 입력해주세요[stop 입력시 종료]: ')
'Life > 일상 생존기' 카테고리의 다른 글
지인 부탁으로 해보는 파이썬 - 1 (0) | 2024.03.05 |
---|---|
LH 전세임대주택 재계약 하기 (0) | 2023.04.21 |
P Vs. NP (0) | 2022.04.15 |
중고나라 사기 당하고 인생 수업 받기 (0) | 2022.01.27 |
Who am I (0) | 2021.01.21 |
댓글