当前位置:   article > 正文

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

python 代码分word 词频并输出词频表

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

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

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

大家好,我是Python进阶者。

一、前言

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

二、实现过程

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

  1. import win32com.client as win32
  2. import jieba
  3. from collections import Counter
  4. import xlwt
  5. # 打开Word文档
  6. word = win32.gencache.EnsureDispatch('Word.Application')
  7. doc = word.Documents.Open('C:\\Desktop\\example.docx')
  8. # 读取文档内容并将其存储为字符串
  9. content = doc.Content.Text
  10. # 将字符串转为列表,并进行分词和词性标注
  11. words = jieba.cut(content)
  12. tags = [word.tag for word in words]
  13. freqs = Counter([word for word, tag in zip(words, tags) if tag != 'x'])
  14. # 创建Excel工作簿和工作表
  15. book = xlwt.Workbook()
  16. sheet = book.add_sheet('Keywords')
  17. # 写入表头
  18. sheet.write(00'关键词')
  19. sheet.write(01'词频')
  20. sheet.write(02'词性')
  21. # 写入关键词和对应的信息
  22. for i, (word, freq) in enumerate(freqs.items()):
  23.     sheet.write(i+10, word)
  24.     sheet.write(i+11, str(freq))
  25.     sheet.write(i+12, tags[i])
  26. # 将分词结果转换为列表并写入Excel表格中
  27. words_list = [word for word, tag in zip(words, tags) if tag != 'x']
  28. for i, word in enumerate(words_list):
  29.     sheet.write(i+1+len(words), 0, word)
  30.     freq = str(freqs[word])
  31.     sheet.write(i+1+len(words), 1, freq)
  32.     pos = '' if not tags else tags[i] + '/' + pos_tag[tags[i]]
  33.     sheet.write(i+1+len(words), 2, pos)
  34. # 保存Excel文件
  35. 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. 将关键词、词性和词频分别写入文件的不同列中。

下面是可能的实现代码:

  1. import docx
  2. import jieba
  3. from collections import Counter
  4. import openpyxl
  5. from openpyxl import Workbook
  6. from nltk import pos_tag
  7. # 读取 word 文档中的内容
  8. doc = docx.Document('test.docx')
  9. text = ""
  10. for para in doc.paragraphs:
  11.     text += para.text
  12. # 对文本进行分词,并过滤无意义单词
  13. words = [word for word in jieba.cut(text) if len(word) > 1 and not word.isnumeric()]
  14. # 统计单词词频
  15. word_counts = Counter(words)
  16. # 对每个单词进行词性标注
  17. pos_dict = dict(pos_tag(word_counts.keys()))
  18. # 将关键词、词性、词频存入列表中
  19. keywords = []
  20. for word, count in word_counts.items():
  21.     pos = pos_dict[word]
  22.     keywords.append([word, count, pos])
  23. # 创建 Excel 文件
  24. wb = Workbook()
  25. sheet = wb.active
  26. # 将关键词、词性、词频写入 Excel 文件
  27. sheet['A1'] = '关键词'
  28. sheet['B1'] = '词频'
  29. sheet['C1'] = '词性'
  30. for i, row in enumerate(keywords):
  31.     sheet['A{}'.format(i+2)] = row[0]
  32.     sheet['B{}'.format(i+2)] = row[1]
  33.     sheet['C{}'.format(i+2)] = row[2]
  34. # 保存 Excel 文件
  35. 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 -------------------

往期精彩文章推荐:

d8a50e724a1d063ea749772179dce9fd.png

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

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

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

/今日留言主题/

随便说一两句吧~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/377138
推荐阅读
相关标签
  

闽ICP备14008679号