目录
- 摘要
- 0. 测试数据生成
- 1. 直接使用ChatGPT进行处理。
- 2 使用ChatGPT生成python脚本进行处理
- 3对比分析
- 4 结束语
摘要
为测试ChatGP在word文档表格的处理能力,本文列举直接使用ChatGPT和利用ChatGPT编写python脚本两种方式,均比较容易的实现了预定目标。文章介绍的利用ChatGPT进行文档处理的方法和思路可以指导大家利用AI工具提升效率。
近期在工作中需要对一些表格数据进行分析处理,并生成统计文档。想到ChatGPT这个生产效率提升工具,想着就试试效果如何。
0. 测试数据生成
工作中的数据涉及很多个人信息,不适合直接进行测试,因此需要生成类似的数据进行调试。
Tips:在使用ChatGPT的过程中一定需要注意个人隐私和数据的保护,你提交的数据会被如何利用目前还不确定,已经和ChatGPT对话的数据泄露的报道,慎重点没有关系。
我把需要处理的表头提供给ChatGPT,让他给我生成随机数据,然后用他生成的数据进行测试。
输入:
按照下的数据格式,自动生成20数据
数据实例表格如下:
| 序号 | 商品 | 发货地点 | 发货时间 | 预计收货时间 | 收货人 | 快递公司 | 快递公司电话 |
| :--: | :------: | :----------: | :-----------------: | :-----------------: | :------: | :------: | :------------: |
| 1 | 苹果 | 河南省郑州市 | 2023-04-20 08:30:00 | 2023-04-22 12:00:00 | 张三 | 顺丰快递 | 10086 |
输出:
| 序号 | 商品 | 发货地点 | 发货时间 | 预计收货时间 | 收货人 | 快递公司 | 快递公司电话 |
| ---- | ---- | -------- | ------------ | ------------ | ------ | ------ | -------- |
| 1 | 牙刷 | 广东省深圳市 | 2023-04-20 10:00:00 | 2023-04-21 18:00:00 | 张三 | 申通快递 | 95543 |
| 2 | 洗发水 | 北京市海淀区 | 2023-04-20 10:30:00 | 2023-04-22 16:00:00 | 李四 | 圆通快递 | 95554 |
| 3 | 衣服 | 上海市浦东新区 | 2023-04-20 11:00:00 | 2023-04-23 14:30:00 | 王五 | 中通快递 | 95555 |
| 4 | 鞋子 | 广东省广州市 | 2023-04-20 12:00:00 | 2023-04-22 15:00:00 | 赵六 | 顺丰快递 | 95338 |
| 5 | 手机 | 河北省石家庄市 | 2023-04-20 13:00:00 | 2023-04-23 10:00:00 | 张三丰 | 韵达快递 | 95546 |
| 6 | 眼镜 | 江苏省南京市 | 2023-04-20 14:30:00 | 2023-04-23 12:00:00 | 李白 | 中通快递 | 95508 |
| 7 | 水杯 | 四川省成都市 | 2023-04-20 15:00:00 | 2023-04-22 17:30:00 | 王实甫 | 顺丰快递 | 95338 |
| 8 | 书包 | 河南省洛阳市 | 2023-04-20 16:00:00 | 2023-04-24 14:00:00 | 吕布 | 圆通快递 | 95554 |
| 9 | 帽子 | 浙江省杭州市 | 2023-04-20 17:30:00 | 2023-04-24 11:30:00 | 张飞 | 韵达快递 | 95546 |
| 10 | 耳机 | 广东省深圳市 | 2023-04-20 18:00:00 | 2023-04-21 21:00:00 | 关羽 | 中通快递 | 95555 |
| 11 | 凉鞋 | 北京市朝阳区 | 2023-04-20 19:30:00 | 2023-04-23 16:30:00 | 赵云 | 申通快递 | 95543 |
| 12 | 腰带 | 上海市长宁区 | 2023-04-20 20:00:00 | 2023-04-24 17:00:00 | 刘备 | 圆通快递 | 95554 |
| 13 | 毛巾 | 广东省广州市 | 2023-04-20 21:00:00 | 2023-04-23 15:00:00 | 孙尚香 | 顺丰快递 | 95338 |
| 14 | 餐具 | 河北省保定市 | 2023-04-20 22:00:00 | 2023-04-25 11:00:00 | 华佗 | 中通快递 | 95508 |
| 15 | 头盔 | 湖北省武汉市 | 2023-04-20 23:00:00 | 2023-04-23 13:30:00 | 典韦 | 申通快递 | 95543 |
| 16 | 手表 | 广东省深圳市 | 2023-04-21 00:30:00 | 2023-04-22 18:00:00 | 马超 | 韵达快递 | 95546 |
| 17 | 手表 | 四川省成都市 | 2023-04-21 01:00:00 | 2023-04-24 16:30:00 | 刘备 | 圆通快递 | 95554 |
| 18 | 游戏手柄 | 上海市浦东新区 | 2023-04-21 02:00:00 | 2023-04-22 21:00:00 | 王昭君 | 中通快递 | 95555 |
| 19 | 牙膏 | 北京市海淀区 | 2023-04-21 03:30:00 | 2023-04-23 12:30:00 | 曹操 | 顺丰快递 | 95338 |
| 20 | 茶杯 | 广东省广州市 | 2023-04-21 04:00:00 | 2023-04-24 10:00:00 | 关羽 | 韵达快递 | 95546 |
输出数据很快,结果也很稳定,城市的省市关系,发货与收货的时间先后顺序,快递名称是常用的快递随机重复出现,人名多是张三李四,上面的例子比较特殊,一堆三国人物,快递电话是错的,但是不影响我后面的数据处理。
1. 直接使用ChatGPT进行处理。
我试图让ChatGPT统计收件人为关羽的快递,输入:
对上面生成的数据进行分析,请完整的统计“收货人”为“关羽”的所有数据,输出格式为:
由关羽的快递有{}件,分别是:
{序号}.{发货地点}寄出的{商品},快递公司为{快递公司},收货人是{收货人},预计达到时间为{预计达到时间};
第一次输出:
收货人为“关羽”的所有数据如下:
由关羽的快递有3件,分别是:
10.广东省深圳市寄出的耳机,快递公司为中通快递,收货人是关羽,预计达到时间为2023-04-21 21:00:00;
20.广东省广州市寄出的茶杯,快递公司为韵达快递,收货人是关羽,预计达到时间为2023-04-24 10:00:00;
17.四川省成都市寄出的手表,快递公司为圆通快递,收货人是关羽,预计达到时间为2023-04-24 16:30:00;
其中一条是错误的,提醒他,输入:
你有一条数据是错误的,有一件物品的收件人并不是关羽
再次输出:
非常抱歉,我犯了一个错误。我查看一下表格,发现其实序号为17的手表的收货人不是关羽,正确的收件人应该是刘备。那么由关羽的快递应该只有2件。非常感谢您的纠正。正确的输出如下:
由关羽的快递有2件,分别是:
10.广东省深圳市寄出的耳机,快递公司为中通快递,收货人是关羽,预计达到时间为2023-04-21 21:00:00;
20.广东省广州市寄出的茶杯,快递公司为韵达快递,收货人是关羽,预计达到时间为2023-04-24 10:00:00;
我测试了很多次,基本上每次都是先错,提醒后一般能改正,但是也有时不能改正,基本上没有办法第一次就得到正确答案,特别是当数据很多的时候,多次提醒也没有办法得到正确的答案,最多的错误是漏统计。因此,个人觉得使用ChatGPT直接进行数据处理可行不高。原因有三:
一是数据保密性问题,很多数据涉及商业秘密和个人隐私;
二是数据量的问题,现在还不能实现将数千行数据通过对话框进行处理。
三是数据处理结果的不确定性,AI模型内部的机理现在还不明确,他的结果随机性问题,特别是当数据量大时,出错的概率显著增加,毕竟数千行的数据不可能进行人工校对。
因此,下面尝试通过让ChatGPT生成一个Python脚本实现我想要的功能。
2 使用ChatGPT生成python脚本进行处理
ChatGPT也能写程序,让他帮忙写一个python的脚本,像这样简单的脚本应该能胜任。
输入:
有如下一个表格,存储在名为“物流信息统计表.docx”的文件中。
| 序号 | 商品 | 发货地点 | 发货时间 | 预计收货时间 | 收货人 | 快递公司 | 快递公司电话 |
| ---- | ---- | -------- | ------------ | ------------ | ------ | ------ | -------- |
| 1 | 牙刷 | 广东省深圳市 | 2023-04-20 10:00:00 | 2023-04-21 18:00:00 | 张三 | 申通快递 | 95543 |
| 2 | 洗发水 | 北京市海淀区 | 2023-04-20 10:30:00 | 2023-04-22 16:00:00 | 李四 | 圆通快递 | 95554 |
| 3 | 衣服 | 上海市浦东新区 | 2023-04-20 11:00:00 | 2023-04-23 14:30:00 | 王五 | 中通快递 | 95555 |
| 4 | 鞋子 | 广东省广州市 | 2023-04-20 12:00:00 | 2023-04-22 15:00:00 | 赵六 | 顺丰快递 | 95338 |
| 5 | 手机 | 河北省石家庄市 | 2023-04-20 13:00:00 | 2023-04-23 10:00:00 | 张三丰 | 韵达快递 | 95546 |表格的行数不确定,请帮我编写一个python程序,实现以下功能,
完整的统计“收货人”为“关羽”的所有数据,生成以下文字:
由关羽的快递有{}件,分别是:
{序号}.{发货地点}寄出的{商品},快递公司为{快递公司},收货人是{收货人},预计达到时间为{预计达到时间};
并将上述文字保存在“物流信息处理表.docx”中。
第一次输出:
好的,你可以使用Python中的docx库实现这个功能。只需要读取并遍历“物流信息统计表.docx”中的表格数据,找到符合条件的数据进行统计,最后将统计结果保存至“物流信息处理表.docx”文件中即可。
以下是实现该功能的Python代码:
import docx# 打开物流信息统计表
doc = docx.Document("物流信息统计表.docx")# 初始化目标数据列表
target_data = []# 遍历表格数据
for row in doc.tables[0].rows[1:]:# 获取每一行的数据data = [cell.text for cell in row.cells]# 判断是否是关羽的快递if data[5] == "关羽":target_data.append({"序号": data[0],"商品": data[1],"发货地点": data[2],"发货时间": data[3],"预计收货时间": data[4],"收货人": data[5],"快递公司": data[6],"快递公司电话": data[7]})# 拼接要保存的文字
text = "由关羽的快递有{}件,分别是:\n".format(len(target_data))
for i, data in enumerate(target_data):text += "{}.{}寄出的{},快递公司为{},收货人是{},预计达到时间为{};\n".format(data["序号"], data["发货地点"], data["商品"], data["快递公司"], data["收货人"], data["预计收货时间"])# 保存拼接好的文字到文件中
docx.Document().add_paragraph(text).save("物流信息处理表.docx")
运行以上代码后,程序将会自动读取“物流信息统计表.docx”中的表格数据,并统计“收货人”为“关羽”的所有数据,最后将整理好的文字保存至“物流信息处理表.docx”文件中。
但是,第一次运行时,系统报错,
输入:
docx.Document().add_paragraph(text).save("物流信息处理表1.docx")
AttributeError: 'Paragraph' object has no attribute 'save'
上面是系统报错,请修改程序
输出:
非常抱歉,是我在代码中疏忽了。正确的保存方式应该是使用doc.save("物流信息处理表.docx")
,并且需要在新建文档的时候添加一个段落,然后再将拼接好的文字添加到此段落中,如下所示:
import docx# 打开物流信息统计表
doc = docx.Document("物流信息统计表.docx")# 初始化目标数据列表
target_data = []# 遍历表格数据
for row in doc.tables[0].rows[1:]:# 获取每一行的数据data = [cell.text for cell in row.cells]# 判断是否是关羽的快递if data[5] == "关羽":target_data.append({"序号": data[0],"商品": data[1],"发货地点": data[2],"发货时间": data[3],"预计收货时间": data[4],"收货人": data[5],"快递公司": data[6],"快递公司电话": data[7]})# 新建一个文档,添加一个段落
new_doc = docx.Document()
new_doc.add_paragraph()# 拼接要保存的文字
text = "由关羽的快递有{}件,分别是:\n".format(len(target_data))
for i, data in enumerate(target_data):text += "{}.{}寄出的{},快递公司为{},收货人是{},预计达到时间为{};\n".format(data["序号"], data["发货地点"], data["商品"], data["快递公司"], data["收货人"], data["预计收货时间"])# 将拼接好的文字添加到段落中
new_doc.paragraphs[0].add_run(text)# 保存文档
new_doc.save("物流信息处理表.docx")
运行以上代码后,程序将会自动读取“物流信息统计表.docx”中的表格数据,并统计“收货人”为“关羽”的所有数据,最后将整理好的文字保存至“物流信息处理表.docx”文件中。
输出的结果为:
并没有数据?突然想起来,“关羽”这个数据前后有多个空格。
输入:
上面的程序并没有输出正确的结果,可能是数据{收货人}前面后都包含空格,需要你删除空格,请重新改上述程序
输出:
正在为您搜索:上面的程序、输出、正确的结果、数据{收货人}
好的,你可以在代码中对“收货人”数据进行strip()操作以删除空格,这样就可以避免由于数据前后有空格导致统计出错的情况。修改后的代码如下:
import docx# 打开物流信息统计表
doc = docx.Document("物流信息统计表.docx")# 初始化目标数据列表
target_data = []# 遍历表格数据
for row in doc.tables[0].rows[1:]:# 获取每一行的数据data = [cell.text.strip() for cell in row.cells]# 判断是否是关羽的快递if data[5] == "关羽":target_data.append({"序号": data[0],"商品": data[1],"发货地点": data[2],"发货时间": data[3],"预计收货时间": data[4],"收货人": data[5],"快递公司": data[6],"快递公司电话": data[7]})# 新建一个文档,添加一个段落
new_doc = docx.Document()
new_doc.add_paragraph()# 拼接要保存的文字
text = "由关羽的快递有{}件,分别是:\n".format(len(target_data))
for i, data in enumerate(target_data):text += "{}.{}寄出的{},快递公司为{},收货人是{},预计达到时间为{};\n".format(data["序号"], data["发货地点"], data["商品"], data["快递公司"], data["收货人"], data["预计收货时间"])# 将拼接好的文字添加到段落中
new_doc.paragraphs[0].add_run(text)# 保存文档
new_doc.save("物流信息处理表.docx")
运行以上代码后,程序将会自动读取“物流信息统计表.docx”中的表格数据,并统计“收货人”为“关羽”的所有数据,最后将整理好的文字保存至“物流信息处理表.docx”文件中。
这次能够输出正确的结果,任务完成。
3对比分析
本来想让文心一言也完成这个任务,来对比一下的,哎···文心一言、一言难尽啊~~~
4 结束语
这次测试ChatGPT是一个国内的版本,免费,号称是基于ChatGPT3.5版本,就结果来说,已经是很厉害了,因此,学习和使用这样的工具,的确是提升生产效率的工具,未来基于AI的工作模式也一定要学会。