学习报告:如何理解"多源Web表格自动填写系统"
写在前面
这份报告用通俗易懂的语言,帮助你理解这个毕业设计系统是做什么的、为什么要做、以及它是怎么实现的。不需要你有很深的编程基础,只要对计算机有一些基本了解,就能看懂这份报告。
第一部分:为什么要做这个系统?
1.1 生活中遇到的烦恼
想象一下这些场景:
场景一:财务小王的工作
每个月底,小王都要把Excel工资表里的数据,一个个复制粘贴到报税系统的网页表单里。工资表有几百行,每行有十几列数据,包括员工姓名、身份证号、工资金额、社保扣款等等。小王需要打开Excel,找到对应的数据,复制,切换到浏览器,找到对应的输入框,粘贴,然后重复几百次。这不仅费时费力,而且很容易看错行、填错数据。
场景二:学生小李的申请表
小李要申请奖学金,需要填写一个在线申请表。申请表要求填写:姓名、学号、专业、班级、入学时间、已修学分、平均成绩、获奖情况、家庭住址、联系电话等等。这些信息分散在不同的地方:姓名学号专业在教务系统里,成绩在成绩单上,获奖记录在学工系统里。小李需要登录各个系统,查询信息,然后一个个填入申请表。
场景三:数据录入员小张
小张的工作是把纸质表格的数据录入到公司的业务系统里。每天面对几百份表格,每份表格有几十个字段,需要逐个输入到网页表单中。这是一项枯燥且容易出错的工作。
1.2 问题的本质
这三个场景的共同点是:数据已经存在了,但需要重新录入到另一个系统中。
为什么会这样?因为不同的系统之间没有数据互通机制,形成了"数据孤岛"。
Excel工资表是一个"孤岛"
报税系统是一个"孤岛"
教务系统是一个"孤岛"
奖学金申请系统是一个"孤岛"
这些孤岛之间没有桥梁,数据无法自动流动,只能靠人工搬运。
1.3 现有的解决办法
目前有哪些办法可以解决这个问题呢?
办法一:手动复制粘贴
这就是上面三个场景中的做法。优点是简单直接,缺点是效率低、容易出错。
办法二:使用数据集成工具
市面上有一些专业的数据集成工具(比如ETL工具),可以把数据从一个系统导入到另一个系统。但这些工具通常面向专业技术人员,需要懂数据库、会写代码,普通用户很难使用。
办法三:系统间直接对接
让两个系统直接对接,通过API接口传输数据。这是最好的方案,但实施成本高,需要两个系统的开发商配合,而且很多老旧系统根本没有提供API接口。
1.4 我们的解决方案
基于以上分析,我们设计了这个"多源Web表格自动填写系统"。它的核心思想是:
让计算机模拟人的操作,自动完成"查看源数据→找到对应关系→填入目标表单"的整个过程。
具体来说,系统做三件事:
读取数据:从Excel、数据库或网页中读取源数据
智能匹配:自动分析源数据列和目标表单字段的对应关系
自动填充:把数据填入目标网页表单
第二部分:系统的核心功能
2.1 功能一:多源数据接入
系统支持三种数据源:
Excel文件
支持.xlsx和.xls格式
自动识别工作表
自动处理合并单元格、空行等问题
SQL文件
支持包含CREATE TABLE和INSERT语句的SQL文件
自动提取表结构和数据
转换为表格形式展示
网页表格
输入网页URL,系统自动抓取页面中的表格
支持静态页面和动态渲染的页面
支持标准HTML表格和用div模拟的表格
2.2 功能二:智能字段匹配
这是系统最核心的功能,也是最"智能"的部分。
什么是字段匹配?
假设源数据表是这样的:
| 姓名 | 手机号 | 出生年月 | 所在部门 |
|---|---|---|---|
| 张三 | 13800138000 | 1995-03-15 | 技术部 |
目标表单需要填写这些字段:
申请人姓名
联系电话
出生日期
部门名称
字段匹配的任务就是找出对应关系:
"姓名" 对应 "申请人姓名"
"手机号" 对应 "联系电话"
"出生年月" 对应 "出生日期"
"所在部门" 对应 "部门名称"
为什么需要"智能"匹配?
因为实际工作中的字段命名很不规范。比如:
"手机号" 可能叫 "电话"、"联系方式"、"Mobile"、"Tel"
"出生日期" 可能叫 "生日"、"出生年月"、"Birthday"、"DOB"
"部门" 可能叫 "所在部门"、"Dept"、"Department"、"组织"
简单的字符串比对(比如看两个字是否一样)无法处理这些情况。需要理解字段的"语义"——这个词是什么意思。
系统是怎么做的?
系统使用了一种叫做"大语言模型"的人工智能技术。你可以把它理解为一个"超级聪明的助手",它读过海量的文本,懂得很多知识。
我们把这个助手叫来,给它这样的任务:
"这里有张表格,列名分别是'姓名'、'手机号'、'出生年月'、'所在部门'。还有一个表单,字段分别是'申请人姓名'、'联系电话'、'出生日期'、'部门名称'。请你告诉我,哪些列应该对应哪些字段?"
大语言模型会分析这些名称的含义:
"姓名"和"申请人姓名"都是指人的名字,应该对应
"手机号"和"联系电话"都是联系方式,应该对应
"出生年月"和"出生日期"都是指生日,应该对应
"所在部门"和"部门名称"都是指部门,应该对应
然后给出答案:
{
"姓名": "申请人姓名",
"手机号": "联系电话",
"出生年月": "出生日期",
"所在部门": "部门名称"
}为什么叫"智能"?
因为它能理解同义词、近义词,甚至能理解缩写。比如:
它能理解"手机号"和"Mobile Phone"是同一个意思
它能理解"DOB"是"Date of Birth"(出生日期)的缩写
它能根据上下文推断含义
2.3 功能三:人机协同确认
虽然大语言模型很聪明,但它不是万能的,有时也会出错。比如:
把"手机号"错配给"紧急联系人电话"
漏掉某些字段没有匹配
对不明确的字段强行匹配
所以系统设计了"人机协同"机制:
系统给出推荐匹配结果,并标注置信度(0-1之间的小数,越高表示系统越确定)
用户在界面上看到推荐结果,绿色表示高置信度,红色表示低置信度
用户可以修改、删除或添加匹配关系
确认无误后,才进行下一步填充
这样既发挥了AI的效率,又保证了结果的准确性。
2.4 功能四:自动表单填充
确认匹配关系后,系统会自动打开浏览器,访问目标网页,然后把数据填入对应的表单字段。
支持哪些表单控件?
文本框:直接输入文字
下拉框:选择对应的选项
单选框:点击对应的选项
复选框:勾选对应的选项
日期选择器:选择日期
怎么找到对应的输入框?
系统使用了一种叫"Selenium"的自动化工具,它可以模拟人的操作:
打开浏览器
访问网页
找到输入框(通过字段名称、ID、标签等)
填入数据
遇到下拉框选项不匹配怎么办?
比如源数据里是"技术部",但下拉框选项是"研发部",这时候系统会再次请大语言模型帮忙判断"技术部"和"研发部"是否是同一个意思,或者哪个最接近。
第三部分:技术实现详解
3.1 系统架构
整个系统分为前端和后端两部分:
前端(用户看到的界面)
使用Vue.js框架开发
提供数据上传、结果展示、匹配调整等交互功能
通过HTTP请求与后端通信
后端(处理逻辑的服务器)
使用Python的FastAPI框架开发
提供数据读取、字段匹配、表单填充等API接口
调用大语言模型和浏览器自动化工具
3.2 关键技术介绍
3.2.1 Pandas(数据处理)
Pandas是Python中最流行的数据处理库。它提供了一个叫"DataFrame"的数据结构,可以把它想象成一个Excel表格,有行有列,可以进行各种操作。
主要功能:
读取Excel、CSV、SQL等格式的数据
数据清洗:删除空行、去重、格式转换
数据筛选、排序、分组统计
数据导出为各种格式
在本系统中的应用:
# 读取Excel文件
df = pd.read_excel('工资表.xlsx')
# 查看前5行
print(df.head())
# 删除空行
df = df.dropna()
# 选择特定的列
df_selected = df[['姓名', '手机号', '部门']]3.2.2 LangChain(大模型应用框架)
LangChain是一个帮助开发者更容易使用大语言模型的框架。它提供了很多有用的功能:
提示词模板
把给大模型的指令写成模板,可以动态填入不同的内容。
工具调用
让大模型可以调用外部工具(比如查询数据库、计算数值)。
链式调用
把多个步骤串联起来,形成一个完整的工作流程。
在本系统中的应用:
# 定义系统提示词
system_prompt = """你是一个数据映射专家。
源数据列:{source_columns}
目标表单字段:{target_fields}
请分析它们的对应关系,返回JSON格式的结果。
"""
# 创建Agent
agent = create_agent(
model=llm,
tools=[analyze_source, analyze_target]
)
# 调用Agent获取匹配结果
result = agent.invoke({
"messages": [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input}
]
})3.2.3 大语言模型(通义千问)
本系统使用的是阿里云开发的"通义千问"大语言模型。它是目前中文理解能力最好的模型之一。
什么是大语言模型?
简单来说,就是一个"读过海量文本的超级大脑"。它通过阅读互联网上的 billions(数十亿)级别的文本,学会了:
理解语言的含义
回答各种问题
进行推理和判断
生成文本
为什么选它?
中文理解能力强
可以通过API调用,使用方便
价格相对合理
在本系统中的应用:
主要就是做"字段匹配"这个任务。我们把源数据列和目标表单字段的信息整理成文本,发给大模型,让它分析对应关系。
3.2.4 Selenium(浏览器自动化)
Selenium是一个可以控制浏览器的工具。它可以:
打开浏览器
访问网页
点击按钮、填写表单
获取网页内容
在本系统中的应用:
自动填充表单的核心就是靠Selenium:
# 创建浏览器驱动
driver = webdriver.Firefox()
# 访问目标网页
driver.get('https://example.com/form')
# 找到姓名字段并填写
name_field = driver.find_element(By.NAME, 'username')
name_field.send_keys('张三')
# 找到手机号字段并填写
phone_field = driver.find_element(By.NAME, 'phone')
phone_field.send_keys('13800138000')
# 点击提交按钮
submit_btn = driver.find_element(By.ID, 'submit')
submit_btn.click()3.2.5 Vue.js(前端框架)
Vue.js是一个用于构建用户界面的JavaScript框架。它的特点是:
简单易学
响应式数据绑定(数据变化自动更新界面)
组件化开发(把界面拆分成独立的小部件)
在本系统中的应用:
构建用户界面,包括:
文件上传组件
数据预览表格
字段匹配配置界面
填充进度显示
3.3 核心流程详解
让我们跟着数据流,看看系统是怎么工作的:
步骤1:用户上传源数据
用户在界面上选择数据源类型(Excel/SQL/URL),上传文件或输入地址,点击"加载"按钮。
前端把文件发送到后端,后端根据文件类型调用不同的读取工具:
Excel文件 → ExcelTool → Pandas读取
SQL文件 → SQLFileTool → 解析SQL语句
网页URL → WebScraperTool → 抓取网页表格
读取完成后,返回数据的预览信息(列名、前5行数据、数据行数等)。
步骤2:用户配置目标表单
用户输入目标网页的URL,点击"解析"按钮。
后端使用WebScraperTool访问网页,解析表单结构:
找到所有的输入字段
提取字段名称、标签文本、类型、选项值
返回给前端展示
步骤3:获取智能匹配推荐
用户点击"获取智能推荐"按钮。
后端构造提示词,调用MatchingAgent:
Agent先调用工具获取源数据列的详细信息
再调用工具获取目标表单字段的详细信息
把这些信息发给大语言模型
大模型分析对应关系,返回JSON格式的匹配结果
Agent解析结果,添加置信度评分
前端以表格形式展示推荐结果,用颜色标注置信度高低。
步骤4:用户确认匹配关系
用户查看推荐结果,对不准确的地方进行修改:
修改映射关系
删除错误的映射
添加遗漏的映射
确认无误后,点击"确认填充"。
步骤5:执行自动填充
后端根据确认的映射关系:
对源数据进行格式转换(列重命名、日期格式化等)
启动Selenium浏览器
访问目标网页
逐条将数据填入表单
记录填充结果(成功/失败)
填充完成后,返回结果统计(成功多少条、失败多少条、失败原因)。
步骤6:导出结果
用户可以选择导出填充结果为Excel或CSV文件,方便存档或进一步处理。
第四部分:如何学习这个系统
4.1 学习路径建议
如果你是初学者,建议按以下顺序学习:
第一阶段:理解业务需求(1-2天)
仔细阅读本学习报告
思考生活中哪些场景可以用到这个系统
理解"数据孤岛"问题的本质
第二阶段:了解核心技术(1周)
学习Python基础(如果还不会的话)
了解Pandas的基本用法
了解什么是大语言模型(不需要深入原理,知道它能做什么就行)
了解Selenium的基本概念
第三阶段:阅读代码(1-2周)
从main.py开始,了解系统的入口
阅读api/endpoints.py,了解有哪些接口
阅读services目录下的代码,了解业务逻辑
阅读tools目录下的代码,了解具体实现
阅读agents目录下的代码,了解智能匹配的实现
第四阶段:动手实践(持续)
运行系统,体验完整流程
尝试修改代码,比如换一种提示词
尝试添加新功能,比如支持新的数据源
4.2 重点代码文件说明
backend/main.py
系统的入口文件,创建FastAPI应用,配置路由。
backend/api/endpoints.py
定义了所有的API接口,包括:
/source/preview:预览源数据
/target/preview:解析目标表单
/mapping/recommend:获取匹配推荐
/fill/execute:执行表单填充
/export:导出结果
backend/services/
业务逻辑层,包含三个核心服务:
data_ingestion.py:数据接入服务
field_matching.py:字段匹配服务
data_filling.py:数据填充服务
backend/agents/matching_agent.py
字段匹配智能体,使用LangChain框架构建,调用大语言模型进行语义匹配。
backend/tools/
工具层,包含各种具体实现:
excel_tool.py:读取Excel文件
sql_file_tool.py:解析SQL文件
web_scraper_tool.py:抓取网页表格
browser_filler_tool.py:浏览器自动化填充
data_cleaner_tool.py:数据清洗
fronted/index.html
前端界面,使用Vue.js开发,包含完整的用户交互逻辑。
4.3 常见问题解答
Q1:为什么用大语言模型做字段匹配,而不用传统的规则匹配?
A:规则匹配需要人工定义大量规则,比如"手机号对应电话"、"出生日期对应生日"等。但实际情况很复杂,规则很难覆盖所有情况。大语言模型通过阅读海量文本,已经"学会"了很多知识,能够理解同义词、近义词,甚至能理解缩写和简写,所以效果更好。
Q2:系统会不会把数据泄露出去?
A:系统调用大语言模型API时,确实需要把字段名称发送出去(但不会发送具体的数据内容)。如果对数据安全要求很高,可以考虑使用本地部署的开源大模型,这样数据就不会离开本地服务器。
Q3:为什么最多只能填充5条记录?
A:这是为了防止误操作。如果一次性填充几百条,万一匹配关系有误,就会造成大量错误数据。目前限制为5条,填充完成后用户可以检查,确认无误后再继续填充下一批。后续可以优化为支持更多条数,或者提供"测试模式"和"正式模式"的切换。
Q4:系统能处理所有类型的网页表单吗?
A:不能。系统主要处理标准的HTML表单,对于以下情况支持有限:
需要登录才能访问的表单(目前需要手动登录)
有复杂JavaScript交互的动态表单
需要验证码的表单
非标准方式实现的表单(比如用Canvas绘制的)
Q5:如果大模型API不可用怎么办?
A:系统设计了降级策略。当大模型API调用失败时,会自动切换到基于规则的匹配模式。虽然准确率会降低,但系统仍然可以工作。
第五部分:扩展思考
5.1 这个系统还能做什么?
除了论文中描述的功能,这个系统还可以扩展应用到更多场景:
数据迁移
把旧系统的数据迁移到新系统,不需要开发专门的迁移程序,用这个系统就可以完成。
数据上报
企业需要定期向政府部门上报数据,通常格式要求很严格。可以用这个系统自动完成数据格式转换和填报。
测试数据生成
软件测试时需要大量的测试数据,可以用这个系统从真实数据中提取并填入测试系统。
跨平台数据同步
比如把电商平台的订单数据同步到ERP系统,或者把CRM系统的客户信息同步到邮件营销平台。
5.2 未来可以改进的方向
支持更多数据源
目前支持Excel、SQL、网页表格,未来可以支持:
JSON/XML文件
API接口(RESTful API、GraphQL等)
云存储(阿里云OSS、AWS S3等)
消息队列(Kafka、RabbitMQ等)
支持更复杂的匹配逻辑
支持多对一匹配(多个源列合并成一个目标字段)
支持一对多匹配(一个源列拆分成多个目标字段)
支持条件匹配(根据某些条件决定如何映射)
支持批量处理
支持一次性处理多个文件
支持定时任务(比如每天晚上自动同步数据)
支持任务队列和并发处理
提升智能化水平
学习用户的修正行为,不断优化推荐算法
支持自然语言指令(比如用户说"把工资表填到报税系统",系统自动完成)
支持错误自动修复(发现填充失败后自动重试或调整策略)
结语
这个毕业设计系统的核心思想是:用人工智能辅助人类完成重复性、规则性的工作。
它不是要完全取代人,而是要成为人的助手:
它帮你做繁琐的数据读取和格式转换
它帮你分析字段对应关系(但你需要确认)
它帮你自动填入表单(但你需要检查结果)
这种人机协同的模式,既发挥了AI的效率优势,又保证了结果的准确可靠。
希望这份学习报告能帮助你理解这个系统。如果你有任何问题,欢迎随时交流讨论!
附录:相关学习资源
Python官方教程:https://docs.python.org/zh-cn/3/tutorial/
Pandas官方文档:https://pandas.pydata.org/docs/
LangChain官方文档:https://python.langchain.com/docs/
Vue.js官方教程:https://cn.vuejs.org/guide/
FastAPI官方文档:https://fastapi.tiangolo.com/zh/
Selenium官方文档:https://www.selenium.dev/documentation/