Skip to content

学习报告:如何理解"多源Web表格自动填写系统"

字数
6113 字
阅读时间
24 分钟

写在前面

这份报告用通俗易懂的语言,帮助你理解这个毕业设计系统是做什么的、为什么要做、以及它是怎么实现的。不需要你有很深的编程基础,只要对计算机有一些基本了解,就能看懂这份报告。


第一部分:为什么要做这个系统?

1.1 生活中遇到的烦恼

想象一下这些场景:

场景一:财务小王的工作

每个月底,小王都要把Excel工资表里的数据,一个个复制粘贴到报税系统的网页表单里。工资表有几百行,每行有十几列数据,包括员工姓名、身份证号、工资金额、社保扣款等等。小王需要打开Excel,找到对应的数据,复制,切换到浏览器,找到对应的输入框,粘贴,然后重复几百次。这不仅费时费力,而且很容易看错行、填错数据。

场景二:学生小李的申请表

小李要申请奖学金,需要填写一个在线申请表。申请表要求填写:姓名、学号、专业、班级、入学时间、已修学分、平均成绩、获奖情况、家庭住址、联系电话等等。这些信息分散在不同的地方:姓名学号专业在教务系统里,成绩在成绩单上,获奖记录在学工系统里。小李需要登录各个系统,查询信息,然后一个个填入申请表。

场景三:数据录入员小张

小张的工作是把纸质表格的数据录入到公司的业务系统里。每天面对几百份表格,每份表格有几十个字段,需要逐个输入到网页表单中。这是一项枯燥且容易出错的工作。

1.2 问题的本质

这三个场景的共同点是:数据已经存在了,但需要重新录入到另一个系统中。

为什么会这样?因为不同的系统之间没有数据互通机制,形成了"数据孤岛"。

  • Excel工资表是一个"孤岛"

  • 报税系统是一个"孤岛"

  • 教务系统是一个"孤岛"

  • 奖学金申请系统是一个"孤岛"

这些孤岛之间没有桥梁,数据无法自动流动,只能靠人工搬运。

1.3 现有的解决办法

目前有哪些办法可以解决这个问题呢?

办法一:手动复制粘贴

这就是上面三个场景中的做法。优点是简单直接,缺点是效率低、容易出错。

办法二:使用数据集成工具

市面上有一些专业的数据集成工具(比如ETL工具),可以把数据从一个系统导入到另一个系统。但这些工具通常面向专业技术人员,需要懂数据库、会写代码,普通用户很难使用。

办法三:系统间直接对接

让两个系统直接对接,通过API接口传输数据。这是最好的方案,但实施成本高,需要两个系统的开发商配合,而且很多老旧系统根本没有提供API接口。

1.4 我们的解决方案

基于以上分析,我们设计了这个"多源Web表格自动填写系统"。它的核心思想是:

让计算机模拟人的操作,自动完成"查看源数据→找到对应关系→填入目标表单"的整个过程。

具体来说,系统做三件事:

  1. 读取数据:从Excel、数据库或网页中读取源数据

  2. 智能匹配:自动分析源数据列和目标表单字段的对应关系

  3. 自动填充:把数据填入目标网页表单


第二部分:系统的核心功能

2.1 功能一:多源数据接入

系统支持三种数据源:

Excel文件

  • 支持.xlsx和.xls格式

  • 自动识别工作表

  • 自动处理合并单元格、空行等问题

SQL文件

  • 支持包含CREATE TABLE和INSERT语句的SQL文件

  • 自动提取表结构和数据

  • 转换为表格形式展示

网页表格

  • 输入网页URL,系统自动抓取页面中的表格

  • 支持静态页面和动态渲染的页面

  • 支持标准HTML表格和用div模拟的表格

2.2 功能二:智能字段匹配

这是系统最核心的功能,也是最"智能"的部分。

什么是字段匹配?

假设源数据表是这样的:

姓名手机号出生年月所在部门
张三138001380001995-03-15技术部

目标表单需要填写这些字段:

  • 申请人姓名

  • 联系电话

  • 出生日期

  • 部门名称

字段匹配的任务就是找出对应关系:

  • "姓名" 对应 "申请人姓名"

  • "手机号" 对应 "联系电话"

  • "出生年月" 对应 "出生日期"

  • "所在部门" 对应 "部门名称"

为什么需要"智能"匹配?

因为实际工作中的字段命名很不规范。比如:

  • "手机号" 可能叫 "电话"、"联系方式"、"Mobile"、"Tel"

  • "出生日期" 可能叫 "生日"、"出生年月"、"Birthday"、"DOB"

  • "部门" 可能叫 "所在部门"、"Dept"、"Department"、"组织"

