Введение
Облако слов (также называемое облаком тегов или взвешенным списком) — это визуальное представление текстовых данных. Слова обычно представляют собой отдельные слова, а важность каждого из них отображается с помощью размера шрифта или цвета. В этой статье мы рассмотрим, как сгенерировать облако слов с помощью Python.
📚 Библиотеки Python
wordcloud
Counter
re
os
Входной файл
Для входного файла вам понадобится файл, содержащий текст. Вы можете использовать такой сайт, как Project Gutenberg, чтобы найти книги, которые доступны онлайн. Вы можете сгенерировать облака слов из известных книг, таких как «Алиса в стране чудес» Льюиса Кэрролла или «Дракула» Брэма Стокера. Возможности безграничны. В этом проекте использовался «Ворон» Эдгара Аллана По. Просто скопируйте содержимое в текстовый файл и сохраните его в том же каталоге, где находится сценарий Python.
Реализация
Нам нужно написать функцию, которая будет открывать этот текстовый файл, перебирать слова, удалять знаки препинания и подсчитывать частоту каждого слова. Мы также должны убедиться, что игнорируем регистр слов, слова, которые не содержат всех алфавитов, и обычные слова, такие как "and"
или "the"
. Для реализации облака слов мы выполним следующие 5 основных шагов.
- Импорт необходимых библиотек
- Открыть текстовый файл
- Очистить текстовый файл
- Сгенерировать облако слов
- Сохранить облако слов
Шаг 1: Импорт необходимых библиотек
from wordcloud import WordCloud
from collections import Counter
import re
import os
- Библиотека WordcCloud предназначена для генерации облака слов.
- Модуль
Counter
используется для созданиясловаря
, который будет подсчитывать частоту каждого слова. - Модуль
re
используется для удаления пунктуации из текстового файла. - Модуль
os
используется для работы с файлами.
Шаг 2: Откройте текстовый файл
def get_file(filename):
with open(filename, encoding='utf-8') as file_object:
content = [word.lower().strip() for word in file_object]
return ' '.join(content)
Функция get_file()
открывает текстовый файл, используя кодировку UTF-8
, и возвращает содержимое файла.
Шаг 3: Очистка текстового файла
def clean_file(data):
data = re.sub(r'[^ws]', '', data)
stopwords = ('a', 'an', 'and', 'as', 'at', 'but', 'by', 'from', 'he', 'him', 'i', 'is', 'my', 'of', 'or',
'on', 'said', 'that', 'the', 'there', 'this', 'to', 'with')
return Counter([word for word in data.split() if word not in stopwords])
Функция clean_file()
принимает 1 параметр data
, который представляет собой текстовый файл, передаваемый ей. Модуль re
используется для удаления знаков препинания из текста. Кроме того, удаляются любые stopwords
(т.е. часто используемые слова). Результаты возвращаются в объекте Counter
, который используется для подсчета частоты оставшихся слов в файле.
Шаг 4: Сгенерировать облако слов
def generate_wordcloud(data):
return WordCloud(height=800, width=1200).generate_from_frequencies(data)
Функция generate_wordcloud()
принимает 1 параметр, data
, который является объектом Counter
. Она использует хешмап частот слов для создания изображения Wordcloud
размером 800x1200
пикселей. В результате получается следующее изображение Wordcloud:
Шаг 5: Сохранить Wordcloud
def save_wordcloud(data, filename):
data.to_file(os.path.join(filename))
print(f'{filename} has been successfully saved.')
Наконец, мы хотим сохранить это изображение Wordcloud. Функция save_wordcloud()
принимает два параметра, data
и filename
. data
— это объект wordcloud, который будет сохранен, а filename
— это имя, под которым будет сохранен файл.
Выполнение кода
def main():
# Get the path of the text file
raven_path: str = os.path.join('the_raven.txt')
# Open this text file:
raven_file: str = get_file(raven_path)
# Clean the text file:
process_file: dict = clean_file(raven_file)
# Generate wordcloud
raven_cloud: [Wordcloud] = generate_wordcloud(process_file)
# Save wordcloud image as 'raven_cloud.jpg'
save_wordcloud(raven_cloud, 'raven_cloud.jpg')
if __name__ == '__main__':
main()
Полный код
import os
import re
from collections import Counter
from wordcloud import WordCloud
def get_file(filename):
with open(filename, encoding='utf-8') as fo:
content = [i.lower().strip() for i in fo]
return ' '.join(content)
def clean_file(data):
data = re.sub(r'[^ws]', '', data)
stopwords = ('a', 'an', 'and', 'as', 'at', 'but',
'by', 'from', 'he', 'him', 'i', 'is',
'my', 'of', 'or', 'on', 'said', 'that',
'the', 'there', 'this', 'to', 'with')
return Counter([word for word in data.split()
if word not in stopwords])
def generate_wordcloud(data):
return WordCloud(height=800, width=1200).generate_from_frequencies(data)
def save_wordcloud(data, filename):
data.to_file(os.path.join(filename))
print(f'{filename} has been successfully saved.')
def main():
raven_path = os.path.join('the_raven.txt')
raven_file = get_file(raven_path)
process_file = clean_file(raven_file)
raven_cloud = generate_wordcloud(process_file)
save_wordcloud(raven_cloud, 'raven_cloud.jpg')
if __name__ == '__main__':
main()
Заключение
После прочтения этого руководства вы должны быть в состоянии создать свое собственное облако слов с помощью Python. Используйте свое воображение и получайте удовольствие! Просмотрите документацию WordCloud for Python, чтобы узнать больше о том, что вы можете сделать с помощью этой библиотеки Python. Пожалуйста, оставьте like
или comment
, если эта статья показалась вам интересной!
- Код доступен на GitHub