简单易学的文本分析1——词云分析

载入库

from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
import numpy as np
import jieba.posseg as pseg
from collections import Counter
from PIL import Image
from matplotlib import colors

文本读取与分词

从指定的文本文件中读取内容。

使用 jieba.posseg 对文本进行分词,并为每个词标注词性。

# 读取文本文件内容
# 在此替换为实际的文本文件路径
text_file_path = "gpt4_system2_80%.txt"
text = open(text_file_path, encoding="utf-8").read()

# 使用 jieba 进行分词,并附带词性标注
words = pseg.cut(text)

词汇筛选与统计

筛选出长度大于等于2的词,且词性为名词、动词或形容词的词。

统计筛选出的词的频率,提取前200个高频词。

# 提取指定词性(名词、动词、形容词)且长度大于等于2的词
report_words = [
    word for word, flag in words if len(word) >= 2 and flag.startswith(('n', 'v', 'a'))
]

# 统计高频词汇,取前200个词
result = Counter(report_words).most_common(200)
# 建立词汇字典,以便生成词云
content = dict(result)

高频词输出

打印输出前100个高频词及其出现频率。

# 输出前100个高频词汇及其频率
print("前100个高频词汇及其频率:")
for i in range(100):
    word, frequency = result[i]
    print(f"{word:<10}{frequency:>5}")

停用词设置

定义并设置停用词,即需要排除在词云之外的词汇。

# 设置停用词,可以根据需要添加更多停用词
stopwords = set(STOPWORDS)
#stopwords.update(["的", "感谢", "我代表", "以上", "报告", "表示诚挚感谢", "战略"])

词云生成与显示

设置词云生成的字体、颜色映射、最大和最小字体大小等参数。

使用 WordCloud 类根据词频生成词云。

使用 matplotlib 显示生成的词云图。

# 设置词云的字体路径,需替换为实际字体文件路径
font_path = "simhei.ttf"  # 替换为实际的字体路径

# 设置最大和最小字体大小
max_font_size = 300
min_font_size = 5

# 建立颜色列表并生成颜色映射
color_list = ['#FF274B']
colormap = colors.ListedColormap(color_list)

# 自定义颜色函数,使字体呈现蓝色深浅变化
def blue_color_func(word, font_size, position, orientation, random_state=None, **kwargs):
    return f"hsl(240, 100%, {100 - int(100 * font_size / max_font_size)}%)"

# 生成词云
wordcloud = WordCloud(
    scale=5,  # 设置输出图片的清晰度
    font_path=font_path,  # 字体路径
    # colormap=colormap,  # 使用自定义颜色映射
    width=1600,  # 输出图片的宽度
    height=900,  # 输出图片的高度
    background_color='white',  # 背景颜色
    stopwords=stopwords,  # 停用词
    max_font_size=max_font_size,  # 最大字体大小
    min_font_size=min_font_size,  # 最小字体大小
    color_func=blue_color_func  # 使用自定义颜色函数
).generate_from_frequencies(content)

# 使用 matplotlib 显示生成的词云
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()  # 显示词云图

词云保存

将生成的词云图保存为指定路径的图片文件。

# 保存词云图到文件
output_image_path = "gpt4_system2_80%.png"
wordcloud.to_file(output_image_path)

代码整合

最终全部代码

# 导入所需的库
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
import numpy as np
import jieba.posseg as pseg
from collections import Counter
from PIL import Image
from matplotlib import colors

# 读取文本文件内容
# 在此替换为实际的文本文件路径
text_file_path = "gpt4_system2_80%.txt"
text = open(text_file_path, encoding="utf-8").read()

# 使用 jieba 进行分词,并附带词性标注
words = pseg.cut(text)

# 提取指定词性(名词、动词、形容词)且长度大于等于2的词
report_words = [
    word for word, flag in words if len(word) >= 2 and flag.startswith(('n', 'v', 'a'))
]

# 统计高频词汇,取前200个词
result = Counter(report_words).most_common(200)
# 建立词汇字典,以便生成词云
content = dict(result)

