«Раскройте возможности ChatGPT: создавайте потрясающие облака слов с помощью всего нескольких строк кода — не пропустите тренд года в области визуализации данных!»

Эй, коллеги-разработчики! Готовы ли вы создать модное облако свежих слов с помощью Python? Давайте начнем!

Мы начнем с расшифровки аудиофайла и его обработки с использованием OpenAI API и библиотеки Pandas. Первая строка кода открывает аудиофайл MP3 в двоичном режиме и создает файловый объект. Вторая строка транскрибирует аудиофайл с помощью OpenAI API, а третья строка выводит транскрипцию на консоль.

# Required Libs
from PIL import ImageDraw, ImageFont
from collections import Counter
import numpy as np
import matplotlib.pyplot as plt
import random
import re
import openai
import sys 
import os
import pandas as pd  
audio_file = open("SUPERARE - Funky Fresh.mp3", "rb")
trancript = openai.Audio.transcribe("whisper-1", audio_file)
trancript_str = str(trancript)

Теперь мы сохраним расшифрованный аудиофайл как текстовый файл и обработаем его, чтобы удалить ненужные символы. Первая строка создает текстовый файл в режиме записи, а вторая строка записывает транскрибированный текст в файл. Третья строка считывает содержимое текстового файла как Pandas DataFrame, а четвертая строка удаляет вторую строку DataFrame. Пятая строка применяет серию строковых операций для удаления нежелательных символов.

with open("transcript.txt", "w") as f:
    f.write(trancript_str)
    
Text = pd.read_csv('transcript.txt', delimiter='\t', header=None)
Text = Text.drop(Text.index[1])
Text[0] = Text[0].str.strip() 
Text[0] = Text[0].str.replace('[^\w\s]','')
Text[0] = Text[0].str.replace('\d+', '')
Text[0] = Text[0].str.replace('udcudfb    ', '')

Далее мы создадим Pandas DataFrame и переименуем столбец. Первая строка создает DataFrame, а вторая строка переименовывает столбец. Наконец, мы отобразим первые пять строк DataFrame.

#create a dataframe
df = pd.DataFrame(Text) 
#rename the column
df.columns = ['Text']
df.head()

Теперь мы очистим и сохраним расшифрованные текстовые данные в виде текстового файла. Первая строка удаляет последний символ каждой строки в столбце «Текст», который обычно представляет собой символ «\n». Вторая строка транспонирует DataFrame и отображает первые 5 строк. Третья строка устанавливает максимальную ширину столбца для отображения всего текста. Наконец, очищенные данные сохраняются в текстовый файл для дальнейшего анализа или использования.

#use slicing to the last element
df['Text'] = df['Text'].str[:-1]

#preview the data
df.head().T

#show all the data in the column
pd.set_option('display.max_colwidth', None)
df.head()

#save the data to a text file
df.to_csv('transcript.txt', index=False)
df.head()

СОЗДАНИЕ ОБЛАКА СЛОВ

После того, как наши расшифрованные текстовые данные очищены и сохранены, пришло время создать наше облако слов! Первая строка кода считывает файл изображения и преобразует его в массив NumPy. Вторая строка создает объект Counter для подсчета вхождений каждого слова в столбце «Текст» DataFrame. Третья строка создает облако слов с помощью библиотеки WordCloud, а четвертая строка отображает облако слов.

mask = np.array(Image.open("mask.png"))

with open ('transcript.txt', 'r') as f:
    text = f.read()

#remove alphanumeric characters and convert to lowercase
text = re.sub(r'\W+', ' ', text).lower()

#count the frequency of each word
word_counts = Counter(text.split())

#list of unique words
words = list(word_counts.keys())

# remove the words text, purchase, your, tracks, through ,me 
words = [word for word in words if word not in ['text', 'purchase', 'your', 'tracks', 'through', 'me']]

Вот и все! Мы расшифровали аудиофайл, обработали текстовые данные с помощью API OpenAI и библиотеки Pandas, а также создали необычное облако свежих слов с помощью Python. Продолжайте кодить, друзья!

#create a color map with mask 
color_map = Image.new("RGB", (mask.shape[1], mask.shape[0]), color=(255,255,255)).load()

for i in range(mask.shape[0]):
    for j in range(mask.shape[1]):
        if mask[i,j][0] == 0 and mask[i,j][1] == 0 and mask[i,j][2] == 0:
            color_map.putpixel((j,i), (0,0,0))


#generate the word cloud
wc = Image.new("RGB", (mask.shape[1], mask.shape[0]), color=(255,255,255))
draw = ImageDraw.Draw(wc)

for word in words:
    font_size = word_counts[word] * 10
    font_color = (random.randint(0,255), random.randint(0,255), random.randint(0,255))
    font = ImageFont.truetype("arial.ttf", font_size)
    word_size = draw.textsize(word, font=font)
    x = random.randint(0, mask.shape[1] - word_size[0])
    y = random.randint(0, mask.shape[0] - word_size[1])
    draw.text((x,y), word, font=font, fill=font_color)

#show the word cloud
plt.imshow(wc)
plt.axis("off")
plt.show()