gradio简单搭建——关键词匹配筛选

news2024/11/25 20:29:28

gradio简单搭建——关键词匹配筛选

    • 界面搭建
    • 数据处理过程
    • 执行效果展示

上一节使用DataFrame中的apply方法提升了表格数据的筛选效率,本节使用gradio结合apply方法搭建一个关键词匹配筛选的交互界面。

界面搭建

import gradio as gr
import pandas as pd
from file_generator import generate_file

class CONST:
	# 指定传入文件格式
    file_type_list = ['xlsx']

def submit(input_file,radio_input,keyword_input,desc):
	"""
	参数desc指下面的description,
	没有在submit函数中起作用,但gr.Interface中定义了说明文本框gr.Text(),
	如果不加该参数,会报错.
	"""

    # 输入文件路径格式设置
    if '\\' in input_file:
        input_file = input_file.replace('\\','/')
    
    suf = input_file.split('.')[-1]
    if suf not in CONST.file_type_list:
        raise gr.Error('不支持的格式:{},请检查文件格式'.format(suf))
    
    # 单选框设置
    if not radio_input:
        raise gr.Error('请选择一个任务')
    else:
        task = radio_input

    # 关键词设置
    # 分隔符统一,防止输入法切换问题
    if ',' in keyword_input:
        keyword_input = keyword_input.replace(',',',')
    
    if ',' in keyword_input:
        keyword_list = keyword_input.split(',')
    else:
        keyword_list = [keyword_input]
        
    output = generate_file(input_file,task,keyword_list)
    return output

description = """
1. 单元素匹配:筛选出包含输入元素的样本;
2. 多元素匹配:筛选出按输入元素顺序,包含输入元素的样本;
"""

demo = gr.Interface(
    fn=submit,
    inputs = [
    # 上传文件框
    gr.File(
        file_count="single",
        label="上传文件",
        file_types=CONST.file_type_list),
    # 单选框
    gr.Radio(
        choices=['单元素匹配','多元素匹配'],
        label='选择匹配模式:'),
    # 关键词输入文本框
    gr.Textbox(
        label='输入匹配关键词:',
        placeholder='输入元素,若存在多个元素用逗号(英文)分隔'),
	
	# 使用说明文本框
    gr.Text(
        description,
        label='使用说明')
    ],
    outputs=gr.File(label='输出文件'),
    title='单元素/多元素匹配筛选数据'
)

# 需要手动安装frpc_windows_amd64_v0.2文件
demo.launch(share=True, server_name='0.0.0.0',server_port=8706)

数据处理过程

import pandas as pd
import os

def sorted_keywords_update(df,mode_input,keyword_list):
    def sorted_keywords(str_input,sorted_word_list):
        """查找列表中的关键词,如果关键词有序地匹配成功返回True,否则返回False"""
        count = 0
        while count < len(sorted_word_list):
            if sorted_word_list[count] in str_input:
                str_input = "".join(str_input.split(sorted_word_list[count])[1:])
                count += 1
            else:
                break

        if count == len(sorted_word_list):
            return True
        else:
            return False
    
    def mode_2_rules(row):
    	"""多元素匹配模式规则"""
        return sorted_keywords(row['文本信息'],keyword_list) == True
    
    def mode_1_rules(df_input, keyword_list):
        """单元素匹配模式的规则"""
        assert len(keyword_list) == 1
        contain_df = df_input[df_input['文本信息'].str.contains(keyword_list[0])]
        return contain_df
    
    assert mode_input in ['单元素匹配','多元素匹配']
    # 去除数据中的nan值
    sub_df = sub_df[~sub_df['文本信息'].isna()]

    if mode_input == '单元素匹配':
        contain_df = mode_1_rules(sub_df,keyword_list)
    else:
        contain_df = sub_df[sub_df.apply(mode_2_rules,axis=1)]
    
    # 创建输出文件夹并将数据写入文件
    output_dir = f'./output/match_keyword/{mode_input}'
    output_path = f'{output_dir}/{mode_input}_res.xlsx'
    
    os.makedirs(output_dir, exist_ok=True)
    contain_df.to_excel(output_path,index=False)
    return output_path

