# Table-Q-A **Repository Path**: booze_place/Table-Q-A ## Basic Information - **Project Name**: Table-Q-A - **Description**: 使用python实现简易的表格搜索功能 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-10-03 - **Last Updated**: 2023-02-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 🎃表格搜索脚本 ### 🪔一、前言 本人查阅大量网上的资料发现,大多数实现表格搜索的功能都是通过**nlp2sql(text2sql)** 的方式实现的😅,对于没有接触过自然语言处理或者没有接触过数据库的小白 **非常的不友好**😶,所以这里我们采用一种**取巧的办法**来实现表格搜索的功能,**虽然效果可能没有nlp2sql(text2sql)好**,但是对于**数据量不大**的情况下还是可以取得**不错的效果**的🥳。 ### 🗝二、方法 假设我们有一张表格如下: | 姓名 | 语文 | 数学 | 英语 | | :--: | :--: | :--: | :--: | | 张三 | 98 | 96 | 88 | | 李四 | 76 | 77 | 65 | 我们要**怎样实现**表格搜索呢?☜(゚ヮ゚☜)我们通过**比较文本相似度**来实现表格相似度。**比较哪两段**文本的相似度呢?(☞゚ヮ゚)☞ 比如说目前有一个问题是:**张三的语文成绩是多少?**,我们通过对表格进行处理(**将表头和字段进行合并**)可以得到一个形如`{问题:答案}`的字典: ```python {"张三语文":98,"张三数学":96,"张三英语":88,"李四语文":76,"李四数学":77,"李四英语":65} ``` 我们将**问题**依次与字典中的**键**进行**文本相似度比对**,找出与问题相似度最高的**键**,最终可以发现我们的问题`张三的语文成绩是多少?`和`张三语文`的相似度最高,再通过**键值索引**将`张三语文`对应的**值**索引出来,这就相当于我们**变相的实现了表格搜索**的功能。这样虽然实现了表格搜索但是**缺陷**也是**十分的明显**。 ### 🗿三、缺陷 进行文本相似度比较时,需要与字典中的每一个**键**进行比较,所以如果**数据量很大**的话,这种方式会**消耗**很多的**时间**在比较当中,所以这种方法适用于较小数据量的场景。 ### 💾四、项目目录结构 **注意:**process_data.py、 cal_similarity.py、add_data.py这三个脚本文件都是可以独立运行的。 正常的执行顺序是process_data.py **⇨** cal_similarity.py **⇨** add_data.py。 ``` Table Q&A ┣━━add_data.py # 扩展dict.txt,添加数据的py脚本 ┣━━cal_similarity.py # 计算文本相似度的py脚本 ┣━━data # data为存放待处理数据的文件夹 ┃ ┣━━data.xlsx ┃ ┗━━data2.xlsx ┣━━main.py # 为主函数,可以在其中调用其他脚本文件 ┣━━process_data.py # 预处理xlsx表格文件的py脚本 ┣━━README.md ┣━━res_dict # res_dict文件夹用于存储py脚本运行过程中生成的过渡文件 ┃ ┗━━dict.txt # dict.txt为预处理产生类字典形的文本文件 ┣━━test # test文件夹用于存储测试代码及与项目无关的代码 ┃ ┣━━generate_tree.py ┃ ┗━━test.py ``` ### 🔨五、实际应用 #### (1)🌱数据预处理(process_data.py) ==注意:== **process_data.py**可以**根据表格的不同,写自己的数据预处理代码**,只要最终处理完的文件**保存为dict.txt的形式,并保存在res_dict文件夹下**即可🧐。 将excel表格中的内容转化为字典形式文本,其中数据预处理部分的代码会生成字典形式的文本文件,形如(dict.txt),保存在res_dict文件夹下: ``` { '张三语文': '98', '张三数学': '96', '张三英语': '88', '李四语文': '76', '李四数学': '77', '李四英语': '65', '王二麻子语文': '76', '王二麻子数学': '92', '王二麻子英语': '90', '隔壁老王语文': '95', '隔壁老王数学': '80', '隔壁老王英语': '79' } ``` **📽效果演示**




