第二次软件工程作业——顶会热词统计

182400336赵子龙 2026-09-24 23:18:43

第二次软件工程作业——与 AI 结对完成顶会热词统计平台

项目内容
课程202601 福大软件工程实践 W 班
学号—姓名182400336—赵子龙
作业要求第二次作业:与 AI 结对编程
作业目标与 AI 结对完成需求分析、原型、编码、测试、部署和版本发布,构建可运行的 CV 顶会论文热词分析平台。

目录

  1. 项目链接与 AI 工具
  2. PSP 表格
  3. NABCD 需求分析
  4. 原型设计
  5. 系统设计与功能展示
  6. 测试、调试与部署
  7. AI 结对案例
  8. 关键代码与总结

1. 项目链接与 AI 工具

项目链接
CodeArts 仓库test2
代码规范codestyle.md
墨刀原型交互原型
公网网站https://60.204.200.151/
v1.0.0 标签CodeArts v1.0.0
合并请求dev 合并到 master

本次主要使用 Codex。AI 负责拆分任务、生成和修改代码、分析测试及部署输出、整理博客结构;我负责确定范围、登录平台、运行命令、核对真实页面并决定最终实现。

2. PSP 表格

以下时间根据本次开发过程回填,单位为分钟,休息和自动下载等待不计入有效工作时间。

阶段预估实际偏差原因
计划与阅读要求4055对照多个案例
环境准备6085排查 CodeArts 凭据和服务器环境
NABCD 与原型100125七个页面及交互较多
数据库与论文管理150175增删改查和校验联调
联网获取与批量导入160205需核对题名、会议和年份
Top 10、图谱、走势150180统一统计口径
测试与修复100145处理 SQL 通配符和依赖问题
云部署与发布120190CentOS 7 环境较旧并配置 HTTPS
截图、GIF、博客100135核对证据与最终页面
合计9801295比预估多 315 分钟

3. NABCD 需求分析

N(Need,需求)

本项目面向希望快速了解计算机视觉研究热点的学生、课程教师和初学者。CVPR、ICCV、ECCV 每年收录大量论文,直接逐篇阅读成本较高;普通搜索只能返回论文列表,难以回答“某个会议和年份最常出现哪些关键词”“两个关键词是否经常共同出现”“某个方向近几年是上升还是下降”等问题。

用户主要有五类需求:

  1. 可靠收录:保存论文标题、作者、摘要、会议、年份、原文链接和数据来源,并能在刷新或重启后继续使用。
  2. 快速检索:既能用完整标题精确查找,也能按标题片段、论文编号或关键词模糊查询。
  3. 方便补充数据:本地没有结果时,可以按论文题目联网查询;还要支持 TXT 或逐行粘贴的批量导入,并逐条说明成功、重复或失败原因。
  4. 直观分析:用 Top 10、关键词共现图谱和年度走势展示已收录数据,点击热词或节点后可以反查相关论文。
  5. 结果可信:来源返回多篇候选时不能直接取第一篇,必须核对规范化标题、会议和年份;自动抽取关键词与作者关键词必须明确区分;统计结果必须注明只覆盖当前已收录样本。

A(Approach,做法)

系统采用 Flask、SQLite 和服务分层实现一个满足作业要求的最小完整闭环。

  • 论文管理层:提供列表、分页、详情、新增、编辑、删除、精确查询和模糊查询。标题和年份进行输入校验,规范化标题用于去重。
  • 真实数据层:CVPR、ICCV 通过 OpenAlex 获取候选并结合 CVF 信息核对,ECCV 通过 ECVA 索引和详情页核对。只有标题、会议、年份都能确认时才自动入库;网络超时、未找到、来源限流、字段缺失和身份无法确认分别返回明确原因。
  • 关键词层:保留原始标题和摘要,使用小型规则词典自动抽取关键词,统一大小写、合并明确变体、过滤通用词,并在单篇论文内去重。页面标记“自动抽取关键词”,不冒充作者关键词。
  • 统计层:Top 10、图谱和走势全部读取同一个 SQLite 数据库。关键词论文数按不同论文计数;图谱节点表示关键词,边表示共同出现;走势按关键词×会议×年份聚合,并区分“未举办”“未收录”和“已收录但命中 0 篇”。
  • 交互层:统一顶部导航和页面样式,导入按钮显示处理状态,图谱节点可下钻到论文,走势支持播放、暂停和重播。
  • 安全与部署层:生产环境的新增、编辑、删除和导入需要管理员登录并使用表单令牌;Gunicorn 运行 Flask,Nginx 提供 HTTPS 反向代理,systemd 负责常驻运行;/api/health 和 /api/version 用于验收。
  • 质量保证:使用自动测试覆盖页面、CRUD 持久化、输入校验、搜索、统计手算、混合批量导入、在线标题核对和生产写保护,再用公网真实导入和服务重启进行人工验收。

