Skip to content

About

报告关键词三步统计工具:全文指标 + 句子级共现统计,支持中英文,导出 Excel

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

报告关键词统计器 v2 · 三步统计

在老版本(只统计关键词数量、总字数、总词汇)的基础上重写,新增句子级共现统计。

📥 直接下载(Windows,免安装) https://github.com/luyujun74-creator/ReportKeywordCounter/releases/latest

下载 zip → 解压 → 双击 ReportKeywordCounter.exe,不需要装 Python。 包内已附带关键词模板、示例报告和使用说明。 首次打开若出现蓝色的「Windows 已保护你的电脑」,点「更多信息」→「仍要运行」。


一、它统计什么

第一步:全文层面

  • 总词汇数、总字数、总句子数(新增)
  • 关键词1 在全文出现的次数(词频)

第二步:关键词1 → 关键词2

锁定所有含关键词1的句子,统计这些句子里关键词2出现了多少次。

第三步:关键词2 → 关键词1(反向)

锁定所有含关键词2的句子,统计这些句子里关键词1出现了多少次。

最终 Excel「汇总」表的科目

列 含义
总词汇数 英文/数字词条数 + 汉字个数(每个汉字算 1 个词,与 Word 一致)
总字数 去掉所有空白后的字符数
总句子数 分句后的句子条数
关键词1数量 关键词1 在全文出现的总次数(按次数)
含关键词1的句子数 有多少句出现过关键词1(一句里出现 3 次也只算 1 句)
关键词1所在句中的关键词2数量 第二步结果
关键词2所在句中的关键词1数量 第三步结果
同时含关键词1和关键词2的句子数 两类词共现的句子数,做共现分析时常用

「数量」按出现次数算,「句子数」按句算,两者口径不同: 一句话里出现 3 次关键词1,前者 +3,后者 +1。

第二步和第三步的数字通常不相等,这是正常的: 一句话里若有 2 个关键词1 和 3 个关键词2,第二步为该句贡献 3,第三步贡献 2。


二、五分钟上手(PyCharm)

  1. 打开项目:PyCharm → File → Open → 选中 ReportKeywordCounter 文件夹。

  2. 配置解释器:Settings/偏好设置 → Project → Python Interpreter → 新建一个 virtualenv(Python 3.9+ 均可)。

  3. 装依赖:打开 PyCharm 底部的 Terminal,执行

    pip install -r requirements.txt
  4. 先跑自检(可选,10 秒):右键 self_test.py → Run,看到「全部自检通过 ✅」说明环境没问题。

  5. 打开界面:右键 main.py → Run,弹出图形窗口。

    项目里已经预置了三个运行配置:1 打开界面、2 跑示例数据、3 自检, 打开项目后可以直接在 PyCharm 右上角的下拉框里选。

  6. 在界面里依次选择:

    • 关键词1 txt
    • 关键词2 txt
    • 报告目录
    • 导出 Excel 的位置(不填会自动生成)

    然后点「第 3 步:开始统计」。

想先看效果,可以直接用 示例/ 里的三个文件(两份关键词表 + 两份报告)跑一遍。


三、关键词表怎么写

一行一个关键词,# 或 // 开头的行是注释:

# 关键词1:数字化转型类
数字化
人工智能
digital*
artificial intelligence

支持的写法:

写法 效果
数字化 中文按子串匹配
artificial intelligence 英文词组,词组中间的空格可以匹配换行、多个空格
digital* * 是通配符 → 命中 digital / digitalization / digitally
re:\bESGs?\b re: 开头的按正则表达式处理,适合复杂条件
环境, 绿色, 低碳 一行里用逗号/顿号/分号/Tab 分隔多个词也可以

也可以只用一个文件装两类关键词,用 [类别名] 分节,界面上的「关键词2」留空即可:

[关键词1_数字化]
数字化
人工智能

[关键词2_绩效]
业绩
风险

四、报告文件

  • 放在同一个目录下即可,支持 .txt、.docx、.md、.csv
  • 编码自动识别(UTF-8 / GBK / GB18030 / Big5 / UTF-16 都能读)
  • 默认会扫描子目录;每个文件在 Excel 里占一行
  • 读 .docx 需要 pip install python-docx(requirements.txt 里已包含)

五、统计选项(不确定就保持默认)

选项 默认 说明
英文忽略大小写 开 ESG 与 esg 视为同一个词
英文全词匹配 开 避免 art 命中 start;中文不受影响
还原硬换行 开 PDF/Word 导出的 txt 常常每行 70~90 字符就换行,不还原会把一句话切成好几句,共现统计就废了
分号也算句子结束 关 中文长句里的「;」是否切分,按你的研究口径决定
同类关键词重叠只计一次 关 关键词表里若同时有「环境」和「环境保护」,开启后「环境保护」只计 1 次而不是 2 次
句子窗口 N 0 0 = 只看命中句本身;设为 1 表示"命中句 + 前后各 1 句"都算作上下文
包含子目录 开
导出句子明细 开 逐句列出命中情况,方便人工抽查(最多 20000 行/文件)

