wordcloud를 만들어봅시다.

1 분 소요

wordcloud가 뭘까여

  • 보통 이런걸 워드클라우드라고들 하지요.

    python_wordcloud

  • 파이썬에서 워드클라우드를 만들수 있다고 해서 정리해보았습니다.
  • 일단 해당 라이브러리를 conda install -c conda-forge wordcloud 일단 설치를 합시다.

simple example

  • 텍스트를 WordCloud().generate() 객체에 넣어주고, 다음을 실행하면 실행됩니다. 어렵지 않아요.
  • 단 입력된 text에서 자동으로 noun이 필터링되고 verb 등은 걸러집니다. 사이즈는 알아서 조절되고요.
from wordcloud import WordCloud
import matplotlib.pyplot as plt
%matplotlib inline

text = "coffee phone phone phone phone phone phone phone phone phone cat dog dog"

# Generate a word cloud image
wordcloud = WordCloud(max_font_size=100).generate(text)

# Display the generated image:
# the matplotlib way:

fig = plt.figure()
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.savefig('../../assets/images/markdown_img/wordcloud_ex1.svg')

Image colored wordcloud

  • 그런데 위는 그냥 직사각형에 그대로 들어가서 별로 안 예쁜것 같습니다.
  • 예쁘게 만들려면 다음처럼 해주면 됩니다. 하하 참 쉽죠.
  • 원하는 이미지로부터 이미지 매트릭스를 가져오고,
  • 그 값을 넣어주면 모양과 색깔이 비슷하게 들어갑니다. 하하
import requests
def read_img_from_url_and_return_matrix(url):
    response = requests.get(url)
    #print("binary file sample: {}".format(response.content[:20]))

    from PIL import Image 
    from io import BytesIO 

    img = Image.open(BytesIO(response.content))
    img_matrix = np.array(img)
    # plt.imshow(img_matrix)
    # img.save('aaa.png')
    return img_matrix

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator

def make_ImageColoredWordcloud(text, img_matrix, outputfile_name):
    wc = WordCloud(background_color="white", max_words=2000, mask=img_matrix, max_font_size=40, random_state=42)
    # generate word cloud
    wc.generate(text)
    f = plt.figure(figsize=(20, 20))
    plt.imshow(wc.recolor(color_func=ImageColorGenerator(img_matrix)), interpolation="bilinear")
    plt.axis("off")
    plt.savefig(outputfile_name)
    
url = "https://amueller.github.io/word_cloud/_images/sphx_glr_colored_003.png"
img_matrix = read_img_from_url_and_return_matrix(url)
text = requests.get("https://en.wikipedia.org/wiki/Python_(programming_language)").text
make_ImageColoredWordcloud(text, img_matrix, '../../assets/images/markdown_img/'+'coloredWordCloud.svg')

reference

댓글남기기