本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!
Word文档如何更好地提取表格内容给ChatGPT做知识库,这属于文本预处理工作。
本文只讲思路、测试结果,技术实现用Python和Java都能完成,下一篇文章再贴源码。
预处理的思路:
- 源文件建议采用DOCX文档而非PDF文档,因为PDF文档会多出冗余的"\n\n"
- 把DOCX文件转为Markdown格式,删除表格内容,因为Markdown格式表格冗余
- 把DOCX表格转为CSV表格,另存为CSV格式的TXT文件,对于格式复杂表格,ChatGPT对CSV表格理解能力最强
- 把无表格的Markdown格式TXT文件 与 CSV表格的TXT文件一起embedding
- 由于切片会破坏表格内容(破坏列与行的数据关系),所以建议列表内容作为TXT在一个切片内
总结一下,DOCX转Markdown删表格 -> DOCX表格转CSV表格->MD格式TXT与CSV表格TXT->embedding->ChatGPT
原表格如下,signMsg部分格式复杂:
参数名称 | 参数含义 | 长度 | 可否为空 | 参数说明 |
mchntid | 商户编号 | 15 | 不可空 | 统一分配给商户的商户编号,用以区分不同商户。 |
orderId | 订单编号 | 16 | 不可空 | 商户提交给系统的交易订单编号。 每个商户提交的订单号,必须在自身账户交易中唯一。 |
reserved | 商户保留域 | 60 | 可空 | 商户通过此字段向支付系统发送信息,其将依原样填充返回给商户。 |
signMsg | 数字签名 | 32 | 不可空 | 以上所有参数及其值与密钥组合,经MD5 加密生成并转化为大写的32 位字符串。 |
对于所有值的参数及对应值,按照如上顺序和如下规则组成字符串,其中key为密钥: 参数1={参数1}&参数2={参数2}&……&参数n={参数n}&key={key} 然后进行32位算法的MD5 加密后,将结果转化为大写。 signMsg=MD5(参数1={参数1}&参数2={参数2}&……&参数n={参数n}&key={key}) | ||||
childMchntid | 子商户号 | 15 | 可空 | 支付系统统一分配给商户的子商户编号,不参与验签。 |
对比Markdown表格与CSV表格的文本体积:
Markdown表格的文本体积超过4K,冗余浪费Token
商户向支付系统的支付接入地址(http)提交订单信息,提交页面中应该包括如下信息(注意各字段的大小写):
+-------------+-------------+-----+--------+-------------------------+
| * | * | * | **可否 | **参数说明** |
| *参数名称** | *参数含义** | *长 | 为空** | |
| | | 度 | | |
| | | ** | | |
+=============+=============+=====+========+=========================+
| mchntid | 商户编号 | 15 | 不可空 | 统一分配给商户的商户编 |
| | | | | 号,用以区分不同商户。 |
+-------------+-------------+-----+--------+-------------------------+
| orderId | 订单编号 | 16 | 不可空 | 商户提交 |
| | | | | 给系统的交易订单编号。 |
| | | | | |
| | | | | 每个 |
| | | | | 商户提交的订单号,必须 |
| | | | | 在自身账户交易中唯一。 |
+-------------+-------------+-----+--------+-------------------------+
| bgUrl | 后台 | 80 | 不可空 | 后台接收应答地 |
| | 交易接收Url | | | 址,用于商户记录交易信 |
| | | | | 息和处理,对于使用者是 |
| | | | | 不可见的。需URLEncoder |
| | | | | \"UTF-8\"处理 |
+-------------+-------------+-----+--------+-------------------------+
| productName | 商品名称 | 60 | 可空 | 需URLEncoder |
| | | | | \"UTF-8\"处理 |
+-------------+-------------+-----+--------+-------------------------+
| productNum | 商品数量 | 8 | 可空 | |
+-------------+-------------+-----+--------+-------------------------+
| productDesc | 商品描述 | 100 | 可空 | 需URLEncoder |
| | | | | \"UTF-8\"处理 |
+-------------+-------------+-----+--------+-------------------------+
| reserved | 商户保留域 | 60 | 可空 | 商户通过此字段向 |
| | | | | 支付系统发送信息,其将 |
| | | | | 依原样填充返回给商户。 |
+-------------+-------------+-----+--------+-------------------------+
| signMsg | 数字签名 | 32 | 不可空 | 以上所有参数 |
| | | | | 及其值与密钥组合,经MD5 |
| | | | | 加 |
| | | | | 密生成并转化为大写的32 |
| | | | | 位字符串。 |
+-------------+-------------+-----+--------+-------------------------+
| | 对于 | | | |
| | 所有值的参 | | | |
| | 数及对应值 | | | |
| | ,按照如上 | | | |
| | 顺序和如下 | | | |
| | 规则组成字 | | | |
| | 符串,其中 | | | |
| | key为密钥: | | | |
| | | | | |
| | 参数1 | | | |
| | ={参数1}&参 | | | |
| | 数2={参数2 | | | |
| | }&......&参 | | | |
| | 数n={参数n | | | |
| | }&key={key} | | | |
| | | | | |
| | 然后进行32 | | | |
| | 位算法的MD5 | | | |
| | 加密后 | | | |
| | ,将结果转 | | | |
| | 化为大写。 | | | |
| | | | | |
| | signMs | | | |
| | g=MD5(参数1 | | | |
| | ={参数1}&参 | | | |
| | 数2={参数2 | | | |
| | }&......&参 | | | |
| | 数n={参数n} | | | |
| | &key={key}) | | | |
+-------------+-------------+-----+--------+-------------------------+
| c | 子商户号 | 15 | 可空 | 支付 |
| hildMchntid | | | | 系统统一分配给商户的子 |
| | | | | 商户编号,不参与验签。 |
+-------------+-------------+-----+--------+-------------------------+
CSV表格的文本体积精简
商户向支付系统的支付接入地址(http)提交订单信息,提交页面中应该包括如下信息(注意各字段的大小写):
参数名称,参数含义,长度,可否为空,参数说明
mchntid,商户编号,15,不可空,统一分配给商户的商户编号,用以区分不同商户。
orderId,订单编号,16,不可空,商户提交给系统的交易订单编号。
,,,,每个商户提交的订单号,必须在自身账户交易中唯一。
reserved,商户保留域,60,可空,商户通过此字段向支付系统发送信息,其将依原样填充返回给商户。
signMsg,数字签名,32,不可空,以上所有参数及其值与密钥组合,经MD5 加密生成并转化为大写的32 位字符串。
,对于所有值的参数及对应值,按照如上顺序和如下规则组成字符串,其中key为密钥:,,,
,参数1={参数1}&参数2={参数2}&……&参数n={参数n}&key={key},,,
,然后进行32位算法的MD5 加密后,将结果转化为大写。,,,
,signMsg=MD5(参数1={参数1}&参数2={参数2}&……&参数n={参数n}&key={key}),,,
childMchntid,子商户号,15,可空,支付系统统一分配给商户的子商户编号,不参与验签。
ChatGPT答复的结果