六、Excel 输出说明

工作表 内容
汇总 上面说的核心科目,每个文件一行,末行是合计
扩展指标 关键词2全文次数、含关键词2的句子数、不重复词汇数、每千词密度、平均句长、读取失败原因
关键词1词频(全文) 每个文件 × 每个关键词1 的次数矩阵
关键词2词频(全文) 同上,针对关键词2
关键词1句中的关键词2 第二步结果拆到每个关键词2
关键词2句中的关键词1 第三步结果拆到每个关键词1
句子明细 每条命中句的原文、命中的关键词、另一类关键词的次数——用来核对统计对不对
运行参数 这次跑的时间、目录、关键词列表、所有选项,方便复现

七、命令行用法(批量/写脚本时)

python main.py -k1 关键词1.txt -k2 关键词2.txt -d 报告目录 -o 结果.xlsx

常用参数:--window 1(句子窗口)、--semicolon(分号断句)、--dedup-overlap(重叠去重)、--case-sensitive(区分大小写)、--no-recursive、--no-sentences、--keep-linebreaks。完整列表:

python main.py -h

八、口径与边界(写论文/报告时可直接引用)

  1. 分句规则:以 。!?!?… 断句;英文 . 需其后为空白,且排除缩写(Dr. / e.g. / U.S.)、小数(3.5)、网址、列表序号(1.);空行与短行(显示宽度 < 30 列,如标题、条款号)保持独立成句。
  2. 总词汇数:英文按词条计(连字符词、缩写视为 1 个),中文每字计 1;与 Word 的字数统计口径接近。
  3. 关键词计数:同一类里每个关键词独立计数后求和。若关键词之间存在包含关系(环境/环境保护),默认会重复计入,需要时可开启「重叠去重」。
  4. 共现计数:以句子为单位。同一句若同时含两类关键词,会同时计入第二步与第三步——这是设计如此,不是重复统计。
  5. 跨句关键词不计:词组关键词若被句号分开,不会被计入(这符合语义上的常识)。

九、目录结构

ReportKeywordCounter/
├── main.py              # 入口:无参数 → 图形界面;带参数 → 命令行
├── self_test.py         # 自检脚本,35 项断言,改代码后跑一下
├── build.py             # 一键打包成免安装程序(见第十一节)
├── requirements.txt
├── packaging/
│   └── 给使用者的说明.txt   # 会被打进发布包,重命名为"使用说明.txt"
├── .github/workflows/
│   └── build-windows.yml    # 云端自动打包 Windows exe
├── kwcounter/
│   ├── segmenter.py     # 分句、硬换行还原、字数/词数
│   ├── matcher.py       # 关键词编译(通配符/正则/全词)与计数
│   ├── analyzer.py      # 三步统计主逻辑
│   ├── textio.py        # 文件读取、编码识别、关键词表解析
│   ├── excel.py         # Excel 导出
│   ├── service.py       # 串起整个流程
│   ├── gui.py           # 图形界面
│   └── cli.py           # 命令行
└── 示例/                # 可直接运行的样例数据

十、常见问题

Q:提示 No module named openpyxl A:PyCharm 的 Terminal 里跑 pip install -r requirements.txt;注意确认 Terminal 前面显示的是项目的虚拟环境名。

Q:句子数明显偏多,很多"句子"只有几个词 A:报告 txt 是硬换行的,请确认「还原硬换行」是勾选状态;若正文行确实很短,可以在 segmenter.split_sentences 里把 min_wrap_width 调小。

Q:想核对某个数字对不对 A:看「句子明细」表,按文件名筛选,逐句核对;「运行参数」表记录了这次用的全部关键词和选项。

Q:关键词特别多(几百个)会不会很慢 A:每个关键词编译成一个正则,逐句匹配。1000 份报告 × 200 个关键词大约几分钟;界面上有进度条,统计过程不卡界面。

Q:怎么打包发给别人 A:见下一节。


十一、打包成免安装程序发给别人

对方不需要装 Python,双击就能用。

pip install pyinstaller
python build.py

跑完会在 发布/ 下生成一个 zip,里面已经装好:程序本体 + 关键词模板 + 示例报告 + 使用说明.txt,直接微信/邮件发过去即可。

⚠️ 一条硬约束:不能跨平台打包

PyInstaller 只能打出「当前系统」能跑的程序:

你在哪打 产物 谁能用
Mac ReportKeywordCounter.app 只有 Mac 用户
Windows ReportKeywordCounter.exe 只有 Windows 用户

所以要给 Windows 用户的 exe,必须在 Windows 上打包。三条路,按方便程度排:

方案 A(最省事):借一台 Windows 电脑 装好 Python 官网 的 3.10~3.12(安装时勾上 "Add Python to PATH"), 把项目文件夹拷过去,在该文件夹里打开 cmd:

