import re
import jieba
import collections
import numpy as np
import wordcloud # 词云展示库
from PIL import Image # 图像处理库
import matplotlib.pyplot as plt # 图像展示库
def remove():
    with open('remove_words.txt','r',encoding='utf-8') as f:
        txt=f.read()
    words = re.findall(r'[^\s]+',txt)
    list_=[]
    for i in words:
        if i in list_:
            continue
        else:
            list_.append(i)
    return list_
def get_words(path):
    f=open(path,encoding='utf-8')
    txt=f.read()
    f.close()
    words = jieba.lcut(txt)
    remove_word=remove()
    reword = []
    for word in words:
        if len(word) == 1:
            continue
        elif word in remove_word:
            continue
        else:
            reword.append(word)
    word_counts=collections.Counter(reword)
    return word_counts
#统计词频
def wordcount(word_counts):
    top=word_counts.most_common(20)
    print(top)
def wordc(impath,words):
    mask=np.array(Image.open(impath))
    wc = wordcloud.WordCloud(
        font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
        mask=mask, # 设置背景图
        max_words=600, # 最多显示词数
        max_font_size=130 # 字体最大值
    )
    wc.generate_from_frequencies(words) # 从字典生成词云
    image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
    wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
    plt.imshow(wc) # 显示词云
    plt.axis('off') # 关闭坐标轴
    plt.show() # 显示图像
    wc.to_file('ff.png')
if __name__ == "__main__":
    path=r'E:\vscode\code\ff.txt'
    impath=r'E:\vscode\code\topdodo_2.jpg'
    wordc(impath,get_words(path))