基于word文档,使用Python输出关键词和词频,并将关键词的词性也标注出来

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

移船相近邀相见,添酒回灯重开宴。

大家好,我是Python进阶者。

一、前言

前几天在有个粉丝问了个问题,大概意思是这样的:基于Python代码,要求输出word文档中的关键词和词频,并且将关键词的词性也标注出来,最终输出一个Excel文件,一共3列,列名分别是关键词、词频和词性。

二、实现过程

这里一开始我也不知道怎么处理,后来问了科大讯飞的AI平台,给了一个代码,如下所示,但是跑不起来。

import win32com.client as win32
import jieba
from collections import Counter
import xlwt

# 打开Word文档
word = win32.gencache.EnsureDispatch('Word.Application')
doc = word.Documents.Open('C:\\Desktop\\example.docx')

# 读取文档内容并将其存储为字符串
content = doc.Content.Text

# 将字符串转为列表,并进行分词和词性标注
words = jieba.cut(content)
tags = [word.tag for word in words]
freqs = Counter([word for word, tag in zip(words, tags) if tag != 'x'])

# 创建Excel工作簿和工作表
book = xlwt.Workbook()
sheet = book.add_sheet('Keywords')

# 写入表头
sheet.write(0, 0, '关键词')
sheet.write(0, 1, '词频')
sheet.write(0, 2, '词性')

# 写入关键词和对应的信息
for i, (word, freq) in enumerate(freqs.items()):
    sheet.write(i+1, 0, word)
    sheet.write(i+1, 1, str(freq))
    sheet.write(i+1, 2, tags[i])

# 将分词结果转换为列表并写入Excel表格中
words_list = [word for word, tag in zip(words, tags) if tag != 'x']
for i, word in enumerate(words_list):
    sheet.write(i+1+len(words), 0, word)
    freq = str(freqs[word])
    sheet.write(i+1+len(words), 1, freq)
    pos = '' if not tags else tags[i] + '/' + pos_tag[tags[i]]
    sheet.write(i+1+len(words), 2, pos)

# 保存Excel文件
book.save('C:\\Desktop\\example.xls')

一直提示AttributeError: 'str' object has no attribute 'tag',没办法,方法是好的,把tag改为flag,也不好使。后来求助了Zelinai,其给了一个解决方法,如下所示:

可以使用 Python 中的 docx 和 openpyxl 库实现该功能,具体步骤如下:

  1. 使用 docx 库读取 word 文档中的所有文本,并将其存入一个字符串中。

  2. 使用 jieba 分词库对文本进行分词处理,并过滤掉无用词汇。

  3. 利用 Python 中的 Collection 库的 Counter 类,统计每个单词的词频。

  4. 使用 Python 中的 NLTK 库对每个单词进行词性标注,将其存入一个字典中。

  5. 使用 openpyxl 库创建一个 Excel 文件,并在其中创建一个工作表。

  6. 将关键词、词性和词频分别写入文件的不同列中。

下面是可能的实现代码:

import docx
import jieba
from collections import Counter
import openpyxl
from openpyxl import Workbook
from nltk import pos_tag

# 读取 word 文档中的内容
doc = docx.Document('test.docx')
text = ""
for para in doc.paragraphs:
    text += para.text

# 对文本进行分词,并过滤无意义单词
words = [word for word in jieba.cut(text) if len(word) > 1 and not word.isnumeric()]

# 统计单词词频
word_counts = Counter(words)

# 对每个单词进行词性标注
pos_dict = dict(pos_tag(word_counts.keys()))

# 将关键词、词性、词频存入列表中
keywords = []
for word, count in word_counts.items():
    pos = pos_dict[word]
    keywords.append([word, count, pos])

# 创建 Excel 文件
wb = Workbook()
sheet = wb.active

# 将关键词、词性、词频写入 Excel 文件
sheet['A1'] = '关键词'
sheet['B1'] = '词频'
sheet['C1'] = '词性'
for i, row in enumerate(keywords):
    sheet['A{}'.format(i+2)] = row[0]
    sheet['B{}'.format(i+2)] = row[1]
    sheet['C{}'.format(i+2)] = row[2]

