Глубоко и интересно | 03 Высококачественное и общее облако слов

искусственный интеллект GitHub Jieba Photoshop
Глубоко и интересно | 03 Высококачественное и общее облако слов

Введение

Облако слов — это способ представления данных

  • Когда нет, он чувствует себя очень мощным и высоким
  • После его использования я чувствую, что вижу, как другие используют его повсюду.

владелец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 см.

Я 3.org/wiki/CSS3/C…

Точный контроль

Если вам нужен детальный контроль над словами, которые появляются в облаке слов, и размером каждого слова, попробуйте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')

Ссылаться на

видеоурок

Глубоко и интересно (1)