gradio简单搭建——关键词匹配筛选【进一步优化】

gradio简单搭建——关键词匹配筛选[进一步优化]

    • 任务回顾
    • 新的想法:无效元素筛选
    • 界面搭建
    • 数据处理与生成过程
    • 交互界面展示

任务回顾

apply \text{apply} apply方法的使用一节中,简单提到了任务目标:通过关键词的形式,在文本数据中体现出主体的工作类型

但这个目标执行之前,可以尝试对数据先一步进行清洗:如果文本数据满足一些关键词构成的模板,这种数据更容易地被查找出与工作性质相关的信息,而不需要去观察文本数据的其他位置。例如如下几组关键词组成模板:

mode = {
	1:['进行','作业'],
    2:['进行','工作'],
    3:['操作','时'],
    4:['操作','过程中']
}

在一些示例中,可以轻松地通过这些模板推理出主体对应的工作性质。例如:

某人在车间内操作钻床,不小心被铁屑蹭伤。

结合上述模板,可以直接观察出:主体的工作性质和钻床相关。从而引出上一节使用展示工具gradio实现一个通过单元素/多元素顺序匹配筛选表格数据的简单交互平台,本节将对其进行进一步优化
初始版本展示

新的想法:无效元素筛选

单元素/多元素思路的启发后,想起了《三体3:死神永生》中的低光速黑域

若星球被低光速黑域笼罩,外星文明远远地看上一眼,就知道是绝对安全的——光都无法逃离出来,黑域内的生物自然无法逃离,这就是宇宙安全声明。

言归正传,在文本数据中是否也可能存在这种情况——“远远”地看上一眼,就可以知道:文本内信息对于主体工作性质的描述几乎无关联。例如:

某人在上班途中,与电动车相撞受伤。

分析:首先文本中并没有直接描述主体的工作性质信息(岗位、职位),其次可以通过推理:上班途中,意味着其没有到达预定岗位开始工作,可以归纳出:上班途中发生的事情,大概率与主体的工作性质无关。
也存在极个别情况~但减轻工作量的目的确实达到了。

想法有了,继续使用展示工具gradio对交互平台进行优化,包含两个方面:

  • 加入无效元素筛选功能:只要数据中出现关键词,将该数据在本次匹配筛选过程中去除
  • 关键词模板功能不冲突:各自可以单独执行,也可以混用。

界面搭建

import gradio as gr
from file_generator import generate_file

class CONST:
    file_type_list = ['xlsx']

def submit(input_file,
           invalid_task,
           invalid_keyword_input,
           task,
           keyword_input,
           desc):
    

    print(f'task:{task}')
    print(f'keyword_input:{keyword_input}')
    print(f'invalid_task:{invalid_task}')
    print(f'invalid_keyword_input:{invalid_keyword_input}')
    
    # 输入文件格式设置
    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 invalid_task and not task:
        raise gr.Error('[无效元素匹配]与[单/多元素匹配]至少选择一个')
    else:
        # [无效元素匹配]逻辑描述
        if invalid_task:
            if invalid_keyword_input:
                if invalid_task == '禁用':
                    raise gr.Error('无效元素匹配[禁用]时,无法输入无效元素') # 选择禁用时,文本框不可用
                else:
                    if ',' in invalid_keyword_input:
                        invalid_keyword_input = invalid_keyword_input.replace(',',',')
                    if ',' in invalid_keyword_input:
                        invalid_keyword_list = invalid_keyword_input.split(',')
                    else:
                        invalid_keyword_list = [invalid_keyword_input]
            else:
                if invalid_task == '启用':
                    raise gr.Error('无效元素匹配[启用]时,请输入无效元素') # 选择启用时,文本框内必须输入无效元素
                else:
                    invalid_keyword_list = list()
        else:
            invalid_keyword_list = list() # 未选择使用[无效元素匹配]

        # [单/多元素匹配]逻辑描述
        if task:
            if not keyword_input:
                raise gr.Error('请输入匹配关键词')  # 已选择[单/多元素匹配]条件下,文本框内必须输入匹配元素
            else:
                if ',' in keyword_input:
                    keyword_input = keyword_input.replace(',',',')
                
                if ',' in keyword_input:
                    if task == '单元素匹配':
                        raise gr.Error('单元素匹配模式不支持输入多个关键词')
                    else:
                        keyword_list = keyword_input.split(',')
                else:
                    if task == '多元素匹配':
                        raise gr.Error('多元素匹配模式不支持输入单个关键词')
                    else:
                        keyword_list = [keyword_input]
        else:
            task = '无元素匹配'
            keyword_list = list() # 未选择使用[单/多元素匹配]

    output = generate_file(input_file,task,invalid_task,keyword_list,invalid_keyword_list)
    return output

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

3. 无效元素匹配:元素匹配过程中,一旦出现无效元素,则不包含该样本;
一次性可以输入多个元素,使用逗号(英文)分隔;
例: 上班途中,下班途中,...

