python 批量统计word文档,jieba词频统计(docx文件)

使用python jieba库,批量统计某文件夹下所有docx文件内的关键词的词频,并且支持自定义词库。

其中 'D:/2.txt' 为自定义的关键词文本。之所以要自定义关键字,还是因为jieba对都写关键词的统计还不够人性化。例如'中国人民', 如果不自定义的话,jieba可能会将这个词拆分成  '中国'和'人民'两个关键词。但是如果你想把'中国人民'作为一个关键词来统计的话,你可以在这个txt文件中  写入'中国人民',多个关键词换行或者空格隔开即可(记住只需要写入关键词,不要把引号也带上)

out2.txt和out3.txt是将输出结果写入本地的

d:\nnword 就是你要遍历的docx文件的地址。

只需要将你的docx文件全部放到指定的文件夹下(d:\nnword)。然后自定义一个词库问文本文件(D:/2.txt) 然后直接运行代码就行。

代码如下:  

import jieba
import os
from docx import Document

# 创建关键词列表
keywords = []
jieba.load_userdict('D:/2.txt')  # 增加自定义词库
key_open = open('D:/2.txt', 'r', encoding='utf-8')
for words in key_open:
    keywords.append(words.strip())
key_open.close()

print(keywords)

word_dict2 = {}
word_lst = []


def word_list(word_dict, word_lst): 
    # 统计词
    for item in word_lst:
        if item not in word_dict:
            word_dict[item] = 1
        else:
            word_dict[item] += 1
    return word_dict


with open('D:/out1.txt', 'w') as wf1:
    for info in os.listdir(r'd:\nnword'):     # 'd:\nnword' 是docx文档的地址
        domain = os.path.abspath(r'd:\nnword')
        print('《' + info + '》')  # 打印出docx的文件名
        print('------------------------------')
        info1 = os.path.join(domain, info)  # 拼接路径
        document = Document(info1)
        word_lst1 = []
        word_dict1 = {}
        # 打开 docx 文件
        for paragraph in document.paragraphs:  # 遍历每一个docx文档
            tags = jieba.cut(paragraph.text)
            for t in tags:
                if len(t) > 1:
                    word_lst.append(t)
                    word_lst1.append(t)
        # 统计每篇文章的输出结果,并排序
        word_list(word_dict1, word_lst1)
        word_sort1 = sorted(word_dict1.items(), key=lambda x: x[1], reverse=True)
        wf1.write(str('*' * 5) + info + str('*' * 5) + '\n')  # 打印题目
        # 将每篇文章的 统计结果输出到文本
        for i in range(len(word_sort1)):
            if word_sort1[i][0] in keywords:
                wf1.write(str(word_sort1[i][0] + '\t\t' + str(word_sort1[i][1]) + '\n'))
# 总的统计结果,
word_list(word_dict2, word_lst)
word_sort = sorted(word_dict2.items(), key=lambda x: x[1], reverse=True)

with open("D:/out2.txt", 'w') as wf2, open("D:/out3.txt", "w") as wf3:
    for i in range(len(word_sort)):
        # 总的分词结果
        wf2.write(str(word_sort[i][0]) + '\t\t' + str(word_sort[i][1]) + '\n')
        if word_sort[i][0] in keywords:
            # 符合关键词的
            wf3.write("{0:15}\t{1:10}".format(str(word_sort[i][0]), str(word_sort[i][1]), chr(12288)) + '\n')
wf2.close()
wf3.close()

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值