word by word什么意思中文(基于word文档,使用Python输出关键词和词频,并将关键词的词性也标注出来)

wufei123 发布于 2023-11-16 阅读(528)

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

02实现过程这里一开始我也不知道怎么处理,后来问了科大讯飞的AI平台,给了一个代码,如下所示,但是跑不起来import win32com.client as win32import jiebafrom collections

import Counterimport 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 = ifnot 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 库实现该功能,具体步骤如下:使用 docx 库读取 word 文档中的所有文本,并将其存入一个字符串中。

使用 jieba 分词库对文本进行分词处理,并过滤掉无用词汇利用 Python 中的 Collection 库的 Counter 类,统计每个单词的词频使用 Python 中的 NLTK 库对每个单词进行词性标注,将其存入一个字典中。

使用 openpyxl 库创建一个 Excel 文件,并在其中创建一个工作表将关键词、词性和词频分别写入文件的不同列中下面是可能的实现代码:import docximport jiebafrom collections 。

import Counterimport openpyxlfrom openpyxl import Workbookfrom 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) > 1andnot 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,然后去下载对应的语义安装包即可,然后放到任意的一个目录之下,就出来了。

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

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

关于词性的意思,网上一大堆,这里就不再一一例举了。- 合作、交流、转载请添加微信 moonhmily1 -

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。