Genere nubes de palabras de cualquier forma en Python

En este artículo, discutiremos cómo crear nubes de palabras de cualquier forma en Python. 

El término WordCloud se refiere a una técnica de visualización de datos para mostrar datos de texto en los que el tamaño de cada palabra indica su frecuencia o relevancia. Para crear una nube de palabras de cualquier forma, use los paquetes Matplotlib , nube de palabras, NumPy y PIL de Python .

Implementación paso a paso

Echemos un vistazo a la implementación paso a paso:

Paso 1: Instale los siguientes módulos como se indica a continuación:

pip install matplotlib
pip install wordcloud 

Paso 2: importe los siguientes módulos como se indica a continuación:

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

Paso 3: Siga los pasos a continuación-

  • Proporcione la ruta completa al archivo de texto que desea utilizar.
  • En modo lectura, abra el archivo de texto.
  • Finalmente, codifíquelo y léalo.
  • En este artículo se utilizará el siguiente archivo de texto: Texto
text = open(r'C:\Users\Dell\Desktop\Wordcloud\Text.txt',
            mode='r', encoding='utf-8').read()

Paso 4: Siga los pasos a continuación-

  • Proporcione la ruta de imagen completa que usaremos para obtener nuestra salida en la misma forma.
  • Luego, usando la función image.open, abra la imagen.
  • Después de eso, usa NumPy para crear la array de la imagen.
  • La siguiente imagen se utilizará en este artículo para la forma deseada

Sample Image

mask = np.array(Image.open(r'C:\Users\Dell|Downloads\Garbage\GFG.png'))