B(Benefit,收益)

与仅展示静态词云或论文列表相比,本项目提供了从“论文来源”到“关键词统计”再到“相关论文反查”的完整链路。

  • 用户可以在一个平台内完成收录、查询、分析和追溯,不必在多个网站之间反复切换。
  • 每个热词和图谱节点都能回到具体论文,统计结果具有可解释性。
  • 精确核对和去重减少了相似标题、错误会议或错误年份造成的脏数据。
  • 批量任务逐条返回结果,一篇失败不会导致整批失败,便于继续修正。
  • 三类图表共用同一数据库和统计口径,论文增删改后结果同步更新,避免不同页面数字不一致。
  • 系统规模适合课程作业:功能闭环清晰、服务器资源占用较小,并保留测试、Git、原型和部署证据,便于教师验收。

C(Competitors,竞品与差异)

对比对象优点局限本项目的差异
Google Scholar覆盖广、引用检索强热词统计和共现分析不是核心功能聚焦三大 CV 顶会,提供 Top 10、图谱和走势
OpenAlex开放 API、元数据丰富候选结果仍需核对,界面不针对课程场景对标题、会议、年份进行二次校验后入库
CVF / ECVA官方论文页面可靠以浏览和下载论文为主,缺少统一趋势视图保留官方来源链接,同时形成统一数据库
普通词云工具生成快、视觉直观缺少论文详情、年份维度和结果追溯每个关键词可反查论文,并提供年度统计口径
同类课程作品展示形式可能更丰富部分只使用静态样例或来源说明不清完成真实联网导入、持久化、自动测试与公网部署

本项目不追求替代大型学术搜索引擎,而是强调“小而完整、数据可核对、统计可解释、结果可复现”。当前样本数量有限,因此页面明确声明结果只代表已收录数据,不能据此断言整个领域的真实热点。

D(Delivery,交付与推广)

项目采用多种可验证成果进行交付:

  1. CodeArts 仓库:保存源码、README、代码规范、测试报告和部署说明;开发在 dev 分支进行,通过合并请求进入 master,并创建 v1.0.0 标签。
  2. 墨刀原型:提供七个页面和主要交互的分享链接,方便在编码前检查信息结构。
  3. 华为云网站:通过公网 HTTPS 地址提供首页、论文管理、图谱、走势和说明页面,教师无需安装环境即可体验。
  4. 发布包:生成 topconftrend-v1.0.0.zip 和 SHA-256 校验值,便于下载、核验与重建。
  5. 博客与证据:展示 PSP、NABCD、原型、主要功能、AI 协作、测试、调试、部署和版本发布记录,并为截图注明操作、输入、结果及对应要求。

推广方式以课程班级社区和仓库链接为主。验收时可按“打开公网首页→查询论文→查看详情→真实导入→查看图谱→播放走势→检查仓库版本”的顺序体验。后续若继续扩展,可增加更多会议年份、改进关键词抽取算法和完善普通用户权限,但本次交付优先保证作业要求内的功能真实可用。

4. 原型设计

原型统一采用浅灰背景、白色卡片和蓝色主色,共设计首页、论文管理、论文详情、爬取与导入、关键词图谱、热度走势、关于与统计说明七个页面,连接导航、详情、新增、编辑、删除确认、导入结果和趋势播放等主要交互。

原型截图已保存在“顶会热词统计作业/原型截图”,分享链接见上表。

5. 系统设计与功能展示

功能结构:论文管理(列表、详情、增删改查)→ 数据导入(单篇、逐行、TXT、去重)→ 数据分析(Top 10、共现图谱、年度趋势)→ 运维接口(/api/health、/api/version)。

技术链路:浏览器 → Nginx(HTTPS) → Gunicorn → Flask → SQLite;联网获取服务访问 OpenAlex、CVF 和 ECVA。

统计口径:关键词论文数是筛选范围内包含该词的不同论文数量;占比为关键词论文数除以当前范围已收录论文总数。图谱节点大小表示论文数,连线权重表示共同出现次数。趋势按“关键词×会议×年份”聚合,并区分“未举办”“未收录”和“已收录但命中 0 篇”。每篇论文内同一关键词只计算一次。

公网首页可按会议和年份显示样本数及 Top 10;论文管理支持分页、详情、精确标题以及标题片段、编号、关键词模糊查询;导入页支持单篇和批量处理;图谱节点可下钻到相关论文;走势页支持播放、暂停、重播。

真实导入时选择 CVPR 2024,输入 Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data,系统严格核对后显示“成功 1、重复 0、失败 0”。服务重启后再次查询,该论文仍然存在。

6. 测试、调试与部署

本地和华为云 ECS 均运行 7 项自动测试,结果为 Ran 7 tests、OK。测试覆盖页面和健康接口、CRUD 持久化、输入校验和去重、精确/模糊查询、手算统计、混合批量导入、在线标题校验和生产写操作保护。

验收项实际结果
首页、列表、图谱、趋势、说明HTTP 200
/api/healthstatus=ok
单篇真实导入成功 1、重复 0、失败 0
服务重启后查询数据仍在
HTTPS浏览器正常打开,无证书警告

真实调试案例:查询 % 时,SQL LIKE 把它当成通配符,错误匹配全部论文。修复时转义通配符,并限制只有纯数字查询词才搜索数字编号。重新测试后 % 返回 0 条,普通标题、编号和关键词查询仍正确。

服务器为华为云 ECS,CentOS 7.6、1 vCPU、约 1 GB 内存。应用使用独立 Python 3.11,Gunicorn 监听本机端口,Nginx 提供 HTTPS 反向代理,systemd 负责常驻运行。Let's Encrypt 公网 IP 证书已签发,并配置自动续期。

代码已由 dev 通过合并请求 !1 合并到 master,v1.0.0 标签已推送。发布包 topconftrend-v1.0.0.zip 已生成,SHA-256:02f3f7010180a9170dd4ca6365aec501ca6079cf988afffda98906c491dda45c。服务器最终切换到 v1.0.0 前仍需执行一次工作区状态检查,因此本文不把“标签已发布”误写成“服务器已完成最终切换”。

7. AI 结对案例

案例一:拆分完整作业流程

第一轮要求 AI 根据作业要求和已提交案例生成完整步骤。AI 按仓库、PSP、NABCD、原型、编码、测试、部署和博客拆分,并给出完成标志。我检查后要求以满足作业为准,删去过度复杂功能。最终形成从项目骨架到 v1.0.0 的可验证流程。

案例二:联网候选的严格核对

最初目标是输入标题后自动获取论文。我检查后指出不能直接拿接口第一条候选冒充目标论文。第二轮改为先规范化并精确比较标题,再核对会议和年份;无法确认时必须失败并说明原因。四篇官方样本和 Depth Anything 均验证成功,不存在的题目会明确失败。

案例三:旧服务器部署修复

CentOS 7 默认 Python 3.6,最初没有 Git 和 Nginx;完整依赖中的 Pillow 编译失败。我和 AI 根据错误确认生产服务无需 Pillow,拆分 requirements-prod.txt,并使用独立 Python 3.11,不覆盖系统 Python。最终依赖安装成功、7 项测试通过、服务 active、公网 HTTPS 正常。

8. 关键代码与总结

关键模块:app/models.py 负责建表、CRUD、分页和搜索;app/services/fetch.py 负责题名、会议、年份核对;keywords.py 负责规则抽取;analysis.py 负责 Top 10、图谱和走势;routes/web.py 负责页面、导入、登录、CSRF 和 API;templates/trend.html 负责动画控制。完整代码以仓库 v1.0.0 为准。

