NLP07-朴素贝叶斯问句分类之数据集加载(1/3)

news2025/2/27 15:45:46

一、概述

数据集加载(Dataset Loading)是机器学习、自然语言处理(NLP)等领域中的一个重要步骤,指的是将外部数据(如文件、数据库、网络接口等)加载到程序中,以便进行后续处理、分析或模型训练。数据集加载通常是数据预处理的第一步,之后可能还会进行数据清洗、转换等处理。

(一)目的

数据集加载的主要目的是获取数据,将存储在外部来源(如文本文件、CSV文件、数据库、API等)中的信息导入到程序中,转换为适合处理的格式。

(二)步骤

(1)选择数据源

  • 数据可以来自文件系统(如 .csv、.txt 文件)或远程数据库/API。
  • 选择合适的数据源和格式(例如,CSV 格式适合结构化数据,JSON 格式适合层级数据)。

(2)加载数据

  使用适当的库和函数将数据从文件或数据库中加载到内存中。常见的库包括:

  • pandas:适用于 CSV、Excel、JSON 等格式的数据。(详见 库学习02-Pandas库)
  • open():适用于文本文件。 (本文使用)
  • sqlite3:适用于从 SQLite 数据库加载数据。

(3)数据转换和格式化

  • 数据加载后,可能需要将数据转换成合适的格式。例如,转换字符串为数值、日期格式化等。
  • 可能需要将数据从列表转换为 DataFrame(例如使用 pandas),或者从字典转换为列表等。

二、数据集加载

目的:从一个文件夹中读取所有文本文件,提取每个文件的标签(从文件名中获取),然后将文件内容进行分词处理,并保存并返回为训练数据和标签。

(一)从文件夹读取文件列表

