使用Python+docx+jieba+wordcloud给word文档生成词云图

一、使用Python+docx+jieba+wordcloud给word文档生成词云图

python 复制代码
import docx # 用于读取word文档
import jieba # 用于中文分词
import re # 用于正则表达式匹配
import wordcloud # 用于生成词云图
import matplotlib.pyplot as plt # 用于显示和保存图片


# 定义一个函数,用于从word文档中提取所有的文本
def get_text_from_docx(filename):

    # 创建一个docx.Document对象,打开指定的word文档
    doc = docx.Document(filename)

    # 创建一个空字符串,用于存储所有的文本
    text = ""

    # 遍历文档中的每一段
    for para in doc.paragraphs:

        # 将段落的文本追加到字符串中,并加上换行符
        text += para.text + "\n"

    # 返回字符串
    return text

# 定义一个函数,用于对文本进行分词,并返回一个词汇列表
def get_words_from_text(text):

    # 创建一个空列表,用于存储分词结果
    words = []

    # 使用jieba.cut方法对文本进行分词,返回一个生成器对象
    segs = jieba.cut(text)

    # 遍历生成器对象中的每一个分词结果
    for seg in segs:

        # 去掉分词结果两端的空白字符
        seg = seg.strip()

        # 如果分词结果不为空,并且是中文或英文单词,则将其添加到列表中
        if seg and (re.match(r"[\u4e00-\u9fa5]+", seg) or re.match(r"[a-zA-Z]+", seg)):
            words.append(seg)

    # 返回列表
    return words

# 定义一个函数,用于根据词汇列表生成词云图,并保存为jpg图像
def generate_wordcloud_from_words(words, filename):

    # 将词汇列表转换为以空格分隔的字符串
    text = " ".join(words)

    # 创建一个wordcloud.WordCloud对象,设置字体、背景颜色、最大词数等参数
    wc = wordcloud.WordCloud(font_path="msyh.ttc", background_color="white", max_words=100)

    # 使用generate方法根据字符串生成词云图
    wc.generate(text)

    # 使用matplotlib.pyplot模块显示和保存图片
    plt.imshow(wc) # 显示图片
    plt.axis("off") # 关闭坐标轴
    plt.savefig(filename) # 保存图片为jpg格式

# 定义要处理的word文档的文件名
docx_filename = "words.docx"

# 定义要保存的词云图的文件名
jpg_filename = "wordcloud.jpg"

# 从word文档中提取所有的文本
text = get_text_from_docx(docx_filename)

# 对文本进行分词,并返回一个词汇列表
words = get_words_from_text(text)

# 根据词汇列表生成词云图,并保存为jpg图像
generate_wordcloud_from_words(words, jpg_filename)
相关推荐
苏其鸿1 分钟前
Python开发入门:从环境搭建到第一个实用小项目
python
练习两年半的攻城狮4 分钟前
【RAG实战】知识库 BGE-M3 稀疏向量混合检索方案
python·fastapi·llamaindex
l12586510 分钟前
# LangGraph 核心架构入门:State、Node、Edge 与 Reducer 的工程理解
大数据·人工智能·python·架构·langchain·edge
圆圆讲门店37 分钟前
实体获客团队|基础概念与核心要点整理
人工智能·python
砚底藏山河1 小时前
【量化纯GET实战 #04】批量快照:一次 HTTP GET 取多只股票
java·python·金融·eclipse
烂蜻蜓1 小时前
Flask入门教程(九):模板渲染——用Jinja2构建动态页面
后端·python·flask
2601_966871401 小时前
AE影视后期特效-遮罩/调色/抠像/MG动画/3D/Vlog制作(完结)jzit
python
circuitsosk1 小时前
大模型本体安全防护实践:提示词注入防御、输出合规过滤与敏感信息脱敏
python·安全·数据脱敏·纵深防御·提示词注入·llmsecurity
工业一体机老司机2 小时前
Python实现工业一体机Modbus-TCP通信-从协议解析到多设备轮询实战
开发语言·python·tcp/ip
2401_885885042 小时前
国际语音php接口代码示例:PHP使用cURL快速调用语音发送API
android·开发语言·前端·人工智能·python·php·语音识别