pip install -r requirements.txt pyinstaller
python build.py --onedir

方案 B:用 GitHub 的云端 Windows 机器(自己没有 Windows 时用这个) 详见下面「用 GitHub 生成一个下载网址」一节,跑完不但能拿到 exe, 还会得到一个别人点开就能下载的固定网址。

方案 C:Mac 上装 Windows 虚拟机(Parallels / VMware),本质同方案 A,为了打个包不太值。

打包参数

命令 产物形态 适用
python build.py Mac 出 .app;Windows 出单个 .exe 默认,发送最方便
python build.py --onedir 一个文件夹(含 exe 和若干 dll) Windows 推荐:启动快 3~5 倍,杀毒软件误报也少
python build.py --console 保留黑色控制台窗口 排查打包问题时用

单文件 exe 每次双击都要先把自己解压到临时目录,启动要等 5~15 秒; 目录模式几乎秒开,代价是要把整个文件夹一起发过去(压缩后大小差不多)。

体积说明

老版本的 exe 有 338 MB,是因为把整个 Python 环境(numpy/torch 之类)全打了进去。 本项目只依赖 openpyxl 和 python-docx,build.py 里还显式排除了一批重型库, 实测 Mac 端产物 42 MB / 压缩后 31 MB,Windows 端单文件约 15~20 MB。

打包前建议新建一个干净的虚拟环境,只装 requirements.txt 里的东西 —— 环境里装了什么, PyInstaller 就可能打进去什么,这是体积失控最常见的原因。

对方第一次打开会被系统拦

这两个提示都属正常(因为程序没有花钱买代码签名证书),说明里已经写好了应对办法:

  • Windows:蓝底「Windows 已保护你的电脑」→ 点「更多信息」→「仍要运行」
  • Mac:「无法验证开发者」→ 右键点图标 →「打开」→ 再点一次「打开」
  • 少数杀毒软件会误报 PyInstaller 打的包,加入信任列表即可

如果要发给很多人、不希望每个人都手动放行,那就得买代码签名证书(Windows 约 $200+/年, Mac 需要 $99/年的开发者账号做公证),个人小工具一般不值当。


十二、用 GitHub 生成一个下载网址

做完这一节,你会得到一个这样的网址:

https://github.com/你的用户名/ReportKeywordCounter/releases/latest

别人点开 → 下载 zip → 解压 → 双击 exe,全程不需要懂技术,也不用注册 GitHub。 而且 Windows 的 exe 是 GitHub 的云端 Windows 机器替你打的,你自己不需要有 Windows 电脑。

第一次设置(约 10 分钟,只做一次)

1. 注册并新建仓库 登录 github.com → 右上角 + → New repository

  • Repository name 填 ReportKeywordCounter
  • 选 Public(选 Private 的话,别人打不开你的下载链接)
  • 其它保持默认 → Create repository

2. 把项目传上去 在本项目文件夹里打开终端(PyCharm 底部的 Terminal 就行):

git init
git add .
git commit -m "报告关键词统计器 v2"
git branch -M main
git remote add origin https://github.com/你的用户名/ReportKeywordCounter.git
git push -u origin main

注意:必须把 ReportKeywordCounter 这个文件夹本身作为仓库根目录, 不能连着外层的文件夹一起传 —— GitHub 只认根目录下的 .github/workflows/。

推送时要求输入密码的话,密码栏填的是 Personal Access Token, 不是登录密码:GitHub 右上角头像 → Settings → 最底部 Developer settings → Personal access tokens → Tokens (classic) → Generate new token,勾上 repo 即可。

3. 发布一个版本

git tag v2.0.0
git push --tags

推上去之后 GitHub 会自动开始打包。到仓库页面的 Actions 标签下能看到进度, 约 2~3 分钟跑完(会自动先跑一遍自检,不通过就不会发布)。

4. 拿到网址 跑完后到仓库页面右侧的 Releases,就能看到刚生成的版本, 把 https://github.com/你的用户名/ReportKeywordCounter/releases/latest 发给别人即可。

以后要更新

改完代码后:

git add .
git commit -m "改了什么"
git push
git tag v2.0.1
git push --tags

网址不变,别人再点开就是新版本。

只想拿 exe、不想公开发布

仓库页 → Actions → 左侧「打包 Windows exe」→ 右侧 Run workflow 按钮 → 跑完在该次运行页面最底部的 Artifacts 里下载 zip。 这种方式不产生公开网址,适合只发给特定几个人(私有仓库也能用)。

对方拿到后看到什么

解压出来是扁平的一层,双击哪个一目了然:

ReportKeywordCounter_v2_win/
├── ReportKeywordCounter.exe   ← 双击这个
├── _internal/                 ← 程序运行需要的文件,别删别动
├── 使用说明.txt
└── 示例/

About

报告关键词三步统计工具:全文指标 + 句子级共现统计,支持中英文,导出 Excel

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages