Skip to content

brooze-1/Table-Q-A

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎃表格搜索脚本

🪔一、前言

本人查阅大量网上的资料发现,大多数实现表格搜索的功能都是通过nlp2sql(text2sql) 的方式实现的😅,对于没有接触过自然语言处理或者没有接触过数据库的小白 非常的不友好😶,所以这里我们采用一种取巧的办法来实现表格搜索的功能,虽然效果可能没有nlp2sql(text2sql)好,但是对于数据量不大的情况下还是可以取得不错的效果的🥳。

🗝二、方法

假设我们有一张表格如下:

姓名 语文 数学 英语
张三 98 96 88
李四 76 77 65

我们要怎样实现表格搜索呢?☜(゚ヮ゚☜)我们通过比较文本相似度来实现表格相似度。比较哪两段文本的相似度呢?(☞゚ヮ゚)☞ 比如说目前有一个问题是:张三的语文成绩是多少?,我们通过对表格进行处理(将表头和字段进行合并)可以得到一个形如{问题:答案}的字典:

{"张三语文":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'
}

📽效果演示

(2)🌺计算文本相似度(cal_similarity.py)

通过数据预处理的步骤,可以说我们已经得到了{问题:答案}字典类型的dict.txt文件了,现在只需要输入问题,然后我们将问题依次与字典中的进行文本相似度比对找出与问题相似度最高的键,再通过键值索引得出对应的值(也就是回答)。

📽效果演示

(3)🌷数据库补充(add_data.py)

为了对我们的dict.txt中的问答数据进行扩展,我还另外写了一个对dict.txt数据进行扩展的脚本。首先你需要一个下面这种格式的excel表格

question answer
今天吃了饭没?
今天天气怎么样? 还可以没有下雨
$\cdots$ $\cdots$

然后将需要添加的excel文件路径传入add_data.py即可将excel表格中的问答数据更新到dict.txt中更新前的dict.txt

{
	'张三语文': '98', '张三数学': '96', '张三英语': '88', 
	'李四语文': '76', '李四数学': '77', '李四英语': '65',
    '王二麻子语文': '76', '王二麻子数学': '92', '王二麻子英语': '90',
    '隔壁老王语文': '95', '隔壁老王数学': '80', '隔壁老王英语': '79'
}

更新后的dict.txt

{
	'今天吃完了饭没': '没', '今天天气怎么样': '还可以没有下雨','今天晚上一起去散步吗': '可以',
	'张三语文': '98', '张三数学': '96', '张三英语': '88', 
	'李四语文': '76', '李四数学': '77', '李四英语': '65',
    '王二麻子语文': '76', '王二麻子数学': '92', '王二麻子英语': '90',
    '隔壁老王语文': '95', '隔壁老王数学': '80', '隔壁老王英语': '79'
}

📽效果演示

🍭六、发文平台以及项目开源平台

github仓库地址🙈
gitee仓库地址🙉
博客首页🙊

☕请我喝卡布奇诺

如果本仓库对你有帮助,可以请作者喝杯卡布奇诺☜(゚ヮ゚☜)

About

python实现简易表格搜索脚本

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages