import pandas as pd from PIL import Image import numpy as np import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt def generate_beautiful_wordcloud(file_name='ai_danmaku_statistics.xlsx', mask_image_path=None,font_path=r"C:\Users\wyk93\Desktop\苹方黑体-准-简.ttf"): # 读取 Excel 文件 df = pd.read_excel(file_name) # 合并所有弹幕内容为一个大字符串 text = ' '.join(df['弹幕内容'].dropna().astype(str)) # 使用 jieba 进行分词 seg_list = jieba.cut(text, cut_all=True) segmented_text = " ".join(seg_list) # # 打印合并后的文本以检查内容 # print("Text content:") # print(text[:500]) # 打印前500个字符以检查 # 读取自定义形状图片 if mask_image_path: mask_image = np.array(Image.open(mask_image_path).convert('L')) mask_image[mask_image > 200] = 255 mask_image[mask_image <= 200] = 0 else: mask_image = None background_image = Image.open(mask_image_path) # 创建词云对象 wordcloud = WordCloud( background_color='white',# 透明背景 mask=mask_image, contour_color=None, contour_width=2, width=2000, # 词云图的宽度 height=2000, # 词云图的高度 colormap='viridis' , # 使用 'viridis' 颜色映射 max_words=20000, # min_font_size=10, # max_font_size=100, # prefer_horizontal=0.9, # 更高的水平优先级 font_path=font_path # 如果需要显示中文,需要指定中文字体路径 ).generate(segmented_text) # 这里替换为你自己的文本数据 # 显示词云图 plt.figure(figsize=(10, 8)) plt.imshow(background_image, interpolation='bilinear') plt.imshow(wordcloud, interpolation='bilinear', alpha=0.4) # 设置透明度 plt.axis('off') # 不显示坐标轴 plt.show() # 调用函数生成词云 # 可选: 使用自定义形状的掩膜图像 generate_beautiful_wordcloud(mask_image_path=r"C:\Users\wyk93\Desktop\图片素材\sucai3.jpg")