4. [无效元素匹配]与[单/多元素匹配]操作之间可单独使用,也可混用;
"""

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.Radio(
        choices=['单元素匹配','多元素匹配'],
        label='选择元素匹配模式'
    ),
    gr.Textbox(
        label='匹配关键词',
        placeholder='请输入匹配关键词'
    ),
    gr.Text(
        description,
        label='使用说明'
    )],
    outputs=gr.File(label='输出文件'),
    title='单元素/多元素匹配筛选数据',
    examples=[['测试文件.xlsx','启用','上班途中,下班途中','',''],
              ['测试文件.xlsx','禁用','','',''],
              ['测试文件.xlsx','','','单元素匹配','作业时'],
              ['测试文件.xlsx','','','多元素匹配','操作,过程中'],
              ['测试文件.xlsx','启用','上班途中,下班途中','多元素匹配','操作,时']]
)

demo.launch(share=True, server_name='0.0.0.0',server_port=8706)

数据处理与生成过程

import pandas as pd
import os

def sorted_keywords_update(df,task,invalid_task,keyword_list,invalid_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 eliminate_invalid(df_input,invalid_keyword_list):
        """无效元素匹配[启用]状态下,筛除包含invalid_keyword_list内词对应的行"""
        for invalid_word in invalid_keyword_list:
            df_input = df_input[~df_input['文本信息'].str.contains(invalid_word)]
        return df_input
    
    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
    
    # 删除字段中的空元素
    sub_df = df[~df['文本信息'].isna()]

    # 筛选无效元素过程
    if invalid_task == '启用':
        invalid_sub_df = eliminate_invalid(sub_df,invalid_keyword_list)
    else:
        invalid_sub_df = sub_df #[禁用/未选择]时不做处理;

    # 元素匹配过程
    if task == '单元素匹配':
        contain_df = mode_1_rules(invalid_sub_df,keyword_list)
    elif task == '多元素匹配':
        contain_df = invalid_sub_df[invalid_sub_df.apply(mode_2_rules,axis=1)]
    else:
        contain_df = invalid_sub_df #同上,[未选择]时不做处理;

    # 创建输出文件夹并输出文件
    output_dir = f'./output/match_keyword/{task}'
    output_path = f'{output_dir}/{task}_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,
                  invalid_task,
                  keyword_input,
                  invalid_keyword_input):
    """
    file_path: 待优化数据文件路径
    task: 匹配模式:[单模式匹配,多模式匹配]
    invalid_task: 无效匹配模式:[启用,禁用]
    keyword_input: 匹配关键词
    invalid_keyword_input: 无效匹配关键词
    """
    df = pd.read_excel(file_path)
    # 数据生成平台
    output_file_path = sorted_keywords_update(df,task,invalid_task,keyword_input,invalid_keyword_input)
    return output_file_path

交互界面展示

初始状态下,交互界面的展示效果如下:
试了几个例子~
初始状态界面
执行结束后,交互界面的展示效果如下:
执行结束界面

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Harmony鸿蒙南向驱动开发-DAC

DAC&#xff08;Digital to Analog Converter&#xff09;是一种通过电流、电压或电荷的形式将数字信号转换为模拟信号的设备。 DAC模块支持数模转换的开发。它主要用于&#xff1a; 作为过程控制计算机系统的输出通道&#xff0c;与执行器相连&#xff0c;实现对生产过程的自…

【讲解下Fiddler的安装和使用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

支小蜜校园刷脸支付系统的优势在哪里?

在当今社会&#xff0c;校园欺凌问题日益受到人们的关注。校园欺凌不仅影响学生的身心健康&#xff0c;还可能导致其产生厌学、逃学甚至报复社会的行为。建立校园防欺凌系统对于学校而言&#xff0c;具有极其重要的意义。本文将详细探讨校园防欺凌系统对学校的好处。 一、保障…

3.1 基本形式 机器学习

从本章本节开始就开始正式介绍机器学习的算法了&#xff01;我们首先登场的是---------线性模型。 w可以理解为权重&#xff0c;我们的x就是我们的样本点的各个特征数值&#xff0c;最后输出模型f&#xff08;x&#xff09;。其代表我们把样本点带入&#xff0c;以二分类为例&a…

金三银四面试题(十七):MySQL面试都问什么(2)

今天我们继续盘点那些高频的MySQL面试题。 说说InnoDB与MyISAM的区别 InnoDB 支持事务&#xff0c;MyISAM 不支持&#xff0c;对于InnoDB 每一条SQL 语言都默认封装成事务&#xff0c;自动提交&#xff0c;这样会影响速度&#xff0c;所以最好把多条SQL 语言放在begin 和comm…

密码学基础--搞清RFC和PKCS(1)

目录 1. CryptoDriver里KeyElement格式 2. 挖掘RFC标准 3.小结 昨天从生成密钥对开始逐步了解了公钥、证书等各种编码方式&#xff0c;今天继续趁热打&#xff0c;做一个理论知识汇总。 Ps:我只是标准的翻译搬运工。 1. CryptoDriver里KeyElement格式 在 CryptoKeyElemen…

基于达梦数据库开发-python篇

文章目录 前言一、搭建demo前提初始化简单demo 二、可能出现的异常情况DistutilsSetupErrorNo module named dmPythonlist报错 总结 前言 出于信创的考虑&#xff0c;近年来基于国产数据库达梦的应用开发逐渐变多。本文将介绍在windows环境下基于DM8版本的python的简单开发使用…

【自控笔记】线性系统时域分析法

动态稳态性能 一阶系统 二阶系统 二阶系统单位阶跃 系统稳定性分析

【优选算法专栏】专题四:前缀和(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

还不会免费将PDF转为Word?赶快试试这3种工具!

PDF文档格式转换是高频且刚需的办公需求&#xff0c;虽然很简单&#xff0c;但其实绝大部分人找不到合适的工具。 将PDF免费转为Word的方法有很多&#xff0c;这里主要介绍三种工具。 第一种使用最常见的Word软件&#xff0c;第二种使用免费转换网站pdf2doc&#xff0c;第三种…

cmocka入门教程

文章目录 摘要前言什么是mockmock示例cmocka安装使用mock function替换subfunction控制mock function的输入和输出 摘要 本文介绍cmocka中&#xff0c;mock的使用。 前言 在这之前&#xff0c;需要了解最基本的cmocka使用。如果之前有gtest的编程经验&#xff0c;掌握cmocka的…

蓝桥杯 迷宫(bfs)

0迷宫 - 蓝桥云课 (lanqiao.cn) 思路 &#xff1a; 最后一定要倒数输出路径&#xff0c;因为从前面输出你会找不到下一个到底是谁&#xff0c;bfs过程是找最小路径&#xff0c;最后输出是去找方向&#xff0c;但是此题作为一个填空题&#xff0c;我直接手写&#xff08;开玩笑…

对于Redis,如何根据业务需求配置是否允许远程访问?

1、centos8 Redis安装的配置文件目录在哪里&#xff1f; 在 CentOS 8 中&#xff0c;默认情况下 Redis 的配置文件 redis.conf 通常位于 /etc/ 目录下。确切的完整路径是 /etc/redis.conf。 2、redis如何设置允许远程登录 修改redis.conf文件 # 继承默认注释掉的bind配置 # …

十种mfc140.dll丢失的解决方法,有效解决mfc140.dll丢失的问题

唉&#xff0c;烦人的问题又来了。怎么计算机报错提示mfc140.dll无法启动&#xff1f;这mfc140.dll是何方神圣&#xff0c;竟然连软件程序的正常运行都能影响到&#xff1f;我猜你也被这种困扰搞得头大吧。别着急&#xff0c;下面我会详细分享mfc140.dll丢失时的修复步骤&#…

Android平台RTSP|RTMP播放器如何实现TextureView渲染

技术背景 自2015年我们发布Android平台RTSP、RTMP直播播放模块以来&#xff0c;渲染这块&#xff0c;支持SurfaceView或GlSurfaceView&#xff0c;当然如果开发者需要TextureView渲染&#xff0c;可以把RTSP、RTMP流数据解码回调YUV或RGB数据上来&#xff0c;上层自己渲染。本…

pycharm一直打不开

一直处在下面的页面&#xff0c;没有反应 第一种方案&#xff1a; 以管理员身份运行 cmd.exe&#xff1b;在打开的cmd窗口中&#xff0c;输入 netsh winsock reset &#xff0c;按回车键&#xff1b;重启电脑&#xff1b;重启后&#xff0c;双击pycharm图标就能打开了&#xf…

阿里淘天一面凉经

电话面&#xff0c;秒挂。 由于答的依托。导致面试官一开始就准备要挂我了。后面问的参考性不大。 总结&#xff1a; 1.自我介绍 2.项目里自己体会比较多的&#xff0c;遇到困难比较大的技术实现。&#xff08;没复习&#xff09; 3.项目中什么场景下用到分布式锁&#xf…

提升Terraform工作流程最佳实践

Terraform 是管理基础设施及代码&#xff08;IaC&#xff09;最常用的工具之一&#xff0c;它能使我们安全且可预测地对基础设施应用更改。刚开始上手 Terraform 可能会感觉有些不容易&#xff0c;但很快就能对该工具有基本的了解&#xff0c;随之可以开始运行命令、创建和重构…

如何压缩视频?5种超简单的方法!

用视频来记录生活和重要信息变得越来越广泛&#xff0c;比如用手机拍摄美好瞬间、对线上会议或课堂的内容进行视频录制、保存各种精彩的电影文件、社交媒体上分享美好生活&#xff0c;但是由于视频本身包含的信息很多以及拍摄设备的进步&#xff0c;文件越来越大&#xff0c;占…

08 Php学习:iff语句、Switch语句

PHP 条件语句 当您编写代码时&#xff0c;您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。 在 PHP 中&#xff0c;提供了下列条件语句&#xff1a; if 语句 - 在条件成立时执行代码 if…else 语句 - 在条件成立时执行一块代码&#xff0c;…