def generate_file(file_path,task,keyword_input):
    """
    file_path: 待筛选数据文件路径
    task: 匹配模式:[单元素匹配,多元素匹配]
    keyword_input: 匹配关键词
    """
    df = pd.read_excel(file_path)
    # 数据生成平台
    output_file_path = sorted_keywords_update(df,task,keyword_input)
    return output_file_path

执行效果展示

初始状态下,交互框的展示效果如下:
初始状态展示效果
执行过程中,交互框的展示效果如下:
展示效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言指针—二级指针和指针数组

二级指针和指针数组 二级指针 指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那指针变量的地址存放在哪里&#xff1f; 这就是二级指针 。 int main() {int a 10;int* pa &a;//pa是一个指针变量&#xff0c;同时也是一个一级指针变量*pa 20;//此时解引用pa…

021——搭建TCP网络通信环境(c服务器python客户端)

目录 前言 服务器程序 服务器程序验证过程 客户端程序 前言 驱动开发暂时告一段落了。后面在研究一下OLED和GPS的驱动开发&#xff0c;并且优化前面已经移植过来的这些驱动&#xff0c;我的理念是在封装个逻辑处理层来处理这些驱动程序。server直接操作逻辑处理层的程序。 …

统信UOS(Linux)安装nvm node管理工具

整篇看完再操作&#xff0c;有坑&#xff01;&#xff01; 官网 nvm官网 按照官网方式安装&#xff0c;一直报 错 经过不断研究&#xff0c;正确步骤如下 1、下载安装包 可能因为网络安全不能访问github&#xff0c;我是链接热点下载的 wget https://github.com/nvm-sh/…

基于springboot+vue+Mysql的职称评审管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Mac安装配置ElasticSearch和Kibana 8.13.2

系统环境&#xff1a;Mac M1 (MacOS Sonoma 14.3.1) 一、准备 从Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic上下载ElasticSearch和Kibana 笔者下载的是 elasticsearch-8.13.2-darwin-aarch64.tar.gz kibana-8.13.2-darwin-aarch64.tar.gz 并放置到个人…

序列化、反序列化:将对象以字节流的方式,进行写入或读取

序列化&#xff1a;将指定对象&#xff0c;以"字节流"的方式写入一个文件或网络中。 反序列化&#xff1a;从一个文件或网络中&#xff0c;以"字节流"的方式读取到对象。 package com.ztt.Demo01;import java.io.FileNotFoundException; import java.io.Fi…

C++的stack和queue类(一):适配器模式、双端队列与优先级队列

目录 基本概念 适配器模式 stack.h test.cpp 双端队列-deque 仿函数 优先级队列 基本概念 1、stack和queue不是容器是容器适配器&#xff0c;它们没有迭代器 2、stack的quque的默认容器是deque&#xff0c;因为&#xff1a; stack和queue不需要遍历&#xff0…

基于SSM+Jsp+Mysql的农产品供销服务系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

0基础想进入IT行业,可以从这个框架入手

行业现状 IT、AI都是很多年来的热门话题&#xff0c;以至于时至今日&#xff0c;哪怕IT行业已经卷成狗&#xff0c;依然有无数的人想要挤进这个行业。 大模型、云原生、react等等&#xff0c;无数的技术、概念应运而生。那么作为一个没有基础的人&#xff0c;该如何进入这个行…

第十四届蓝桥杯模拟考试II_物联网设计

还是要稳妥啊&#xff0c;写A板的时候感觉很简单所以将模块都混在一起了&#xff0c;结果不出意外就出BUG了又得从头开始查BUG,多简单的题模块最好都分块写写完就检查&#xff0c;这样一步一个脚印多稳 这个模块出了俩BUG第一个是要检查有没有数据进入if语句&#xff0c;不然标…