Paso 5: Cree una nube de palabras integrando una palabra vacía, una máscara, un color de fondo, el número máximo de palabras en la nube de palabras, la altura de la máscara y el ancho de la máscara.

  • stopwords- Se utiliza para evitar caracteres innecesarios como ‘./-[{)*&^%~@!#%^&].
  • máscara- La máscara es la forma a la que convertiremos nuestra nube de palabras.
  • background_color : podemos usar el color de fondo que queramos, como negro, verde, etc.
  • max_words- Es el número máximo de palabras que puede contener una nube de palabras.
  • max_font- Es el tamaño máximo de fuente.
  • El ancho y el alto de la nube de palabras están representados por Ancho y Alto.
wc = WordCloud(stopwords = STOPWORDS,
               mask = mask, background_color = "white",
               max_words = 2000, max_font_size = 500,
               random_state = 42, width = mask.shape[1],
               height = mask.shape[0])

Paso 6: 

  • Ahora, usando la función generar, crearemos una nube de palabras a partir del texto provisto.
  • Para mostrar datos de imagen, use la función imshow.
  • Intentaremos desviarnos de los ejes x e y.
  • Finalmente, mostraremos la nube de palabras generada usando la función show definida dentro de matplotlib.
wc.generate(text)
plt.imshow(wc, interpolation="None")
plt.axis('off')
plt.show()

A continuación se muestra la implementación completa.

Python3

# Python3 program to implement
# the above approach
# Import the following modules
 
# pip install matplotlib
import matplotlib.pyplot as plt 
 
# pip install wordcloud
from wordcloud import WordCloud, STOPWORDS 
import numpy as np
from PIL import Image
 
# Give the whole path of the text file,
# open it, read it, and encode it.
text = open(r'C:\Users\Dell\Desktop\Wordcloud\Text.txt',
            mode = 'r', encoding = 'utf-8').read()
 
# The Image shape in which you wanna convert it to.
mask = np.array(Image.open(
                r'C:\Users\Dell\Downloads\Garbage\GFG.png'))
 
# Now inside the WordCloud, provide some functions:
# stopwords - For stopping the unuseful words
# like [,?/\"]
# font_path - provide the font path to which you
# wanna convert it to.
# max_words - Maximum number of words in the
# output image. Also provide height and width
# of the mask
wc = WordCloud(stopwords = STOPWORDS,
               mask = mask,
               background_color = "white",
               max_words = 2000,
               max_font_size = 500,
               random_state = 42,
               width = mask.shape[1],
               height = mask.shape[0])
 
# Finally generate the wordcloud of the given text
wc.generate(text) 
plt.imshow(wc, interpolation = "None")
 
# Off the x and y axis
plt.axis('off')
 
# Now show the output cloud
plt.show()

Producción:

Cambia tamaño de fuente

Siga los pasos a continuación para cambiar el tamaño de fuente de las palabras en la nube de palabras:

  • Primero, seleccione una fuente de esta colección .
  • Descargue el archivo de fuente; verá que está en formato .zip.
  • Abra el archivo zip y extraiga el archivo TTF u otf de él.
  • Ahora solo proporcione la ruta completa del archivo TTF u otf.
path = r'C:\Users\Dell\Downloads\Garbage\Candy Beans.otf'

Código completo:

Python3

# Python3 program to implement
# the above approach
# Import the following modules
 
# pip install matplotlib
import matplotlib.pyplot as plt 
 
# pip install wordcloud
from wordcloud import WordCloud, STOPWORDS 
import numpy as np
from PIL import Image
 
# Give the whole path of the text file,
# open it, read it, and encode it.
text = open(r'C:\Users\Dell\Desktop\Wordcloud\Text.txt',
            mode = 'r', encoding = 'utf-8').read() 
 
# For changing the fonts of wordcloud fonts
path = r'C:\Users\Dell\Downloads\Garbage\Candy Beans.otf'
 
# The Image shape in which you wanna convert it to.
mask = np.array(Image.open(
                r'C:\Users\Dell\Downloads\Garbage\GFG.png'))
 
# Now inside the WordCloud, provide some functions:
# stopwords - For stopping the unuseful words
# like [,?/\"]
# font_path - provide the font path to which
# you wanna convert it to.
# max_words - Maximum number of words in
# the output image.
# Also provide height and width of the mask
wc = WordCloud(stopwords = STOPWORDS,
               font_path = path,
               mask = mask,
               background_color = "white",
               max_words = 2000,
               max_font_size = 500,
               random_state = 42,
               width = mask.shape[1],
               height = mask.shape[0])
 
# Finally generate the wordcloud of the given text
wc.generate(text) 
plt.imshow(wc, interpolation = "None")
 
# Off the x and y axis
plt.axis('off') 
 
# Now show the output cloud
plt.show()

Producción:

Font size

Cambiar el color de fuente

Siga los pasos a continuación para cambiar el color de fuente del texto en una nube de palabras:

  • Crea una función para cambiar el color de la fuente.
  • Debido a que el HSL de cada color es único, simplemente pase el HSL y devuélvalo.

Código completo:

Python3

# Python3 program to implement
# the above approach
# Import the following modules
 
# pip install matplotlib
import matplotlib.pyplot as plt 
 
# pip install wordcloud
from wordcloud import WordCloud, STOPWORDS 
import numpy as np
from PIL import Image
 
# Function for changing the color of the text
def one_color_func(word = None, font_size = None,
                   position = None, orientation = None,
                   font_path = None, random_state = None):
   
   # This HSL is for the green color
    h = 99
    s = 62
    l = 45
    return "hsl({}, {}%, {}%)".format(h, s, l)
 
# Give the whole path of the text file,
# open it, read it, and encode it.
text = open(r'C:\Users\Dell\Desktop\Text.txt',
            mode = 'r', encoding = 'utf-8').read() 
 
# For changing the fonts of wordcloud fonts
path = r'C:\Users\Dell\Downloads\Garbage\Candy Beans.otf'
 
# The Image shape in which you wanna convert it to.
mask = np.array(Image.open(
                r'C:\Users\Dell\Downloads\Garbage\GFG!.png'))
 
# Now inside the WordCloud, provide some functions:
# stopwords - For stopping the unuseful words
# like [,?/\"]
# font_path - provide the font path to which
# you wanna convert it to.
# max_words - Maximum number of words in
# the output image.
# Also provide height and width of the mask
wc = WordCloud(stopwords = STOPWORDS,
               font_path = path,
               mask = mask,
               background_color = "white",
               max_words = 2000,
               max_font_size = 500,
               random_state = 42,
               width = mask.shape[1],
               height = mask.shape[0],
               color_func = one_color_func)
 
# Finally generate the wordcloud of
# the given text
wc.generate(text) 
plt.imshow(wc, interpolation = "None")
 
# Off the x and y axis
plt.axis('off')
 
# Now show the output cloud
plt.show()

Producción: 

Font color

Publicación traducida automáticamente

Artículo escrito por gittysatyam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *