python词频分析2

上一篇绘制了一个简单的词云图,下面在学习一些改进。


from wordcloud import WordCloud
import jieba
import imageio
with open('threekingdom.txt', 'r', encoding='utf-8') as f1:
    list1 = f1.read()
    list2 = jieba.lcut(list1)
    excludes = {"将军", "却说", "荆州", "二人", "不可", "不能", "如此", "如何", "东吴",
                "商议", "军马", "引兵", "次日", "主公", "左右", "大喜", "军士", "天下",
                "今日", "于是", "不敢", "魏兵", "都督", "陛下","玄德曰","孔明曰"
                }


    count={}#字典
    for word in list2:
      if len(word)<=1:
            continue
      else:
          count[word]=count.get(word,0)+1

    count["孔明"]=count["孔明"]+count["孔明曰"]
    count["玄德"] = count["玄德"] + count["玄德曰"]+count["刘备"]
    count["关公"] = count["关公"] + count["云长"]
    for word in excludes:
        del count[word]
    #print(count)
#转换成列表排序
    new_word_list=list(count.items())#元组
#print(new_word_list)
#进行排序
    new_word_list.sort(key=lambda x:x[1],reverse=True)
    text_list=[]
    for x in range(10):#显示前二十
     #print(new_word_list[x])
     role,count=new_word_list[x]#拆包
     print(role,count)
     for j in range(count):
        text_list.append(role)
     print(text_list)
     text=" ".join(text_list)
mask = imageio.imread("china.jpg")
wc = WordCloud(
        width=1000,
        height=800, 
        background_color='white',
        font_path="MSYH.TTC",
        mask=mask,
        collocations=False
    ).generate(text).to_file("三国词云.png")

上面的代码主要的改进是,把我不需要的词但是词频高的删除,之后再把重复的词从词云中删除,把同义词合并。注意wordcount的collocation的用法,还有这里的元组的转换,还有join函数,都是值得研究的点。

好的,我会根据你的要求来回答你的问题。 首先,我需要说明一下,您提出的问题是一个要求,而不是一个问题。但是,我可以为您提供一个解决方案来实现这个要求。 以下是一个可能的解决方案: 1. 分词 使用jieba库对中文文本进行分词是非常容易的。您只需要安装jieba库,然后导入它并使用它的cut函数即可,如下所示: ```python import jieba text = "这是一段中文文本。" words = jieba.cut(text) print(list(words)) ``` 此代码将输出一个列表,其中包含文本中所有的词语。 2. 停用词表 停用词是指在文本中出现频率非常高,但却没有太多意义的词语。这些词语包括符号、虚词、长度为1的词等。 您可以将停用词表保存为一个文件,然后在分词后使用它来去除停用词。以下是一个示例代码: ```python import jieba # 加载停用词表 stopwords_path = "stopwords.txt" with open(stopwords_path, "r", encoding="utf-8") as f: stopwords = set([word.strip() for word in f.readlines()]) # 分词 text = "这是一段中文文本。" words = jieba.cut(text) # 去除停用词 words = [word for word in words if word not in stopwords and len(word) > 1] print(words) ``` 3. 同义词、近义词合并 同义词、近义词合并是一个比较复杂的问题,需要使用词向量模型等技术。这里我们暂时不考虑这个问题。 4. 词云图 制作词云图需要使用第三方库,如wordcloud和matplotlib。您需要安装这些库。 以下是一个示例代码: ```python import jieba from wordcloud import WordCloud, ImageColorGenerator import matplotlib.pyplot as plt from PIL import Image # 加载停用词表 stopwords_path = "stopwords.txt" with open(stopwords_path, "r", encoding="utf-8") as f: stopwords = set([word.strip() for word in f.readlines()]) # 分词 text = "这是一段中文文本。" words = jieba.cut(text) # 去除停用词 words = [word for word in words if word not in stopwords and len(word) > 1] # 词频统计 word_count = {} for word in words: if word not in word_count: word_count[word] = 0 word_count[word] += 1 # 生成词云图 mask_path = "mask.png" # 自选的词云形状图片 mask = np.array(Image.open(mask_path)) wc = WordCloud(background_color="white", mask=mask, max_words=1000, font_path="simhei.ttf", max_font_size=100, min_font_size=10, width=800, height=800, random_state=42) wc.generate_from_frequencies(word_count) # 设置颜色 image_colors = ImageColorGenerator(mask) wc.recolor(color_func=image_colors) # 保存词云图 wc.to_file("wordcloud.png") # 显示词云图 plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.show() ``` 5. 不重复出现相同的词 WordCloud库默认会显示相同的词语。如果您想要避免这种情况,可以在统计词频时限制每个词语的出现次数。 示例代码: ```python import jieba from wordcloud import WordCloud, ImageColorGenerator import matplotlib.pyplot as plt from PIL import Image # 加载停用词表 stopwords_path = "stopwords.txt" with open(stopwords_path, "r", encoding="utf-8") as f: stopwords = set([word.strip() for word in f.readlines()]) # 分词 text = "这是一段中文文本。" words = jieba.cut(text) # 去除停用词 words = [word for word in words if word not in stopwords and len(word) > 1] # 词频统计 word_count = {} for word in words: if word not in word_count: word_count[word] = 0 word_count[word] += 1 # 限制每个词语的出现次数 max_count = 3 word_count = {k: v for k, v in word_count.items() if v <= max_count} # 生成词云图 mask_path = "mask.png" # 自选的词云形状图片 mask = np.array(Image.open(mask_path)) wc = WordCloud(background_color="white", mask=mask, max_words=1000, font_path="simhei.ttf", max_font_size=100, min_font_size=10, width=800, height=800, random_state=42) wc.generate_from_frequencies(word_count) # 设置颜色 image_colors = ImageColorGenerator(mask) wc.recolor(color_func=image_colors) # 保存词云图 wc.to_file("wordcloud.png") # 显示词云图 plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.show() ``` 希望这个解决方案能够满足您的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值