加速生成nlp分类任务的数据(voc t voc)

news2024/12/21 15:08:19

例如 ABCD
生成A01B B01C A02C A03D。。。。。。。。。
在这里插入图片描述

from multiprocessing import Process, Manager, freeze_support


def gen_data(i,d,d_list,data):
    for j,dj in enumerate(data[i+1:]):
        # print(d,str(j+1).zfill(15),dj)

        d_list.append([d,str(j+1),dj])

if __name__ == '__main__':
    freeze_support()
    with open("3.txt", "r", encoding="utf-8") as f:
        data = f.read()
    data = list("".join(data.replace("\n", "").split()))

    with open("5.txt", "r", encoding="utf-8") as f:
        data1 = f.read()
    data1 = list("".join(data1.replace("\n", "").split()))
    data += data1

    d_list = Manager().list()
    p_list=[]
    for i, d in enumerate(data[:-1]):
        print(i)

        p=Process(target=gen_data, args=(i,d,d_list,data))
        p_list.append(p)
        # 达到cpu 核心数开启
        if len(p_list)>=8:
            for p in p_list:
                p.start()

            for p in p_list:
                p.join()
            p_list=[]

加速版

from multiprocessing import Process, Manager, freeze_support
import  pandas as pd
from tqdm import tqdm

def gen_data(d_list,data):
    pdf = pd.DataFrame({"voc": list(data.strip())})
    pdf["voc_id"] = pdf.index.values
    for i in tqdm(range(0, pdf.shape[0] - 1)):
        first_str = pdf.loc[(pdf["voc_id"] - i) == 0, "voc"].tolist()[0]
        second_str = pdf.loc[(pdf["voc_id"] - i) > 0, "voc_id"].tolist()
        thrift_str = pdf.loc[(pdf["voc_id"] - i) > 0, "voc"].tolist()
        new_df = pd.DataFrame({"voc": [first_str] * len(second_str), "voc_id": second_str, "label": thrift_str})
        new_df["voc_id"] = new_df["voc_id"].astype("str").str.zfill(3)
        res = (new_df["voc"] + new_df["voc_id"].astype("str") + new_df["label"]).values.tolist()
        d_list += res


if __name__ == '__main__':
    freeze_support()
    with open("poetrySong.txt", "r", encoding="utf-8") as f:
        total_data = f.readlines()
    d_list = Manager().list()
    p_list = []
    for data in tqdm(total_data):
        p=Process(target=gen_data, args=(d_list,data))
        p_list.append(p)
        # 达到cpu 核心数开启
        if len(p_list)>=8:
            for p in p_list:
                p.start()

            for p in p_list:
                p.join()
            p_list=[]
    pd.to_pickle({"data":list(d_list)},"data_set")


该代码使用了多进程(multiprocessing)库来并行处理文本数据。代码中使用了Process类创建进程,并使用Manager类的list()方法创建了一个可以在多个进程间共享的列表d_list。然后,通过调用gen_data函数并传入d_list和data参数来生成数据。gen_data函数中首先将传入的data字符串转换为DataFrame对象。然后,使用一个for循环遍历DataFrame中的每个元素,将元素拼接成一个新的字符串,并将其添加到d_list中。最后,将生成的数据集保存到data_set.pkl文件中。

在主程序中,首先使用open函数打开名为poetrySong.txt的文本文件,并读取其中的所有行,保存到total_data列表中。然后,创建一个空的进程列表p_list,并使用一个for循环遍历total_data中的每个元素。在每次迭代中,创建一个新的进程并将其添加到p_list中。当p_list中的进程数量达到8时,使用两个嵌套的for循环分别启动和等待p_list中的每个进程,并将p_list重置为空列表。例如,如果total_data具有1000个元素,则将创建1000个进程来生成数据。

最后,将生成的数据集保存为data_set.pkl文件,以便后续使用。

推理

import pandas as pd
from tqdm import tqdm
import numpy as np

one = pd.read_pickle("data_set")
one = pd.DataFrame(one)
one_data = one.groupby("data")["data"].count()
new_table = pd.DataFrame({"voc_t_voc": one_data.index.values, "count": one_data.values})
print()
#
inp_list = []
inp = "人言性"
# 由于是比较大小前面已经确定的概率且在大小维度上是确定的故而不会对大小产生影响
# for i,p in enumerate(inp):
#     for j in range(i+1,len(inp)+1):
#         if j >len(inp)-1:
#             idp = p + "{}".format(j).zfill(3)
#             inp_list.append(new_table[new_table["voc_t_voc"].str.contains(idp)])
#         else:
#
#             idp=p+"{}".format(j).zfill(3)+inp[j]
#             inp_list.append(new_table[new_table["voc_t_voc"] == idp])
# print()
for _ in range(22):
    for i, p in enumerate(inp):
        idp = p + "{}".format(len(inp)).zfill(3)
        inp_list.append(new_table[new_table["voc_t_voc"].str.contains(idp)])
    res_dict = pd.concat(inp_list)
    res_dict["res"] = res_dict["voc_t_voc"].str[1:]
    res = res_dict.groupby("res", as_index=False)["count"].count()
    # 最大法
    # res=res.loc[res["count"]==res["count"].max(),"res"].values.tolist()[0][-1:]
    # 随机top法
    res = np.random.choice(res.loc[res["count"] > res["count"].max() - 2, "res"].str[-1:].tolist())
    inp += res
    print(inp)

