
朗读
审计机关在审计实施阶段常面临审计项目时间紧、任务重,被审计单位提供资料数据质量参差不齐等现实问题,难以在有限时间内快速锁定审计重点。本文结合某乡镇领导干部经济责任审计,介绍运用TF-IDF算法提炼文档关键信息,绘制成可视化词云图,精准锁定审计重点的方法,以期为提高审计实施效率提供参考。
数据准备
审计人员通过Python编程,调用docx库读取被审计单位提供的会议纪要、政府工作报告等资料文档。但由于如财务报表等部分审计资料为Excel表格,文件后缀为“.xls”“.xlsx”和“.et”,而docx库无法处理此类表格文件。审计人员需要先使用Python技术,将Excel表格文件转化为Word文本文件。具体流程为:将所有Excel文件放入指定目录下,遍历该目录下所有文件,找出后缀为“.xls”“.xlsx”“.et”的表格文件,再遍历每个表格文件,按行取其单元格内容,每个单元格内容中间以空格进行区分,每行内容之间以段落进行区分,取完表格文件的所有内容后将这些内容保存为“.docx”后缀的Word文件。
绘制词云图
审计人员利用文本挖掘算法对会议纪要等文档和表格中的内容进行分词分段处理、词频分析和词云展示,可视化呈现审计关键事项。
第一步,安装并引入os、jieba、docx、wordcloud、re和matplotlib等必需库。
第二步,利用os库和docx库读取指定文件夹下所有后缀为“.docx”“.doc”“.wps”格式的Word文档。先获取Word文档中的所有段落内容,采用re库的sub函数去除段落内的换行、多余空格等符号,再将段落文字信息保存到变量sentences中。获取Word文档中的表格(tables)内容,遍历表格的所有单元格cells,同样利用re库的sub函数去除符号后,将单元格内所有文字信息保存到变量sentences中。
第三步,利用jieba分词库中的cut函数和load_userdict函数进行分词。其中cut函数为分词函数,可采用飞桨(paddle)模式对所有文本变量sentences进行分词,得到列表变量corpus。load_userdict函数为读取自己的分词字典,可在分词函数前先按需求放入相关词语。
第四步,建立一个字典类型变量dict统计词频。该字典变量key值为分词结果,value值为分词结果次数。遍历文本分词结果corpus,将分词结果长度大于2作为key值输入字典dict中,当分词结果首次出现时将其加入dict并令value值为1,当分词结果再次出现则对应key值的value次数加1,按照最终的分词结果对dict按value值进行倒叙排序。
第五步,建立一个WordCloud对象。设置参数最大显示词数100,将字典变量dict输入WordCloud对象的generate_from_frequencies词云,生成函数绘制词云图,通过matplotlib库的pyplot函数进行展示。
处理词云图
通过上述五个步骤,关于会议纪要等文件的词云图基本完成。如图1所示,根据文本文字出现的频次不同,词云图字体以不同的字号体现,频次越高,字号越大。需要注意的是,词云图中出现了频次较高但是与具体业务事项无关的词语,如“认可”“反馈”“意见”“讨论”“万元”等,审计人员需进一步处理。具体做法为:将这些词作为停用词列表stopword_list,在上述第四步统计词频时,如果分词结果在停用词列表stopword_list中,便不再统计词频,减少无关词干扰,得到重新绘制的词云图。如图2所示,词云图出现了可以引起审计人员重点关注的业务事项,如“广告费”“评估费”等。这时如果再加以过滤掉业务事项的动词和形容词,如“完成”“提升”等,审计人员可以更加清晰地识别重点。为更好挖掘出重点信息、减少人工挑选操作,审计人员运用将仅仅统计词频次数转换为进一步统计TF-IDF值。
图1 会议纪要词云图
图2 会议纪要词云图
TF-IDF算法是一种用于信息检索与数据挖掘的常用加权技术,可评估一个单词对于语料库的重要程度,并给出合适的权重。其中TF 是词频,为某一单词在语料库中出现的次数;IDF 指的是逆文档频率,用于描述单词在语料库中的普遍重要性。TF-IDF该算法的核心思想是字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在所有文档中出现的频率成反比下降。一个词语在一个文档中出现次数越多,同时在所有文档中出现次数越少,就越能够将该词语和其所在的文档凸显出来,审计人员也就越能将该文档与其它文档区分开来。
审计人员运用scikit-learn机器学习库,采用CountVectorizer类向量化之后再调用TfidfTransformer类进行预处理的方式,计算TF-IDF值。将对应词语的TF-IDF值输入词频字典dict,该字典key值为分词结果,value值为所有文档中该词的TF-IDF值累加。 如图3所示,基于TF-IDF值的词频字典dict重新绘制的词云图更能凸显出文本的关键信息。从关键词可视化结果中,审计人员可一眼识别审计重点。在之后的审计过程中,审计人员将词云图中的“测绘费”“消防泵”“房租费”“广告费”“评估费”“排污工程”等,作为该乡镇大额事项支出审计重点。
图3 基于TF-IDF算法的班子会议纪要词云图
定位关键词
通过TF-IDF算法绘制的词云图,审计组锁定了会议纪要文档中的关键词,接下来要根据关键词定位其所处的文档及上下文内容。
由于资料包括多个Word文档,WPS软件自带的“查找”功能无法一次性定位关键词所在文档、无法一次查询多个关键词。审计组利用Python改进查找功能,通过调用Python中的re、pandas等库,在多关键词、多文档情景下一次性定位关键词的文档位置和上下文内容。
第一步,安装并引入os、docx、re和pandas等必需库。
第二步,使用pandas库的DataFrame函数创建一个名称为df的表格数据变量,df变量的列名分别设为“文件名”“关键词”“本段内容”。
第三步,设置一个关键词列表变量keywords,将需要查询关键词写入该变量keywords。
第四步,利用os库的listdir函数遍历目标文件夹下的所有后缀为“.docx”“.doc”“.wps”格式的Word文档,使用docx库的document函数打开Word文档。遍历关键词变量keywords,使用re库的compile函数对关键词编译生成pattern对象,用于匹配文本。
第五步,遍历Word文档的每一个段落内容和表格,使用pattern对象的搜索函数search对段落和单元格内容进行匹配,如果段落内容包含关键词,获取该段落或该单元格的文本信息,将文件名、关键词、文本信息存储到df变量中。
第六步,将查询到的df变量通过to_excel函数导出为Excel文件,直接呈现出关键词所处的Word文件和所在的段落内容。审计人员只须翻阅对应年度会议纪要资料,节约大量文本翻阅的时间。
审计成效
审计组运用TF-IDF算法和Python技术对被审计单位提供的文档资料进行文本信息挖掘分析,提出了值得关注的审计重点、疑点事项。相较于只统计词频的情况,TF-IDF算法考虑词频与逆文档频率的综合计算,降低了无意义高频词对审计人员判断的干扰,在审计时间有限的情况下,可以直接快速锁定文本资料的对应年度和对应段落,无须过多关注其他文档内容。通过此手段,审计人员发现该乡镇大额资金支出事项未经集体决策、“三重一大”决策机制不完善等问题,取得较好审计成效。
(磐安县局 车潇、余仁杰)