最开始我认为真实抓取最难,实际最耗时间的是把应用部署到旧版 CentOS。AI 最大的帮助是把复杂任务拆成小步骤并根据真实输出排错;AI 输出也必须人工核查,例如生产依赖最初包含不必要的 Pillow。如果重做,我会更早确认服务器环境,并在每完成一个功能时立即保存截图和计时记录。

模块AI 的工作我的工作验证方式
需求提取任务、生成步骤确认范围和取舍对照作业要求
原型给出布局建议制作和调整分享链接逐页点击
编码生成和修改实现运行、审查、反馈自动测试和页面操作
部署生成适配命令云终端逐条执行服务状态、HTTPS、公网访问
博客整理初稿核对事实并最终发布逐项打开链接和证据

本项目关键词由规则法自动抽取,并非论文作者关键词;统计只覆盖已收录样本,不能概括整个领域。所有账号登录、密码输入、最终发布和功能取舍均由本人完成或确认。

9. 项目结构与数据库设计

9.1 项目目录

app/
├─ __init__.py              # Flask 应用工厂和环境配置
├─ models.py                # SQLite 建表、CRUD、搜索和分页
├─ routes/web.py            # 页面路由、导入、登录和 API
├─ services/
│  ├─ fetch.py              # 真实来源查询及论文身份核对
│  ├─ keywords.py           # 关键词规范化与自动抽取
│  └─ analysis.py           # Top 10、图谱和趋势聚合
├─ templates/               # 首页、论文、导入、图谱、走势等模板
└─ static/style.css         # 统一页面样式
scripts/                    # 样本导入、GIF 导出、服务器环境脚本
tests/test_workflow.py      # 端到端工作流自动测试
deploy/                     # systemd、Nginx 和证书续期配置示例
docs/                       # PSP、测试报告、部署说明和验收截图

这种结构将页面路由、数据访问、联网来源和统计逻辑分开,便于测试和后续修改。运行时数据库、虚拟环境、密码和缓存均通过 .gitignore 排除,不进入仓库和发布包。

9.2 数据关系

数据对象主要字段用途
论文 Paper编号、标题、作者、会议、年份、摘要、链接、来源保存论文基本信息并支持查询
关键词 Keyword规范化名称合并大小写及明确变体
论文关键词关系paper_id、keyword_id、来源类型支持统计和反向查询
抓取日志 FetchLog输入题目、状态、原因、时间记录成功、重复和失败原因

论文与关键词是多对多关系。一篇论文可以对应多个关键词,一个关键词也可以出现在多篇论文中。删除论文后关联数据同步处理,统计服务每次从数据库重新聚合,因此不会继续计算已删除记录。

9.3 主要业务流程

用户输入论文题目
  ↓
规范化标题并检查本地重复
  ↓
按会议选择 OpenAlex / CVF / ECVA 来源
  ↓
比较规范化标题 → 核对会议 → 核对年份
  ↓
无法确认:返回失败原因并记录日志
确认成功:保存原始字段 → 自动抽取关键词 → 建立关联
  ↓
重新计算 Top 10、共现图谱和年度走势

批量导入只是重复执行这一单篇流程,每一行都有独立结果,所以某一篇失败不会导致整批回滚。

10. 功能与作业要求对应关系

作业要求本项目实现验证方式
CodeArts 代码托管dev 开发、MR 合并 master、v1.0.0 标签打开仓库、合并请求和标签页
原型设计墨刀七页面可点击原型打开分享链接并逐页点击
论文基本操作列表、详情、新增、编辑、删除、分页操作后刷新并重新打开
精确与模糊查询完整标题精确匹配;标题片段、编号、关键词模糊匹配使用不同查询词比较结果
联网获取标题、会议、年份严格核对后入库导入 Depth Anything
批量处理TXT 或逐行输入,逐条去重和失败说明使用正常、重复、不存在、空行混合文件
热词 Top 10按会议和年份聚合已收录论文与三篇手工样本计算结果比较
关键词图谱关键词节点、共现边、节点下钻论文点击节点检查相关论文
年度走势动画播放、暂停、重播及年度状态区分播放一轮并保存 GIF
云端部署华为云 ECS、HTTPS、systemd 常驻外部浏览器访问并重启服务
测试与调试7 项自动测试及 SQL LIKE 真实案例测试输出、修复前后结果