数据存储在不同的文本文件中,每个文件名中包含类别标签(如“question_1.txt"表示类别 1)。

这里定义一个读取文件列表的函数,作用是 遍历指定路径(source_path)下的所有文件,并返回两个列表:一个是文件名列表 file_name,另一个是文件路径列表 file_path_list。(os.walk函数的用法详见库学习03-os库(持续更新))

def get_file_list(source_path):
    # 从文件夹读取到文件列表
    file_path_list = []
    file_name = []
    walk = os.walk(source_path)
    # print(walk)
    for root, dirs, files in walk:
        for name in files:
            filepath = os.path.join(root, name)
            file_name.append(name)
            file_path_list.append(filepath)
            # print(name)
            # print(filepath)
            # print("---")
    return file_name, file_path_list

(二) 遍历文件列表,获取数据

2.1 从文件名中用正则获取到标签

dir_name, file_name = os.path.split(file_item)
label_str = re.sub(r'\D', "", file_name)
  1. os.path.split 函数的用法详见库学习03-os库(持续更新) 
  2. label_str = re.sub(r'\D', "", file_name)

     提取标签:这一行通过正则表达式从文件名中提取出标签。具体来说:

  • r'\D' 是一个正则表达式,表示“非数字字符”。
  • re.sub(r'\D', "", file_name) 会将 file_name 中所有非数字字符替换为空字符串,从而提取出文件名中的数字部分。
  • 例如,如果 file_name = "file12.txt",则label_str = "12"

2.2 遍历每一行标签获取数据

        if label_str.isnumeric(): # 判断是否是数字
            label = int(label_str)
            with (open(file_item, "r", encoding="utf-8")) as file:
                lines = file.readlines()
                for line in lines:
                    # print(line)
                    # 分词
                    word_list = list(jieba.cut(line))
                    train_x.append(" ".join(word_list))
                    train_y.append(label)

代码重点解析:

文件操作块:

with open(file_item, "r", encoding="utf-8") as file:
    # 在这里可以操作文件,读取文件内容等
  •  with 是 Python 中的上下文管理器(Context Manager)。它通常用于管理需要显式清理的资源,比如文件、数据库连接、网络请求等。一大好处是它会自动管理资源,无需你显式地调用 file.close() 来关闭文件,减少了因忘记关闭文件而导致的资源泄露问题。
  •  as file:as file 是 with 语句中的一个关键部分,它为文件对象起了个别名 file。你可以在 with 语句块内部使用 file 来操作文件。

jieba分词:

word_list = list(jieba.cut(line))
train_x.append(" ".join(word_list))
train_y.append(label)
  • jieba分词详见 jieba分词
  • train_x存储每行的分词结果(列表形式)
  • train_y存储该行对应的问句类别(如“question_1.txt"表示类别 1)

最终 train_x 和 train_y 大概长这样:

一个分词后的问句对应一个类别。

数据加载模块完整代码:

import os
import re
import jieba
from common import constant


def load_train_data():
    train_x = []
    train_y = []
    question_dir = os.path.join(constant.DATA_DIR, "question")
    # 从文件夹读取文件列表
    file_name_list, file_path_list = get_file_list(question_dir)
    # 遍历文件列表
    for file_item in file_path_list:
        # 从文件名中用正则获取到标签
        # 拆分路径获取文件名
        dir_name, file_name = os.path.split(file_item)
        label_str = re.sub(r'\D', "", file_name)
        # 读取每一行作为训练数据
        if label_str.isnumeric():
            label = int(label_str)
            with (open(file_item, "r", encoding="utf-8")) as file:
                lines = file.readlines()
                for line in lines:
                    # print(line)
                    # 分词
                    word_list = list(jieba.cut(line))
                    train_x.append(" ".join(word_list))
                    train_y.append(label)

    return train_x, train_y


def get_file_list(source_path):
    # 从文件夹读取到文件列表
    file_path_list = []
    file_name = []
    walk = os.walk(source_path)
    # print(walk)
    for root, dirs, files in walk:
        for name in files:
            filepath = os.path.join(root, name)
            file_name.append(name)
            file_path_list.append(filepath)
            # print(name)
            # print(filepath)
            # print("---")
    return file_name, file_path_list


if __name__ == "__main__":
    ""
    # question_dir = os.path.join(constant.DATA_DIR, "question")
    # get_file_list(question_dir)
    load_train_data()

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

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

相关文章

Rk3568驱动开发_点亮led灯(手动挡)_5

1.MMU简介 完成虚拟空间到物理空间的映射 内存保护设立存储器的访问权限,设置虚拟存储空间的缓冲特性 stm32点灯可以直接操作寄存器,但是linux点灯不能直接访问寄存器,linux会使能mmu linux中操作的都是虚拟地址,要想访问物理地…

LangChain构建行业知识库实践:从架构设计到生产部署全指南

文章目录 引言:行业知识库的进化挑战一、系统架构设计1.1 核心组件拓扑1.2 模块化设计原则二、关键技术实现2.1 文档预处理流水线2.2 混合检索增强三、领域适配优化3.1 医学知识图谱融合3.2 检索结果重排序算法四、生产环境部署4.1 性能优化方案4.2 安全防护体系五、评估与调优…

Vscode编辑器:解读文件结构、插件的导入导出、常用快捷键配置技巧及其常见问题的解决方案

一、文件与文件夹结构 1.文件结构 文件名作用.babelrc配置 Babel 编译选项,指定代码转译规则。.editorconfig定义项目代码格式规范,如缩进风格和空格数量等。.eslintignore列出 ESLint 忽略的文件或文件夹。.eslintrc.js配置 ESLint 的规则和插件。.gi…

线性回归 (Linear Regression)案例分析1

广告费用与产品销量 工欲善其事必先利其器数据分析1. 检查缺失值、异常值3. 散点图查看特征、响应相关性3. 热力图查看特征、响应相关性 特征工程1、导入必要工具包2、读取数据3、数据标准化4、保存特征工程的结果到文件,供机器学习模型使用 模型选择读取数据数据准…

uni-app集成sqlite

Sqlite SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中&am…

【HTML— 快速入门】HTML 基础

准备工作 vscode下载 百度网盘 Subline Text 下载 Sublime Text下载 百度网盘 vscode 下载 Sublime Text 是一款轻量好用的文本编辑器,我们在写前端代码时,使用 Sublime Text 打开比使用记事本打开,得到的代码体验更好,比 vscode…

【MATLAB中的图像数据结构】

MATLAB中的图像数据结构 目录 MATLAB中的图像数据结构目标 :知识点 :1. 图像的存储方式 :2. 图像的颜色空间 :3. 图像的像素操作 : 示例代码 :1. 读取和显示图像 :2. 查看图像信息 :…

在线抽奖系统——项目介绍

目录 项目介绍 页面预览 需求分析 管理员登录注册 人员模块 奖品模块 活动模块 抽奖模块 系统设计 系统架构 项目环境 数据库设计 安全设计 完整代码:项目完整代码/在线抽奖系统/lottery-system Echo/project - 码云 - 开源中国 项目介绍 利用 MySQ…

JavaScript 系列之:Ajax、Promise、Axios

前言 同步:会阻塞。同步代码按照编写的顺序逐行依次执行,只有当前的任务完成后,才会执行下一个任务。 异步:异步代码不会阻塞后续代码的执行。当遇到异步操作时,JavaScript 会将该操作放入任务队列中,继续…

鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar)

鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar) 1、效果展示2、下载 DevEco Studio3、创建项目4、新建页面模板5、更改应用信息6、新建以下页面7、Index.ets8、真机运行9、图片资源文件 1、效果展示 2、下载 DevEco Studio 访问官网根据自己的版本…

