Python 词云:先入坑

最近怎么老觉得爬虫是一个及其危险的行业呢?
算了,今天不聊爬虫。
主要说说 Python 是怎么处理这些爬虫得来的数据的。

就从最简单的词频 和 词云开始入手

词云图

根据人类的一贯思维,需要知道为什么需要词云图?
简单来说,词云,是一种用于从文本中生成不同频率的词汇的结果展现。
云图会更加突出话题并频繁地出现在源文本。
可以调整不同的字体,布局和配色方案。

如果你有一些文章,想知道这些文章到底在说什么,那么就统计词频做成词云 做一个结果的展示,这就是最通俗的解释了词云的应用。

安装依赖

pip install jieba
pip install matplotlib
pip install wordcloud

生成词云

# -*- coding: utf-8 -*-
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud

contents = []
na= "阿宽"

# 生成大 list
with open(f'txt/{na}.txt', mode='r', encoding='utf-8') as f:
    rows = f.readlines()
    for row in rows:
        contents.append(row)


def wordCloudShow(stopwords,font):

    # 设置分词
    contents_after_split = jieba.cut(str(contents), cut_all=False)  # 准确分词
    words = ' '.join(contents_after_split)

    # 设置屏蔽词
    STOPWORDS = set(map(str.strip, open(stopwords,encoding="utf-8").readlines()))
    print(STOPWORDS)

    # 导入背景图
    bg_image = plt.imread('image/wocao.jpg')

    # 画布宽高、背景颜色、背景图形状、字体,屏蔽词、最大词的字体大小
    wc = WordCloud(background_color='white',
                   mask=bg_image,
                   font_path=font,
                   stopwords=STOPWORDS,
                   max_font_size=200,
                   random_state=200)

    # 将分词后数据传入云图
    wc.generate_from_text(words)
    plt.imshow(wc)
    plt.axis('off')  # 不显示坐标轴
    plt.show()

    # 保存结果到本地
    wc.to_file(f'词云图/{na}.jpg')

#传入 暂停词(剔除掉的词汇)文件  和  字体文件 
wordCloudShow("stopwords","msyhbd.ttf")
stopwords 可能长这样
现在
可以
但是
所以
因为
就是
很多
时候
还是
感觉
觉得
一些
之前
而且
之后
还有
这个
没有
什么
不是
不会
然后
如果
......

字体文件 和 背景图 随便找一个就行

生成效果图

统计词频

#coding:utf-8
import jieba
from collections import Counter
import json
import matplotlib.pyplot as plt

na = "番尼鱼"
def txt2plt():
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['font.family']='sans-serif'
    xianni=open(f"../txt/{na}.txt",'r',encoding='utf-8').read()
    xianni_words = [x for x in jieba.cut(xianni) if len(x) >= 2] # 大于两个字的词语
    c=Counter(xianni_words).most_common(15) # 取15
    print(json.dumps(c, ensure_ascii=False))

    name_list=[x[0for x in c] # X轴的值
    num_list=[x[1for x in c] # Y轴的值
    plt.bar(range(len(num_list)), num_list,tick_label=name_list) # 饼图

    plt.xlabel(u'词语')
    plt.ylabel(u'次数')
    plt.title(u'文本分词统计')
    plt.savefig(f"../词频图/{na}.jpg")
    plt.show()

txt2plt()

生成词频图

可以看到我这里的数据都是从 txt文件 导进来的,当然其他文件比如 csv xlsx 也是可以的,不多说了

import csv
import json
import pymongo

client = pymongo.MongoClient("127.0.0.1"27017)

db = client['wocao']
collection = '番尼鱼'

datas = db.get_collection(collection).find({},{'_id':0,})

with open(f'../txt/{collection}.txt''a', encoding='utf-8-sig', newline='') as f:
    for data in datas:
        f.write(data["标题"] + " " +data["内容"] +"\n")

用 Python 做词云还是比较简单的,可以很直观的看出某些词汇在文本中占有的比重,提供参考价值


PYTHON 词云

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!