简单的字符串比对(比如看两个字是否一样)无法处理这些情况。需要理解字段的"语义"——这个词是什么意思。

系统是怎么做的?

系统使用了一种叫做"大语言模型"的人工智能技术。你可以把它理解为一个"超级聪明的助手",它读过海量的文本,懂得很多知识。

我们把这个助手叫来,给它这样的任务:

"这里有张表格,列名分别是'姓名'、'手机号'、'出生年月'、'所在部门'。还有一个表单,字段分别是'申请人姓名'、'联系电话'、'出生日期'、'部门名称'。请你告诉我,哪些列应该对应哪些字段?"

大语言模型会分析这些名称的含义:

  • "姓名"和"申请人姓名"都是指人的名字,应该对应

  • "手机号"和"联系电话"都是联系方式,应该对应

  • "出生年月"和"出生日期"都是指生日,应该对应

  • "所在部门"和"部门名称"都是指部门,应该对应

然后给出答案:

json

{

  "姓名": "申请人姓名",

  "手机号": "联系电话",

  "出生年月": "出生日期",

  "所在部门": "部门名称"

}

为什么叫"智能"?

因为它能理解同义词、近义词,甚至能理解缩写。比如:

  • 它能理解"手机号"和"Mobile Phone"是同一个意思

  • 它能理解"DOB"是"Date of Birth"(出生日期)的缩写

  • 它能根据上下文推断含义

2.3 功能三:人机协同确认

虽然大语言模型很聪明,但它不是万能的,有时也会出错。比如:

  • 把"手机号"错配给"紧急联系人电话"

  • 漏掉某些字段没有匹配

  • 对不明确的字段强行匹配

所以系统设计了"人机协同"机制:

  1. 系统给出推荐匹配结果,并标注置信度(0-1之间的小数,越高表示系统越确定)

  2. 用户在界面上看到推荐结果,绿色表示高置信度,红色表示低置信度

  3. 用户可以修改、删除或添加匹配关系

  4. 确认无误后,才进行下一步填充

这样既发挥了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等格式的数据

  • 数据清洗:删除空行、去重、格式转换

  • 数据筛选、排序、分组统计

  • 数据导出为各种格式

在本系统中的应用:

python

# 读取Excel文件

df = pd.read_excel('工资表.xlsx')

# 查看前5行

print(df.head())

# 删除空行

df = df.dropna()

# 选择特定的列

df_selected = df[['姓名', '手机号', '部门']]

3.2.2 LangChain(大模型应用框架)

LangChain是一个帮助开发者更容易使用大语言模型的框架。它提供了很多有用的功能:

提示词模板

把给大模型的指令写成模板,可以动态填入不同的内容。

工具调用

让大模型可以调用外部工具(比如查询数据库、计算数值)。

链式调用

把多个步骤串联起来,形成一个完整的工作流程。

在本系统中的应用:

python

# 定义系统提示词

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:

python

# 创建浏览器驱动

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:

  1. Agent先调用工具获取源数据列的详细信息

  2. 再调用工具获取目标表单字段的详细信息

  3. 把这些信息发给大语言模型

  4. 大模型分析对应关系,返回JSON格式的匹配结果

  5. Agent解析结果,添加置信度评分

前端以表格形式展示推荐结果,用颜色标注置信度高低。

步骤4:用户确认匹配关系

用户查看推荐结果,对不准确的地方进行修改:

  • 修改映射关系

  • 删除错误的映射

  • 添加遗漏的映射

确认无误后,点击"确认填充"。

步骤5:执行自动填充

后端根据确认的映射关系:

  1. 对源数据进行格式转换(列重命名、日期格式化等)

  2. 启动Selenium浏览器

  3. 访问目标网页

  4. 逐条将数据填入表单

  5. 记录填充结果(成功/失败)

填充完成后,返回结果统计(成功多少条、失败多少条、失败原因)。

步骤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的效率优势,又保证了结果的准确可靠。

希望这份学习报告能帮助你理解这个系统。如果你有任何问题,欢迎随时交流讨论!


附录:相关学习资源

  1. Python官方教程:https://docs.python.org/zh-cn/3/tutorial/

  2. Pandas官方文档:https://pandas.pydata.org/docs/

  3. LangChain官方文档:https://python.langchain.com/docs/

  4. Vue.js官方教程:https://cn.vuejs.org/guide/

  5. FastAPI官方文档:https://fastapi.tiangolo.com/zh/

  6. Selenium官方文档:https://www.selenium.dev/documentation/

贡献者

The avatar of contributor named as freeway348 freeway348

文件历史

撰写