FreeRTOS动态任务和静态任务创建

一.动态任务创建 1.搭建任务框架 去task.c中将任务参数复制到main中 然后将const去掉,它会限制参数类型,任务大小、任务优先级、任务句柄需要去宏定义,任务句柄是指针类型要取地址 vTaskStartScheduler(); //开启任务调度,.c…

QT:Graphics View的坐标系介绍

在 Qt 的 Graphics View 框架中,存在三种不同的坐标系,分别是 物品坐标系(Item Coordinates)、场景坐标系(Scene Coordinates) 和 视图坐标系(View Coordinates)。这三种坐标系在图形…

C# httpclient 和 Flurl.Http 的测试

关于C#调用接口或Post,Flurl封装了httpclient, CSDN有哥们提供了一个公网的测试网站,可以测试Post调用,我写了2个函数,测试httpclient和Flurl使用Post: async 和 await 是成对使用的,为了接受web异步返回的数据,winfor…

精选案例展 | 智己汽车—全栈可观测驱动智能化运营与成本优化

本案例为“观测先锋 2024 可观测平台创新应用案例大赛”精选案例,同时荣获IT168“2024技术卓越奖评选-年度创新解决方案”奖。 项目背景 近年来,中国汽车行业进入转型升级阶段,智能网联技术成为行业发展的核心。车联网、自动驾驶等技术的加速…

阿里云可观测全面拥抱 OpenTelemetry 社区

作者:古琦 在云计算、微服务、容器化等技术重塑 IT 架构的今天,系统复杂度呈指数级增长。在此背景下,开源可观测性技术已从辅助工具演变为现代 IT 系统的"数字神经系统",为企业提供故障预警、性能优化和成本治理的全方…

山大软院ai导论实验之采用BP神经网络分类MNIST数据集

目录 实验代码 实验内容 实验代码 import matplotlib.pyplot as plt from matplotlib import font_manager import torch from torch.utils.data import DataLoader import torchvision from torchvision import transforms# 数据预处理 transform transforms.Compose([tra…

threeJs+vue 轻松切换几何体贴图

嗨,我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。 想象一下,手头上正好有个在线3D家具商店,用户不仅可以看到产品的静态图片,还能实时更换沙发的颜色或材质,获得真实的购物体验。…

【python】01_写在前面的话

又是爆肝干文的日子,继上次说要出一期Python新手入门教程系列文章后,就在不停地整理和码字,终于是把【基础入门】这一块给写出来了。 不积跬步无以至千里,不积小流无以成江海,一个一个板块的知识积累,早晚你…

跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)

飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案: 一、背景痛点与解决方案 在技术文档创作中,数学公式的跨平台渲染一直存在三大痛点: 飞书云文档:原生KaTeX渲染与导出功能存在语法限制微软Word:Math…

深入理解 并查集LRUCaChe

并查集&LRUCaChe 个人主页:顾漂亮 文章专栏:Java数据结构 1.并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后根据一定规律将归于同一组元素的…