# 输出前100个高频词汇及其频率
print("前100个高频词汇及其频率:")
for i in range(100):
    word, frequency = result[i]
    print(f"{word:<10}{frequency:>5}")

# 设置停用词,可以根据需要添加更多停用词
stopwords = set(STOPWORDS)
#stopwords.update(["的", "感谢", "我代表", "以上", "报告", "表示诚挚感谢", "战略"])

# 设置词云的字体路径,需替换为实际字体文件路径
font_path = "simhei.ttf"  # 替换为实际的字体路径

# 设置最大和最小字体大小
max_font_size = 300
min_font_size = 5

# 建立颜色列表并生成颜色映射
color_list = ['#FF274B']
colormap = colors.ListedColormap(color_list)

# 自定义颜色函数,使字体呈现蓝色深浅变化
def blue_color_func(word, font_size, position, orientation, random_state=None, **kwargs):
    return f"hsl(240, 100%, {100 - int(100 * font_size / max_font_size)}%)"

# 生成词云
wordcloud = WordCloud(
    scale=5,  # 设置输出图片的清晰度
    font_path=font_path,  # 字体路径
    # colormap=colormap,  # 使用自定义颜色映射
    width=1600,  # 输出图片的宽度
    height=900,  # 输出图片的高度
    background_color='white',  # 背景颜色
    stopwords=stopwords,  # 停用词
    max_font_size=max_font_size,  # 最大字体大小
    min_font_size=min_font_size,  # 最小字体大小
    color_func=blue_color_func  # 使用自定义颜色函数
).generate_from_frequencies(content)

# 使用 matplotlib 显示生成的词云
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()  # 显示词云图

# 保存词云图到文件
output_image_path = "gpt4_system2_80%.png"
wordcloud.to_file(output_image_path)

输出的词云图

### 使用爬虫抓取数据用于关键云分析 #### 数据收集方法 对于从网络上获取文本数据以进行关键云分析的任务,可以采用Python编程语言配合特定库来完成。具体来说,`requests` 或 `scrapy` 是常用的HTTP请求库,能够模拟浏览器行为向目标网页发送请求;而BeautifulSoup或lxml则擅长解析HTML文档结构,方便定位所需的信息节点[^2]。 当面对具有反爬机制的目标站点时,可能还需要引入Selenium这样的自动化测试框架,它能启动真实的浏览器实例执行页面加载动作,绕过一些简单的防护措施。与此同时,在编写爬虫程序的过程中加入随机延时、更换User-Agent头信息等策略有助于降低被封禁的风险[^3]。 #### 文本预处理流程 一旦成功采集到了原始评论内容之后,则需对其进行一系列清理工作以便后续加工利用。这其中包括但不限于去除HTML标签、过滤特殊字符以及转换编码格式等等。更为重要的是要实施中文分词操作——鉴于汉语不同于西方语言的特点,无法简单依赖空白符作为单边界划分依据,因此推荐借助第三方插件如结巴(Jieba)来进行高效精准的切分作业[^4]。 ```python import jieba from collections import Counter def preprocess_text(text): words = jieba.lcut(text) filtered_words = [word for word in words if not is_stop_word(word)] return " ".join(filtered_words) data['cleaned_comments'] = data['comments'].apply(preprocess_text) ``` 在此基础上进一步计算各条出现次数,并挑选出排名靠前的部分构成最终呈现给用户的视觉素材[^1]。 #### 关键云生成工具 最后一步便是调用专门设计用来绘制此类图表的专业软件包——比如Matplotlib搭配WordCloud模块就非常适合做这项任务。只需准备好经过上述步骤整理后的纯文本文件即可轻松产出美观大方又富含深意的艺术作品了! ```python from wordcloud import WordCloud import matplotlib.pyplot as plt comment_string = ' '.join(data['cleaned_comments']) wc = WordCloud(font_path='simhei.ttf', width=800, height=400).generate(comment_string) plt.figure(figsize=(15,7)) plt.imshow(wc, interpolation="bilinear") plt.axis('off') plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱做科研的桶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值