本文背景是大学关系很好的老师最近在做文本挖掘相关的项目,想要我用Python帮她实现公司年报中某些词出现次数的统计。
根据她提供的部分年报文档,设计了实现代码,只要把文档放到指定的文件夹中,即可全量实现。
从指定文档中统计词频可以应用在写毕业论文、行业分析、商业价值挖掘等多个模块,故把全量代码分享给更多有需要的朋友。
一、获取指定文件夹下的全量文件名
由于不同的项目文件数量和名称是不固定的,故写代码自动获取指定文件夹下所有的文件名。具体代码如下:
import os
filePath = r'F:\公众号\82_年报分词\试试' # 存放txt文档的文件路径
os.chdir(filePath) # 设置文件读取路径
files = os.listdir(filePath) # 获取filePath路径下的所有txt文件
files
注:filePath要改成你存待统计词频的文件(年报)路径。
得到结果:
['000001_2002_20020418_2001年年度报告.txt',
'000001_2003_20030424_2002年年度报告.txt',
'000001_2004_20040415_2003年年度报告.txt',
'000001_2005_20050426_2004年年度报告.txt',
'000001_2006_20060401_2005年年度报告.txt',
'000001_2007_20070322_2006年年度报告.txt',
'000001_2008_20080320_2007年年度报告.txt',
'000001_2009_20090320_2008年年度报告.txt',
'000001_2010_20100312_2009年年度报告.txt',
'000001_2011_20110225_2010年年度报告.txt',
'000001_2012_20120309_2011年年度报告.txt',
'000001_2013_20130308_2012年年度报告.txt',
'000001_2014_20140307_2013年年度报告.txt',
'000001_2015_20150313_2014年年度报告.txt',
'000001_2016_20160310_2015年年度报告.txt',
'000001_2017_20170317_2016年年度报告.txt',
'000001_2018_20180315_2017年年度报告.txt',
'000001_2019_20190307_2018年年度报告.txt',
'000001_2020_20200214_2019年年度报告.txt',
'000001_2021_20210202_2020年年度报告.txt',
'000001_2022_20220310_2021年年度报告.txt',
'000001_2023_20230309_2022年年度报告.txt']
可以发现结果是一个文件列表。
二、写循环实现词频统计
接着写循环统计每个文件中指定词出现的次数,具体代码如下:
import numpy as np
import pandas as pd
wd_list = ['董事会', '金融', '哈哈哈哈'] #要统计的词
txts_wd = []
for file in files:
f = open(file, encoding='utf-8') # 打开文件
txt = ''
for line in f:
txt += line.strip() #合并单行成一个txt
txt_wd = file + ';'
for i in wd_list:
num = txt.count(i)
txt_wd += i + '=' + str(num) + ';'
txts_wd.append(txt_wd)
txts_wd
注:wd_list中填入你想统计的词,可加逗号无限扩展。
得到结果:
['000001_2002_20020418_2001年年度报告.txt;董事会=93;金融=90;哈哈哈哈=0;',
'000001_2003_20030424_2002年年度报告.txt;董事会=89;金融=102;哈哈哈哈=0;',
'000001_2004_20040415_2003年年度报告.txt;董事会=94;金融=110;哈哈哈哈=0;',
'000001_2005_20050426_2004年年度报告.txt;董事会=167;金融=270;哈哈哈哈=0;',
'000001_2006_20060401_2005年年度报告.txt;董事会=104;金融=329;哈哈哈哈=0;',
'000001_2007_20070322_2006年年度报告.txt;董事会=96;金融=534;哈哈哈哈=0;',
'000001_2008_20080320_2007年年度报告.txt;董事会=141;金融=695;哈哈哈哈=0;',
'000001_2009_20090320_2008年年度报告.txt;董事会=97;金融=793;哈哈哈哈=0;',
'000001_2010_20100312_2009年年度报告.txt;董事会=114;金融=836;哈哈哈哈=0;',
'000001_2011_20110225_2010年年度报告.txt;董事会=151;金融=806;哈哈哈哈=0;',
'000001_2012_20120309_2011年年度报告.txt;董事会=122;金融=921;哈哈哈哈=0;',
'000001_2013_20130308_2012年年度报告.txt;董事会=95;金融=924;哈哈哈哈=0;',
'000001_2014_20140307_2013年年度报告.txt;董事会=70;金融=616;哈哈哈哈=0;',
'000001_2015_20150313_2014年年度报告.txt;董事会=101;金融=684;哈哈哈哈=0;',
'000001_2016_20160310_2015年年度报告.txt;董事会=79;金融=667;哈哈哈哈=0;',
'000001_2017_20170317_2016年年度报告.txt;董事会=66;金融=663;哈哈哈哈=0;',
'000001_2018_20180315_2017年年度报告.txt;董事会=61;金融=726;哈哈哈哈=0;',
'000001_2019_20190307_2018年年度报告.txt;董事会=63;金融=1106;哈哈哈哈=0;',
'000001_2020_20200214_2019年年度报告.txt;董事会=71;金融=876;哈哈哈哈=0;',
'000001_2021_20210202_2020年年度报告.txt;董事会=64;金融=1012;哈哈哈哈=0;',
'000001_2022_20220310_2021年年度报告.txt;董事会=77;金融=1043;哈哈哈哈=0;',
'000001_2023_20230309_2022年年度报告.txt;董事会=106;金融=1076;哈哈哈哈=0;']
可以发现每一行存储的都是文件名和指定词在文章中出现的次数。
三、把结果转成数据框