기술/프로그래밍

네이버플레이스 후기 데이터 마이닝으로, 마케팅 방향 잡기 - (2) 자연어 처리 API

파크텐 2023. 12. 27. 23:14

지난 이야기

https://rkckskdk.tistory.com/297

 

네이버플레이스 후기 데이터 마이닝으로, 마케팅 방향 잡기 - (1) 웹크롤링

지난 편 보러가기 https://rkckskdk.tistory.com/298 네이버플레이스 후기 데이터 마이닝으로, 마케팅 방향 잡기 - (0) 개요 우리 회사 마케팅을 할 때 어떤 소구점을 강조해야 할까 고민이 많았다. 대한민

rkckskdk.tistory.com

 

이건 또 어떻게 하는데..

 

한글 분석을 시도한 다른 블로거의 글을 봤다.

다 추후에 수정이라고 하고 사라졌다.

그렇지만 좋은 링크들을 담고 있다.

 

https://pioneer-2021.tistory.com/30

 

파이썬과 트위터 API를 통해 워드클라우드 만들기 : 써브웨이 분석 보고서

https://hleecaster.com/python-twitter-api/ 파이썬과 트위터 API를 활용한 트위터 크롤링 (코드 예제) - 아무튼 워라밸 파이썬과 트위터 API를 사용해서 트위터에 나타난 글들을 가져오거나 실시간으로 수집

pioneer-2021.tistory.com

 

관련 논문

https://www.oss.kr/oss_guide/show/abc5db40-c9e1-4f52-8d3a-262c178318a0

 

[2월 월간 브리핑] 한국어 자연어 처리(NLP) 오픈소스 프로젝트 - 공개SW 포털

[2월 월간 브리핑] 한국어 자연어 처리(NLP) 오픈소스 프로젝트 - Open UP - 자연어 처리 기술은 AI와 함께 수요가 증가하고 있으며 가장 주목받고 있는 기술임 활성화...

www.oss.kr

 

짧게나마 코드를 적어주신 블로거님 발견

https://business-analytics.tistory.com/3

 

Python 한글워드클라우드 만들기

프로젝트명 : 한글 워드클라우드 만들기¶ 1. 한글자연어 처리 라이브러리 설치¶ In [2]: # !pip install KoNLPy In [ ]: from konlpy.tag import Twitter from collections import Counter 2. 데이터 불러오기¶ In [42]: file = open

business-analytics.tistory.com

 

 

무슨 소리인지는 모르겠지만 일단 코드 그대로 써보자.

그와 관련한 문서

https://konlpy.org/ko/latest/examples/wordcloud/

 

워드클라우드 그리기 — KoNLPy 0.6.0 documentation

워드클라우드 그리기 다음은 파이썬만으로 웹에서 국회 의안의 내용을 수집해서 이용해 명사를 추출한 후, 워드클라우드를 그리는 예시입니다. 의안 번호(i.e., bill_num)를 바꿔가며 워드클라우드

konlpy.org

 

 

어김없이 등장한 GPT 햄

 

 

계속 오류를 잡아보려 노력했으나, GPT 형님도 다른거 써보라고 한다. 포기도 빠른 형님

 

 

 

검색하다보니 khaiii라는 API가 있다.

카카오에서 제작한 3번째 형태소 분석기라고 한다.

GPT 형님께 부탁드려서 새 코드를 받아냈다.

 

설치하는 과정이 까다롭다.

다행히 나와 같은 환경에서 설치한 사람이 블로그를 썼다. 감사합니다.

 

https://velog.io/@yoonsy/MacOS에-khaiii-형태소-분석기-설치하기

 

M1칩 Mac에 khaiii 형태소 분석기 설치하기

MacOS에 khaiii(Kakao Hangul Analyzer iii) 형태소 분석기를 설치하는 방법에 대해 정리해보고자 한다.

velog.io

 

API 설치하는 데 3시간 걸렸다...

 

드디어 완성!!!!!!!

 

 

사용한 코드 (하지만 이걸 따라하려는 분이 있다면, 모듈 설치가 힘들 것이라는 것만 말씀드리겠습니다..)

더보기
from khaiii import KhaiiiApi
from collections import Counter
from wordcloud import WordCloud
import pandas as pd
import matplotlib.pyplot as plt

# 데이터 불러오기
df = pd.read_excel('input.xlsx', sheet_name='data', usecols='B')

# 'Column_Name'에는 실제 열의 이름을 넣어주세요
sentences = df['content'].tolist()

api = KhaiiiApi()
noun_list = []

# 각 문장을 형태소로 분석하여 명사 추출
for sentence in sentences:
    morphs = api.analyze(sentence)
    for words in morphs:
        for morph in words.morphs:
            if morph.tag.startswith('NNG'):  # 명사만 추출
                noun_list.append(morph.lex)

# 단어 빈도수 카운트
count = Counter(noun_list)
words = dict(count.most_common())

# 워드클라우드 생성 (폰트 설정)
wordcloud = WordCloud(
    font_path='/Library/Fonts/NanumBarunGothic.ttf',  # Arial Unicode MS 폰트 경로
    background_color='white',
    colormap='Accent_r',
    width=800,
    height=800
)

wordcloud.generate_from_frequencies(words)

plt.figure(figsize=(10, 10))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis('off')
plt.show()

 

그리고 1초만에 만든 그래프로 변환하는 코드.

 

아래는 코드 내용

더보기
from khaiii import KhaiiiApi
from collections import Counter
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc

# 한글 폰트 경로 설정 (본인 컴퓨터에 설치된 한글 폰트 경로로 지정해주세요)
font_path = '/Library/Fonts/NanumBarunGothic.ttf' 

# 폰트 설정
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)

# 데이터 불러오기
df = pd.read_excel('input.xlsx', sheet_name='data', usecols='B')
sentences = df['content'].tolist()

api = KhaiiiApi()
noun_list = []

# 각 문장을 형태소로 분석하여 명사 추출
for sentence in sentences:
    morphs = api.analyze(sentence)
    for words in morphs:
        for morph in words.morphs:
            if morph.tag.startswith('NNG'):  # 명사만 추출
                noun_list.append(morph.lex)

# 단어 빈도수 카운트
count = Counter(noun_list)
words = dict(count.most_common())

# 단어 빈도수를 데이터프레임으로 변환
df_words = pd.DataFrame(list(words.items()), columns=['Word', 'Frequency'])

# 상위 20개 단어 선택
top_words = df_words.head(20)

# 막대 그래프로 시각화
plt.figure(figsize=(10, 6))
plt.bar(top_words['Word'], top_words['Frequency'], color='skyblue')
plt.xlabel('Words')
plt.ylabel('Frequency')
plt.title('Top 20 Words Frequency')
plt.xticks(rotation=45)

# 막대 그래프에 값을 작게 표시
for i, v in enumerate(top_words['Frequency']):
    plt.text(i, v - 10, str(v), fontsize=8, ha='center', va='bottom')

plt.tight_layout()
plt.show()

 

만약 자기 네이버 플레이스 후기에 대한 데이터 분석도 궁금하신 분들은 그냥 메일 주세요.

제 환경에서 쉽게 해드릴게요.

xxxch584@naver.com