# 保存 Excel 文件
wb.save('keywords.xlsx')

请注意在使用前需要先安装 jieba, nltk 和 openpyxl 库。

这里运行之后,会出现一个这样的报错,(nltk加载词性词库报错)Resource averaged_perceptron_tagger not found. Please use the NLTK Downloader to obtain the resource:。

其实就是未找到资源averaged_perceptron_tagger,请使用NLTK下载器获取资源。根据报错给的URL,然后去下载对应的语义安装包即可,然后放到任意的一个目录之下,就出来了。

ad67afcdbb5b3064402a505ee0cb57f0.png

查了蛮多资料,后来总算是找到了一个靠谱的解决方法。

14f99893919645dc4ab9a7820e690799.png

最后就可以得到预取的结果了,如下图所示:

9b9488a8b32d1495b41c38b02c7ab800.png

关于词性的意思,网上一大堆,这里就不再一一例举了。

三、总结

大家好,我是Python进阶者。这篇文章主要盘点了一个Python文本分析处理的问题,使用Python获取了Word文本中的关键词、词频和词性,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

0d4f5b6d0e27f6af033bd259f39a1461.png

大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting1),应粉丝要求,我创建了一些高质量的Python付费学习交流群和付费接单群,欢迎大家加入我的Python学习交流群和接单群!

3e300c36e53d2db3dce3dda17985fbc7.png

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

268a6e8cc5c4011a3482a875817fa7fe.jpeg

------------------- End -------------------

往期精彩文章推荐:

  • if a and b and c and d:这种代码有优雅的写法吗?

  • Pycharm和Python到底啥关系?

  • 都说chatGPT编程怎么怎么厉害,今天试了一下,有个静态网页,chatGPT居然没搞定?

  • 站不住就准备加仓,这个pandas语句该咋写?

d8a50e724a1d063ea749772179dce9fd.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/27302.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一阶电路和二阶电路的时域分析(1)——“电路分析”

小雅兰期末加油冲冲冲!!! 动态电路的方程及其初始条件 动态电路,物理学名词,是指含有储能元件L、C的电路,动态电路方程的阶数通常等于电路中动态元件的个数。 动态电路是指含有储能元件的电路。当动态电路状…

【Java】Java核心要点总结:58

文章目录 1. java中 怎么确保一个集合不能被修改2. 队列和栈是什么 有什么区别3. Java8开始的ConcurrentHashMap为什么舍弃了分段锁4. ConcurrentHashMap 和 Hashtable有什么区别5. ReadWriteLock和StampeLock 1. java中 怎么确保一个集合不能被修改 Java 中可以使用 Collectio…

计算机网络(数据链路层,复习自用)

数据链路层 数据链路层功能概述封装成帧与透明传输差错编码(检错编码)差错编码(纠错编码)流量控制与可靠传输机制停止-等待协议后退N帧协议(GBN)选择重传协议(Selective Repeat) 信道…

并行事务会引发的三个问题

并行事务是指同时运行多个事务,每个事务独立地执行,并且不会相互影响。在数据库管理系统中,当多个用户同时对同一个数据集进行读取或者写入的时候,使用并行事务可以提高系统的吞吐量和响应时间。同时,由于并行事务可以…

【MySQL 数据库】7、SQL 优化

目录 一、插入数据优化(1) insert 语句① 批量插入数据② 手动控制事务③ 主键顺序插入,性能要高于乱序插入 (2) load 大批量插入数据【☆❀ 二、主键优化(1) 数据组织形式(2) 页分裂(3) 页合并(4) 主键设计原则 三、orber by 优化四、group by 优化五、limit 优化&…

基于前推回代法的连续潮流计算研究【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

基于Java+Springboot+Vue的二次元商城网站设计与实现

博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…

YOLO系列理论合集(YOLOv1~v3SPP)

前言:学习自霹雳吧啦Wz YOLOV1 论文思想 1、将一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。 2、每个网格要预测B个bounding box,每个bounding box除了要预测位置(…

基于NE555芯片的简单延时电路和方波信号发生器

简单延时电路 NE555芯片是一种经典的计时器集成电路,常用于电子设计中的定时和延时功能。下面是一个简单的NE555延时电路的详细分析和讲解: NE555芯片是一个多功能的集成电路,主要由比较器、RS触发器、RS锁存器以及输出驱动器等组成。它可以工…

Mysql进阶【3】论述Mysql优化

1.通过explain查看sql的详细信息 Mysql的sql优化企业里边主要是对慢sql进行优化,对语句进行优化,对索引进行优化 通过explain查看sql的详细信息,并且分析sql语句存在的问题,比如有没有使用到索引、使用了索引还是慢是不是索引设…

机器学习笔记 - EANet 外部注意论文简读及代码实现

一、论文简述 论文作者提出了一种新的轻量级注意力机制,称之为外部注意力。如图所示,计算自注意力需要首先通过计算自查询向量和自关键字向量之间的仿射关系来计算注意力图,然后通过用该注意力图加权自值向量来生成新的特征图。外部关注的作用…

智慧加油站解决方案,提高加油区和卸油区的安全性和效率

英码科技智慧加油站解决方案是一个综合应用了AI智能算法的视觉分析方案,旨在提高加油区和卸油区的安全性和效率。 加油区算法: 吸烟检测:通过AI算法分析视频流,检测是否有人在加油区域吸烟,以防止火灾风险。 打电话…

STM32开发——串口通讯(非中断+中断)

目录 1.串口简介 2.非中断接收发送字符 3.中断接收字符 1.串口简介 通过中断的方法接受串口工具发送的字符串,并将其发送回串口工具。 串口发送/接收函数: HAL_UART_Transmit(); 串口发送数据,使用超时管理机制HAL_UART_Receive(); 串口…

案例26:基于Springboot校园社团管理系统开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

苹果MacOS系统傻瓜式本地部署AI绘画Stable Diffusion教程

Stable Diffusion的部署对小白来说非常麻烦,特别是又不懂技术的人。今天分享两个一键傻瓜式安装包,对小白来说非常有用。下面两个任选一个安装就可以。 一、DiffusionBee 简单介绍 DiffusionBee是基于stable diffusion的一个安装包,有图形…

python文字转语音(pyttsx3+flask)

提示:文章结尾有全部代码 目录 前言一、Flaskpyttsx基本使用Flask导入Flask框架配置基础环境初始Flask代码 pyttsx3库基本使用导入pyttsx3初始化pyttsx3文字转语音运行 二、具体实现1.引入库 总结 前言 本文主要讲解如何用python的pyttsx3库flask框架,手…

有了IP地址,还需要MAC地址嘛?二选一可否?

概要 在计算机网络中,IP地址和MAC地址是两个最基本的概念。IP地址在互联网中是用于标识主机的逻辑地址,而MAC地址则是用于标识网卡的物理地址。虽然它们都是用于标识一个设备的地址,但是它们的作用和使用场景是不同的。 IP地址是在网络层&am…

数据结构之树与二叉树——算法与数据结构入门笔记(五)

本文是算法与数据结构的学习笔记第五篇,将持续更新,欢迎小伙伴们阅读学习。有不懂的或错误的地方,欢迎交流 引言 前面章节介绍的都是线性存储的数据结构,包括数组、链表、栈、队列。本节带大家学习一种非线性存储的数据结构&…

chatgpt赋能python:Python分词:从原理到实践

Python分词:从原理到实践 分词是自然语言处理中的关键步骤之一,它是指将一句话或一段文本分成若干个词语(token)并进行标注。Python作为一种非常流行的编程语言,具备强大的文本处理能力,而分词也是它的强项…

chatgpt赋能python:Python如何切换中文

Python 如何切换中文 Python 是一种广泛使用的编程语言,被用于多种目的,包括数据分析、机器学习、Web 应用程序等。在使用 Python 进行开发时,需要处理不同的语言,其中中文也是包括在内的。对于需要切换中文的情况,本…