等长统计

from multiprocessing import Process, Manager, freeze_support
import  pandas as pd
from tqdm import tqdm

def gen_data(d_list,data):
    pdf = pd.DataFrame({"voc": list(data.strip())})
    pdf["voc_id"] = pdf.index.values
    for i in range(0, pdf.shape[0] - 1):
        first_str = pdf.loc[(pdf["voc_id"] - i) == 0, "voc"].tolist()[0]
        second_str = pdf.loc[(pdf["voc_id"] - i) > 0, "voc_id"].tolist()
        thrift_str = pdf.loc[(pdf["voc_id"] - i) > 0, "voc"].tolist()
        new_df = pd.DataFrame({"voc": [first_str] * len(second_str), "voc_id": second_str, "label": thrift_str})
        new_df["voc_id"] = new_df["voc_id"].astype("str").str.zfill(3)
        res = (new_df["voc"] + new_df["voc_id"].astype("str") + new_df["label"]).values.tolist()
        d_list += res


if __name__ == '__main__':
    freeze_support()
    # with open("poetrySong.txt", "r", encoding="utf-8") as f:
    #     total_data = f.readlines()
    # total_data=[i for i in total_data if len(i) < 30]

    with open("poetrySong.txt", "r", encoding="utf-8") as f:
        data1 = f.readlines()
    # c=[len(i.strip().split("::")[-1]) for i in data1]
    # x={j: c.count(j) for j in
    #  set(c)}
    total_data= [i.strip().split("::")[-1] for i in data1 if len(i.strip().split("::")[-1]) == 24]
    d_list = Manager().list()
    p_list = []
    for data in tqdm(total_data):
        p=Process(target=gen_data, args=(d_list,data))
        p_list.append(p)
        # 达到cpu 核心数开启
        if len(p_list)>=8:
            for p in p_list:
                p.start()

            for p in p_list:
                p.join()
            p_list=[]
    pd.to_pickle({"data":list(d_list)},"data_set")








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

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

相关文章

STM32MP157驱动开发——按键驱动(休眠与唤醒)

文章目录 “休眠-唤醒”机制&#xff1a;APP执行过程内核函数休眠函数唤醒函数 休眠与唤醒方式的按键驱动程序(stm32mp157)驱动程序框架button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “休眠-唤醒”机制&#xff1a; 当应用程序必须等待某个事件发生&#xff0c…

docker - 学习笔记

一、简介 1.1 相关地址 Docker是基于Go语言开发的官网&#xff1a;https://www.docker.com/官方文档&#xff1a;https://docs.docker.com/仓库地址&#xff1a;https://hub.docker.com/ 1.2 虚拟化技术和容器化技术对比 1.2.1 虚拟化技术的缺点 资源占用十分多冗余步骤多启…

vue 中断请求

1 背景&#xff1a;针对一些请求时间较长&#xff0c;组件销毁后即中断请求&#xff1b; 2 方法&#xff1a; data(){return {//用于取消请求abortController:new AbortController(), } }, created(){//请求接口this.groundAcquisition(); }, beforeDestroy(){//中断请求this.…

网安高级笔记1

html实体编码 HTML实体编码&#xff0c;格式 以&符号开头&#xff0c;以;分号结尾的 HTML 中的预留字符必须被替换为字符实体 在 HTML 中不能使用小于号&#xff08;<&#xff09;和大于号&#xff08;>&#xff09;&#xff0c;这是因为浏览器会误认为它们是…

Python内置函数系统学习(2)——数据转换与计算(详细语法参考 + 参数说明 + 具体示例),详解max()函数实例 | 编程实现当前内存使用情况的监控

才识是岁月的冠冕&#xff0c;正如思念是我们共同的时光。 【Neo4j Python】基于知识图谱的电影问答系统&#xff08;含问题记录与解决&#xff09;附&#xff1a;源代码&#xff08;含Bug解决&#xff09;【Neo4j 知识图谱】图形化数据库基本操作: 创建节点与关系、添加属性…

了解Unity编辑器之组件篇Scripts(六)

Scripts&#xff1a;有Unity提供的一些脚本插件&#xff08;自己新建的脚本也会出现在里面&#xff09; 一、TMPro&#xff1a;有一些与文字显示和排版相关的脚本 1.TextContainer&#xff08;文本容器&#xff09;&#xff1a;TextContainer 是一个内容框&#xff0c;用于定…

5分钟掌握接口自动化测试,4个知识点简单易学!