Kubernetes(k8s)监控与报警(qq邮箱+钉钉):Prometheus + Grafana + Alertmanager(超详细)

Kubernetes&#xff08;k8s&#xff09;监控与报警&#xff08;qq邮箱钉钉&#xff09;&#xff1a;Prometheus Grafana Alertmanager&#xff08;超详细&#xff09; 1、部署环境2、基本概念简介2.1、Prometheus简介2.2、Grafana简介2.3、Alertmanager简介2.4、Prometheus …

OpenCV | 图像读取与显示

OpenCV 对图像进行处理时&#xff0c;常用API如下&#xff1a; API描述cv.imread根据给定的磁盘路径加载对应的图像&#xff0c;默认使用BGR方式加载cv.imshow展示图像cv.imwrite将图像保存到磁盘中cv.waitKey暂停一段时间&#xff0c;接受键盘输出后&#xff0c;继续执行程序…

力扣面试150 分发糖果 分步贪心

Problem: 135. 分发糖果 思路 &#x1f468;‍&#x1f3eb; 参考&#xff1a;代码随想录 一次是从左到右遍历&#xff0c;只比较右边孩子评分比左边大的情况。一次是从右到左遍历&#xff0c;只比较左边孩子评分比右边大的情况。 复杂度 时间复杂度: O ( n ) O(n) O(n) …

代码随想录算法训练营第三十六天| LeetCode 435. 无重叠区间、763.划分字母区间、56. 合并区间

一、LeetCode 435. 无重叠区间 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html 状态&#xff1a;已解决 1.思路 本题的局部最优是尽量移除与某个区间重叠的其他区间&#xff0c;全局最优是移除的…

构建强健身体的未来:健身管理平台微服务架构解析

在现代社会&#xff0c;人们越来越关注健康和身体素质的提升。健身管理平台应运而生&#xff0c;为用户提供个性化的健身计划、监测和管理工具。微服务架构作为一种灵活且可扩展的系统设计方法&#xff0c;为健身管理平台提供了高效、可靠的基础。 1. 概述健身管理平台微服务架…

Open CASCADE学习|统计形状拓扑数量

边界表示法&#xff08;Boundary Representation&#xff0c;简称B-Rep&#xff09;是几何造型中最成熟、无二义的表示法。它主要用于描述物体的几何信息和拓扑信息。在边界表示法中&#xff0c;一个实体&#xff08;Solid&#xff09;由一组封闭的面&#xff08;Face&#xff…

创建大量栅格文件并分别写入像元数据:C++ GDAL代码实现

本文介绍基于C语言GDAL库&#xff0c;批量创建大量栅格遥感影像文件&#xff0c;并将数据批量写入其中的方法。 首先&#xff0c;我们来明确一下本文所需实现的需求。已知我们对大量遥感影像进行了批量读取与数据处理操作——具体过程可以参考文章C GDAL提取多时相遥感影像中像…

nginx工作原理解析

目录 1、master-workers 的工作机制介绍 2、master-workers 的机制的好处 3、设置多少个 worker 4、最大连接数和支持的最大并发数的计算 1、master-workers 的工作机制介绍 nginx在启动后&#xff0c;会有一个master进程和一个或者多个相互独立的worker进程 过来的请求由…

HDLbits 刷题 --Exams/m2014 q4h

Implement the following circuit: 实现以下电路&#xff1a; module top_module (input in,output out);assign out in; endmodule 运行结果&#xff1a;

Spark_SparkSql写入Oracle_Undefined function.....将长字符串写入Oracle中方法..

在使用Spark编写代码将读库处理然后写入Oracle中遇到了诸多小bug,很磨人。shit!! 实测1&#xff1a;TO_CLOB(a3) 代码样例 --这是一个sparksql写入hive的一个小逻辑&#xff0c;我脱敏了噻 SELECT a1, a2, TO_CLOB(a3) AS clob_data, TO_DATE(a4) AS time FROM table1 WHERE…