大家好,我是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 库实现该功能,具体步骤如下:
下面是可能的实现代码:
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,然后去下载对应的语义安装包即可,然后放到任意的一个目录之下,就出来了。
查了蛮多资料,后来总算是找到了一个靠谱的解决方法。
最后就可以得到预取的结果了,如下图所示:
关于词性的意思,网上一大堆,这里就不再一一例举了。
大家好,我是Python进阶者。这篇文章主要盘点了一个Python
文本分析处理的问题,使用Python获取了Word文本中的关键词、词频和词性,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。