一. 什么是接口测试 接口测试是一种软件测试方法&#xff0c;用于验证不同软件组件之间的通信接口是否按预期工作。在接口测试中&#xff0c;测试人员会发送请求并检查接收到的响应&#xff0c;以确保接口在不同场景下都能正常工作。 就工具而言&#xff0c;常见的测试工具有…

代码随想录-108-背包问题

目录 前言思路3. 算法实现4. 算法坑点 前言 我在刷卡哥的“代码随想录”&#xff0c;自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。 代码随想录此题链接 思路 前提&#xff0c;当前的物品有i1个&#xff0c;编号为0~i&#xff0c;重量weight和价值value数组如下…

FreeRTOS(软件定时器)

一、什么是定时器 简单可以理解为闹钟&#xff0c;到达指定一段时间后&#xff0c;就会响铃。 STM32 芯片自带硬件定时器&#xff0c;精度较高&#xff0c;达到定时时间后会触发中断&#xff0c;也可以生成 PWM 、输入 捕获、输出比较&#xff0c;等等&#xff0c;功能强大&am…

springMVC--中文乱码处理(新思路--化繁为简)

文章目录 springMVC--中文乱码处理(新思路--化繁为简)编码过滤器自定义中文乱码过滤器举例应用实例1. 创建过滤器springmvc\src\com\web\filter\MyCharacterFilter.java实现思路 2. 配置web.xml完成测试 Spring MVC--过滤器处理中文修改web.xml完成测试 springMVC–中文乱码处理…

Go语言导入本地文件包

Go语言导入本地文件包 ​ 在Go程序中&#xff0c;每一个包通过称为**导入路径&#xff08;import path&#xff09;**的唯一字符串来标识。它们出现在import声明中&#xff0c; 一个导入路径标注一个目录&#xff0c;目录中包含构成包的一个或多个Go源文件。 举例&#xff1a;…

数据库应用:Redis主从复制、哨兵、cluster集群

目录 一、理论 1.Redis高可用 2.Redis主从复制 3.部署Redis主从复制 4.Redis哨兵模式 5.部署Redis哨兵模式 6.Redis集群模式 7.部署Redis集群 二、实验 1.部署Redis主从复制 2.部署Redis哨兵模式 3.部署Redis集群 三、问题 1.开启Redis群集失败 四、总结 一、理…

HTML5+CSS3+JS小实例:翻滚吧乔巴自定义滑块控件

实例:翻滚吧乔巴自定义滑块控件 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" cont…

Docker 安装 Nacos

简介 Nacos 是一个轻量级的服务发现、配置管理和服务管理平台&#xff0c;它支持多种语言&#xff08;Java、Go、Node.js 等&#xff09;和多种协议&#xff08;HTTP、gRPC、DNS 等&#xff09;&#xff0c;能够帮助开发者构建微服务体系结构&#xff0c;简化了应用程序在不同…

入门前端监控

背景 前端监控是指通过一系列手段对Web页面或应用程序进行实时监控和数据采集&#xff0c;以了解页面或应用程序的性能状况、用户行为等等&#xff0c;并及时发现和解决潜在的问题。一个完整的前端监控平台可以包括&#xff1a;数据收集与上报、数据整理与存储、数据展示这里仅…

去重排序2——set

题目描述 输入 个正整数 ​ &#xff0c;按照从大到小的顺序输出不重复的数。 输入格式 第一行一个整数 n 。 第二行 个用空格隔开的正整数 ​ 。 输出格式 每行一个正整数&#xff0c;为从大到小排序后的不重复的数。 样例 #1 样例输入 #1 8 1 3 4 2 2 2 3 1样例输出 #1 4 3…

Linux Mint 21.2 “Victoria “现已可供下载

导读Linux Mint 21.2 “Victoria “发行版今天出现在该项目全球稳定镜像上&#xff0c;这意味着开发者将很快发布官方公告&#xff0c;通知想要下载最新Linux Mint版本的用户。 Linux Mint 21.2从2023年6月21日开始进行公开测试&#xff0c;这给了开发者足够的时间来修复剩余的…

redis(11):springboot中使用redis

1 创建springboot项目 2 创建pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:/…

同样是测试点工,他凭啥薪资比我高?

如果别人在功能测试方面薪资比你高那是因为做得比你好&#xff0c;别人功能测试做的比你好可能有以下几个原因&#xff1a; 测试策略和方法&#xff1a;别人可能采用了更有效的测试策略和方法&#xff0c;能够更全面地覆盖功能的各个方面。他们可能有更深入的测试计划和设计&a…

【云驻共创】CodeArts Repo ---高效代码协同开发之旅

目录 一、代码托管发展史 1.1 第一代 1.2 第二代 1.3 第三代 二、CodeArts Repo 介绍 二、CodeArts Repo 功能架构 2.1 研发协同 2.2 代码管理功能 2.3 代码存储特性 三、CodeArts Repo 技术能力 三、华为云代码托管技术发展历程 四、CodeAr…