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