Введение
Облако слов — это способ представления данных
- Когда нет, он чувствует себя очень мощным и высоким
- После его использования я чувствую, что вижу, как другие используют его повсюду.
владелецPython
Способы реализации облака слов
Подготовить
Инсталляционный пакет
pip install wordcloud matplotlib jieba PIL
Подготовьте несколько текстов на английском или китайском языке.
простой пример
WordCloud()
необязательные параметры
-
font_path
: может использоваться для указания путей к шрифтам, включаяotf
иttf
-
width
: Ширина облака слов, по умолчанию 400. -
height
: высота облака слов, по умолчанию 200. -
mask
: маска, которую можно использовать для настройки формы облака слов. -
min_font_size
: минимальный размер шрифта, по умолчанию 4. -
max_font_size
: максимальный размер шрифта, по умолчанию высота облака слов -
max_words
: максимальное количество слов, по умолчанию 200 -
stopwords
: стоп-слова игнорируются, если они не указаны, будут использоваться стоп-слова по умолчанию. -
background_color
: цвет фона, по умолчаниюblack
-
mode
: по умолчаниюRGB
режим, еслиRGBA
режим иbackground_color
установить какNone
, фон будет прозрачным
# -*- coding: utf-8 -*-
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 打开文本
text = open('constitution.txt').read()
# 生成对象
wc = WordCloud().generate(text)
# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
# 保存到文件
wc.to_file('wordcloud.png')
Поскольку английские слова разделены пробелами, большинство из них не требуют дополнительной обработки.
Облако китайских слов
Китайский обычно нужно обрабатывать с помощью сегментации слов, сначала посмотрите на эффект отсутствия сегментации слов.
На примере «Путешествия на Запад» можно увидеть, что в результатах будут разные двойные, тройные и четырехзначные символы, но многие из них не являются разумными словами.
# -*- coding: utf-8 -*-
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 打开文本
text = open('xyj.txt').read()
# 生成对象
wc = WordCloud(font_path='Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text)
# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
# 保存到文件
wc.to_file('wordcloud.png')
На этот раз мы используемjieba
Выполните сегментацию китайских слов, вы увидите, что сгенерированное облако слов в основном является разумным словом.
# -*- coding: utf-8 -*-
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
# 打开文本
text = open('xyj.txt').read()
# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])
# 生成对象
wc = WordCloud(font_path='Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text)
# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
# 保存到文件
wc.to_file('wordcloud.png')
использовать маску
здесь будетmask
Переведено как маска, потому что она похожа на маску в Photoshop.
После использования маски вы можете создать облако слов указанной формы на основе предоставленного изображения маски.
# -*- coding: utf-8 -*-
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba
# 打开文本
text = open('xyj.txt').read()
# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])
# 生成对象
mask = np.array(Image.open("black_mask.png"))
wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text)
# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()
# 保存到文件
wc.to_file('wordcloud.png')
цвет
Цвет облака слов можно извлечь из маски, используяImageColorGenerator()
Просто
# -*- coding: utf-8 -*-
from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba
# 打开文本
text = open('xyj.txt').read()
# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])
# 生成对象
mask = np.array(Image.open("color_mask.png"))
wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text)
# 从图片中生成颜色
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)
# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()
# 保存到文件
wc.to_file('wordcloud.png')
Конечно, его также можно установить на сплошной цвет и добавить функцию сопоставления цветов.
# -*- coding: utf-8 -*-
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import random
import jieba
# 打开文本
text = open('xyj.txt').read()
# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])
# 颜色函数
def random_color(word, font_size, position, orientation, font_path, random_state):
s = 'hsl(0, %d%%, %d%%)' % (random.randint(60, 80), random.randint(60, 80))
print(s)
return s
# 生成对象
mask = np.array(Image.open("color_mask.png"))
wc = WordCloud(color_func=random_color, mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text)
# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()
# 保存到文件
wc.to_file('wordcloud.png')
Цветовую схему HSL см.
Точный контроль
Если вам нужен детальный контроль над словами, которые появляются в облаке слов, и размером каждого слова, попробуйтеgenerate_from_frequencies()
, включая два параметра
-
frequencies
: словарь, определяющий слова и соответствующие им размеры. -
max_font_size
: максимальный размер шрифта, по умолчаниюNone
generate()
= process_text()
+ generate_from_frequencies()
Следующее использует jieba для извлечения ключевых слов и весов, а затем рисует облако слов.
# -*- coding: utf-8 -*-
from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba.analyse
# 打开文本
text = open('xyj.txt').read()
# 提取关键词和权重
freq = jieba.analyse.extract_tags(text, topK=200, withWeight=True)
print(freq[:20])
freq = {i[0]: i[1] for i in freq}
# 生成对象
mask = np.array(Image.open("color_mask.png"))
wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate_from_frequencies(freq)
# 从图片中生成颜色
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)
# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()
# 保存到文件
wc.to_file('wordcloud.png')
Ссылаться на
- Официальная домашняя страница WordCloud:А, Мюллер.GitHub.IO/word_cloud/…
- Официальный пример WordCloud:А, Мюллер.GitHub.IO/word_cloud/…
- Сегментация китайских слов jieba:github.com/fxsjy/jieba