[Python] Top2Vec WordCloud 한글 깨짐 해결하기(임시방편)
1 min read

[Python] Top2Vec WordCloud 한글 깨짐 해결하기(임시방편)

Top2Vec 내재 Function 중 하나인 generate_topic_wordcloud를 실행했는데 한글이 모두 깨져나온다.

출력물의 형태를 보니, 대략 Wordcloud 패키지를 쓰지 않았을까 생각되어 Top2Vec의 github를 보니 Wordcloud Package를 쓰고 있길래 별도 Function으로 분리시켜스 "font_path"부분에 Font를 넣어주고, Top2Vec Class에서 별도로 분리가 되었기 때문에 self를 모두 제거하고 model을 넘겨주는 식으로 우선은 급하게 해결해서 사용하였다.

from wordcloud import WordCloud
from scipy.special import softmax

def generate_topic_wordcloud(model,topic_num, background_color="black"):
        word_score_dict = dict(zip(model.topic_words[topic_num], softmax(model.topic_word_scores[topic_num])))
        plt.figure(figsize=(16, 4),dpi=200)
        plt.axis("off")
        plt.imshow(
            WordCloud(font_path='NanumGothicCoding', width=1600,
                      height=400,
                      background_color=background_color).generate_from_frequencies(word_score_dict))
        plt.title("Topic " + str(topic_num), loc='left', fontsize=25, pad=20)

실행해보니 다음과 같이 한글이 잘 나온다.

Image by author

해당코드가 임시방편인 이유는 두 가지 기능을 미구현했기 때문이다. 첫번째는 1) "reduction" Parameter에 대한 대응 부분과 2)토픽 갯수 Validation  부분이다.  코드로 보면 다음 부분이다.

 if reduced:
            self._validate_hierarchical_reduction()
            self._validate_topic_num(topic_num, reduced)
            word_score_dict = dict(zip(self.topic_words_reduced[topic_num],
                                       softmax(self.topic_word_scores_reduced[topic_num])))
        else:
            self._validate_topic_num(topic_num, reduced)
            word_score_dict = dict(zip(self.topic_words[topic_num],
                                       softmax(self.topic_word_scores[topic_num])))