首页 女生 都市言情 中谷有晴

第37章 智慧审计

中谷有晴 黄河三尺鲤07 5845 2025-05-21 22:19

  她打开PyCharm,迅速编写脚本:

  1.遍历目录:

  利用`os`库扫描指定文件夹,筛选出所有Excel文件。

  2.解析表格内容:使用`openpyxl`库读取每个Excel文件,

  逐行提取单元格数据,以空格分隔单元格内容,以换行符区分不同行。

  3.生成Word文件:调用`python-docx`库,

  将整理好的文本按段落写入新的`.docx`文件,

  确保数据结构清晰,便于后续分析。

  ```python

  import os

  from docx import Document

  from openpyxl import load_workbook

  def excel_to_word(input_dir, output_dir):

  for file in os.listdir(input_dir):

  if file.endswith(('.xls','.xlsx','.et')):

  wb = load_workbook(os.path.join(input_dir, file))

  doc = Document()

  for sheet in wb.sheetnames:

  ws = wb[sheet]

  for row in ws.iter_rows():

  row_text =''.join(str(cell.value) if cell.value else '' for cell in row)

  doc.add_paragraph(row_text)

  doc.save(os.path.join(output_dir, f“{os.path.splitext(file)[0]}.docx“))

  ```

  雅晴的目标是从海量文档中提取关键信息,

  找出异常高频词汇,对文本挖掘与词云分析。

  如“培训费”“劳务费”“专项支出”等可能涉及问题的关键词进行数据读取与清洗。

  她引入`jieba`、`re`、`wordcloud`等库,编写代码:

  -使用`docx`库读取所有Word文档的段落和表格内容。

  -利用正则表达式(`re.sub`)去除冗余符号(换行符、多余空格等),确保文本干净。

  ```python

  import re

  from docx import Document

  def read_docx(file_path):

  doc = Document(file_path)

  text =[]

  for para in doc.paragraphs:

  cleaned = re.sub(r'\s+','', para.text.strip())

  if cleaned:

  text.append(cleaned)

  for table in doc.tables:

  for row in table.rows:

  for cell in row.cells:

  cleaned = re.sub(r'\s+','', cell.text.strip())

  if cleaned:

  text.append(cleaned)

  return ''.join(text)

  ```

  -加载自定义词典(如“培训费”“劳务费”等审计敏感词),

  优化分词准确性。

  -采用**飞桨(Paddle)模式**进行精准分词,

  过滤单字词,仅保留长度≥2的有效词汇。

  -统计词频,按出现次数降序排列。

  ```python

  import jieba

  from collections import defaultdict

  def word_freq_analysis(texts):

  jieba.enable_paddle()#启用飞桨模式,提高分词精度

  jieba.load_userdict(“audit_keywords.txt“)#加载审计专用词典

  word_counts = defaultdict(int)

  for text in texts:

  words = jieba.cut(text, use_paddle=True)

  for word in words:

  if len(word)>= 2:#仅统计2字及以上词汇

  word_counts[word]+= 1

  return sorted(word_counts.items(), key=lambda x: x[1], reverse=True)

  ```

  -设置`WordCloud`参数(最大显示词数100、自定义背景色和字体)。

  -生成词云图,并通过`matplotlib`展示。

  ```python

  from wordcloud import WordCloud

  import matplotlib.pyplot as plt

  def generate_word_cloud(word_freq):

  wc = WordCloud(

  font_path=“SimHei.ttf“,#中文字体支持

  max_words=100,

  background_color=“white“,

  width=800,

  height=600)

  wc.generate_from_frequencies(dict(word_freq))

  plt.imshow(wc, interpolation=“bilinear“)

  plt.axis(“off“)

  plt.show()

  ```

  词云图生成后,雅晴的目光迅速锁定几个高频异常词汇:

  -“培训费”出现频率极高,但账目显示部分培训未实际开展。

  -“劳务费”支出频繁,但收款人信息模糊。

  -“专项经费”使用分散,缺乏明细支撑。

  雅晴凝视着初步生成的词云图,

  敏锐地察觉到传统词频统计的局限性——高频词虽然能反映普遍现象,

  但未必能精准定位异常。

  为了更科学地识别关键审计风险点,

  她决定引入TF-IDF(词频-逆文档频率)算法,

  从海量文本中挖掘最具区分度的关键词。

  TF-IDF(Term Frequency-Inverse Document Frequency)是信息检索领域的经典加权技术,其核心价值在于:

  -词频(TF):衡量某个词在单份文档中的出现频率,计算公式为:

  \[

  ext{TF}(t, d)=\frac{ext{词} t ext{在文档} d ext{中的出现次数}}{ext{文档} d ext{的总词数}}

  \]

  例如,“培训费”在某一会议纪要中反复出现,

  其TF值较高,可能暗示该事项的重要性。

  -逆文档频率(IDF):

  评估该词在整个语料库中的普遍性,计算公式为:

  \[

  ext{IDF}(t)=\log \left(\frac{ext{语料库中文档总数}}{ext{包含词} t ext{的文档数量}+ 1}\right)

  \]

  若“培训费”出现在少数文档中(如仅继续教育学院的会议记录),

  其IDF值较高,表明该词具有领域特异性,需重点关注;

  反之,若“会议”“学习”等通用词遍布所有文档,则IDF值较低,可适当忽略。

  - TF-IDF综合权重:

  \[

  ext{TF-IDF}(t, d)=ext{TF}(t, d)imes ext{IDF}(t)

  \]

  该值越高,说明词语**在局部高频且全局稀有**,极可能是审计关键线索。

  雅晴快速编写代码,利用`scikit-learn`库实现TF-IDF计算:

  文本向量化

  ```python

  from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

  #加载所有文档内容到列表corpus

  corpus =[read_docx(file) for file in docx_files]

  #词袋模型向量化

  vectorizer = CountVectorizer(tokenizer=lambda x: jieba.cut(x, use_paddle=True))

  X_counts = vectorizer.fit_transform(corpus)

  ```

  -`CountVectorizer`将文本转换为词频矩阵,自动过滤单字词。

  TF-IDF权重计算:

  ```python

  transformer = TfidfTransformer()

  X_tfidf = transformer.fit_transform(X_counts)

  ```

  -输出结果为稀疏矩阵,每行代表一个文档,

  每列对应一个词的TF-IDF值。

  构建审计关键词字典:

  ```python

  import numpy as np

  #获取所有词语

  words = vectorizer.get_feature_names_out()

  #计算全局TF-IDF总和(按词聚合)

  tfidf_sum = np.array(X_tfidf.sum(axis=0)).flatten()

  word_tfidf_dict = dict(zip(words, tfidf_sum))

  #过滤低权重词(如TF-IDF总和<0.1)

  audit_keywords ={k: v for k, v in word_tfidf_dict.items() if v >= 0.1}

  ```

  3.关键审计发现与风险定位

  基于TF-IDF优化的词云图(下图)清晰凸显出继续教育学院的异常高频专项词汇:

  -“学费”(TF-IDF=4.32):

  与成人教育收入相关,需核对缴费名单与银行流水是否一致。

  -“培训费”(TF-IDF=3.89):

  多份纪要提及“合作机构分成”,但凭证缺失具体协议。

  -“场地使用费”(TF-IDF=2.76):

  同一场地在不同月份报价差异达300%,疑虚增成本。

  雅晴在审计底稿中标注:

  “上述事项涉及大额资金流动,但支撑材料不完整,

  需重点核查原始合同、银行回单及验收记录。”

  审计程序深化

  针对TF-IDF筛选出的关键词,她制定下一步计划:

  1.凭证追溯:对“培训费”“评估费”等高频支出,逐笔检查发票真伪与付款对象资质。

  2.交叉比对:将会议纪要中的“合作机构”名称与财务系统的收款方匹配,排查虚构交易。

  3.趋势分析:对比历年“场地使用费”支出,验证波动合理性。

  雅晴的审计方法体现了智能审计(AI Auditing)的前沿实践:

  -算法赋能:TF-IDF替代人工经验判断,科学量化文本风险。

  -精准定位:剔除通用词汇干扰,直指异常高频专项词。

  -业财融合:将文本线索与财务凭证交叉验证,提升审计证据链完整性。

  “传统审计看账,现代审计读数据。”

  她合上笔记本,目光锐利地望向那堆凭证——在算法的指引下,真相已呼之欲出。

  马处抬手看了看腕表,时针已经指向了八点。

  窗外的天色完全暗了下来,只剩下办公楼里的零星灯光。

  他环顾四周,发现审计组的同事们虽然还在埋头工作,

  但明显已经疲惫不堪——老张时不时揉着发酸的后颈,

  小赵的肚子已经咕咕叫了好几声,

  雅晴虽然还在专注地盯着电脑屏幕,但眼睛里已经布满了红血丝。

  “同志们,”马处清了清嗓子,声音在安静的会议室里显得格外洪亮,

  “今天天不早了,已经快八点了。”

  他故意停顿了一下,等大家都抬起头来,

  “中午大家只吃了一顿肯德基外卖,肚子都咕咕叫了吧?”

目录
设置
手机
书架
书页
评论