11. 更详细的测试记录

编号操作预期结果实际结果状态
T01打开首页、列表、详情、图谱、走势和健康接口页面和接口正常返回全部 HTTP 200通过
T02新增论文后刷新并重建应用新记录仍在SQLite 中持续存在通过
T03修改测试论文摘要并重新打开详情显示修改后的摘要与输入一致通过
T04删除专用测试记录并刷新记录不再出现查询结果为空通过
T05提交空标题、无效年份、重复标题拒绝保存并给出提示均被拒绝通过
T06查询完整标题、标题片段、编号、关键词和 %只返回符合规则的记录修复后均符合通过
T07三篇手工数据统计目标检测 2、Transformer 2、图像分割 1系统结果一致通过
T08批量输入成功、重复、失败和空行分别显示结果并忽略空行与预期一致通过
T09真实查询 CVPR、ICCV、ECCV 样本核对身份后返回官方样本验证成功通过
T10生产模式匿名写入和缺少表单令牌拒绝写操作自动测试通过通过
T11公网真实导入后重启服务新论文仍能查询Depth Anything 仍存在通过

调试过程复盘

问题发生在模糊搜索中:用户输入百分号 % 时,SQLite LIKE 会把它解释为任意长度通配符,原实现因此返回全部论文。排查时先用独立测试数据库稳定复现,再检查生成的 SQL 条件,确认问题不在页面而在查询转义。修复方案是对 %、_ 和转义符进行处理,并且只在查询词全部为数字时匹配数字编号。最后增加回归测试,既验证 % 返回 0 条,也验证普通标题、编号和关键词仍能查询。这个案例体现了“复现—定位—最小修改—回归验证”的调试流程。

12. 云端运行与版本证据

项目最终情况
云平台华为云 ECS
系统CentOS Linux 7.6.1810
配置1 vCPU、约 1 GB 内存
Python独立 CPython 3.11 环境
Web 服务Gunicorn + Nginx
数据SQLite,独立持久化目录
进程管理systemd 开机启动与重启
公网访问https://60.204.200.151/
HTTPSLet's Encrypt IP 证书并配置续期定时器
测试7 项通过、0 项失败
仓库版本master 已合并,v1.0.0 已推送

发布包 topconftrend-v1.0.0.zip 不包含数据库、密码、私钥、缓存或虚拟环境,可以根据 README 安装依赖并运行测试。SHA-256 校验值为 02f3f7010180a9170dd4ca6365aec501ca6079cf988afffda98906c491dda45c,用于确认下载文件未发生变化。

13. 建议插入的成果截图及说明

  1. CodeArts 项目主页:展示仓库名称、文件结构和最近提交,证明项目已托管。

img

  1. dev 分支与第一次提交:展示规范的分支开发和初始化记录。

img

img

  1. 墨刀首页与论文管理页:展示编码前的信息结构和页面交互设计。

img

img

img

  1. 公网首页:地址栏包含 HTTPS,页面显示样本数量和关键词 Top 10。

img

5,与AI 交流记录

img

img

6.寻找成功,成果展示

img

img

  1. 论文列表和详情:证明列表记录与详情内容一致。

img

  1. 关键词图谱:展示节点、连线和相关论文下钻区域。

img

  1. 热度走势与 GIF:展示年份变化以及播放、暂停和重播功能。

img

  1. 自动测试结果:显示 Ran 7 tests 和 OK。

img

  1. 合并请求

img

参考资料

  1. Flask 官方文档
  2. SQLite 官方文档
  3. CVF Open Access
  4. ECVA Papers
  5. OpenAlex
  6. 华为云 CodeArts
...全文
58 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

101

社区成员

发帖
与我相关
我的任务
社区描述
202601福大-软件工程实践-W班
软件工程 高校 福建省·福州市
社区管理员
  • 202601福大-软件工程实践-W班
  • 李之尹
  • 123
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