python实现简单中文词元化、词典构造、时序数据集封装等

news2024/11/9 10:34:49

文章目录

    • 简述
    • 代码
      • 词元化
      • 词典构造
      • 时序数据生成
      • data.TensorDataset生成

简述

中文词元化、删除非中文字符、构建索引词典,以便于为训练提供向量化数据。

待处理文本,以朱自清的《背影》为例,图中是给句子手动换行了,不换也是没问题的。

在这里插入图片描述

代码

词元化

# 词元化,删除标点符号, 仍保持行关系 
def tokenize_lines(txt_path, encoding='utf=8'):  
    with open(txt_path, 'r', encoding=encoding) as f:  
        lines = f.readlines()  
    # 删除中文符号 这里枚举不完善  
    chars_to_remove = (r'[,。?;、:“”:!~()『』「」\\【】\"\[\]➕〈〉//<>()‰\%《》\*\?\-\.…·○01234567890123456789•\n\t abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ—\*\x0c!#\$%&\'+,:\=@\^_]')  
    return [re.sub(chars_to_remove, '', line).strip() for line in lines]

词典构造

这里要注意:
对于同一个语料库,应保证每次加载得到的 word_to_idx_dict、idx_to_word_dict是一样的,这里还添加了0来表示未知词。

# 构建词表 word_to_id, id_to_wordclass Vocab:   
    def __init__(self, tokens, multi_line: bool):  
        self.tokens = tokens  
        # 如果是多行的词元 将二维句子展开到一行  
        if multi_line:  
            word_list = [ch for line in tokens for ch in line]  
        else:  
            word_list = tokens  
  
        # 创建字典添加0 代表未知词  
        self.word_to_idx_dict = {'0': 0}  
        self.idx_to_word_dict = {0: '0'}  
  
        for word in word_list:  
            if word not in self.word_to_idx_dict:  
                word_id = len(self.word_to_idx_dict)  
                self.word_to_idx_dict[word] = word_id  
                self.idx_to_word_dict[word_id] = word  
  
    def __len__(self):  
        return len(self.idx_to_word_dict)  
  
    def word2idx(self, word):  
        return self.word_to_idx_dict.get(word, 0)  
  
    def idx2word(self, idx):  
        return self.idx_to_word_dict.get(idx, '0')  
  
    def save_dict(self, dir_path):  
        with open(dir_path + './idx_to_word_dict.json', 'w', encoding='utf-8') as f:  
            JSON.dump(self.idx_to_word_dict, f, ensure_ascii=False, indent=4)  
        with open(dir_path + './word_to_idx_dict.json', 'w', encoding='utf-8') as f:  
            JSON.dump(self.word_to_idx_dict, f, ensure_ascii=False, indent=4)

另外实现了save_dict(self, dir_path)函数用于保存字典到本地json文件中。
在这里插入图片描述

时序数据生成

使用rnn学习时,需要构建时序数据。

# time_size即序列长度  
def create_random_sequential(corpus, time_size=4):  
    xs_tmp = corpus[:-1]  
    ys_tmp = corpus[1:]  
  
    line_num = len(xs_tmp) // time_size  
    xs = np.zeros((line_num, time_size), dtype=np.int32)  
    ys = np.zeros((line_num, time_size), dtype=np.int32)  
    for i in range(line_num):  
        xs[i] = xs_tmp[i * time_size: (i + 1) * time_size]  
        ys[i] = ys_tmp[i * time_size: (i + 1) * time_size]  
    return xs, ys

data.TensorDataset生成

def make_dataset(corpus, time_size):  
    xs, ys = create_random_sequential(corpus, time_size)  
    xs = torch.tensor(xs)  
    ys = torch.tensor(ys)  
    return data.TensorDataset(xs, ys)

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

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

相关文章

【网络安全】服务基础第一阶段——第二节:网络测试与用户

一、Windows网络测试工具 CMD&#xff08;命令提示符&#xff09;中&#xff0c;ping和tracert是两个非常有用的网络诊断工具 1.1.ping命令 ping命令是Windows和其他操作系统中用于测试主机之间网络连接是否可达的基本命令行工具。它通过发送ICMP&#xff08;Internet Contr…

LLM agentic模式之规划能力(planning)

文章目录 任务分解分解优先方法交替分解方法 多计划选择外部规划器辅助规划反思和改进记忆增强规划评估 2024年2月的综述《 Understanding the planning of LLM agents: A survey》提供了基于LLM的的agent的规划(planning)能力的系统视角&#xff0c;总结了近年来提高规划能力…

如何申请 Midjourney API ,看这篇文章就够了

Midjourney Imagine API 的申请与应用 Midjourney&#xff0c;这一杰出的 AI 绘图工具&#xff0c;凭借输入几个关键字&#xff0c;便能在短短一两分钟内生成极为精美的图像&#xff0c;展现出令人惊叹的创作能力。它以独特的绘画技术在行业中独树一帜&#xff0c;现今在各个领…

墨刀基础篇(一) :6.常用组件(动态组件)

一&#xff1a;动态组件 动态组件是除了文件和矩形之外最重要的一个组件。文本和矩形是一切组件的基础&#xff0c;而动态组件是复杂组件的根本。动态组件就是可以拥有多个状态&#xff0c;每个状态可以放不同的内容&#xff0c;每个状态之间可以互相切换&#xff0c;每个状态…

springboot系列--springboot前置知识

一、spring相关知识 一、spring能干什么 二、spring生态 spring生态覆盖了&#xff1a;web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等等。 官网链接&#xff1a;Spring | Home 二、springboot相关知识 一、springboot作用 Spring Boot makes it easy …

Ansys Rocky在电池制造行业应用

Ansys Rocky在电池制造行业应用 对于电池电极制造的理解 干湿混合应用 砑光应用 微尺度电极干燥应用 更多应用 材料生产 电极和电池生产

prolog 基础 - 关系和属性

首先进入环境&#xff1b; 看一下一开始的提示符是 ?- &#xff0c;现在可以用write语句输出一些东西&#xff1b; 根据资料&#xff0c;在prolog中&#xff0c; 两个对象之间的关系&#xff0c;使用括号表示。比如&#xff0c;jack的朋友是peter&#xff0c;写成friend(ja…

论文笔记:Large Language Models are Zero-Shot Next LocationPredictors

1 intro 下一个地点预测&#xff08;NL&#xff09;包括基于个体历史访问位置来预测其未来的位置。 NL对于应对各种社会挑战至关重要&#xff0c;包括交通管理和优化、疾病传播控制以及灾害响应管理NL 问题已经通过使用马尔可夫模型、基于模式的方法以及最近的深度学习&#x…

突破传统,GCOM80-2NET的创新性边缘计算方式

GCOM80-2NET边缘计算网关&#xff0c;突破传统Modbus协议仅能进行数据读采的限制&#xff0c;直接在设备终端进行复杂的数据点运算&#xff0c;减少冗余数据传输&#xff0c;释放软件人员针对不同Modbus设备协议解析的时间。 GCOM80-2NET&#xff0c;是ZLG致远电子推出的一款高…

OpManager Plus简单说明以及在Linux下的安装

目录 1 简介2 安装2.1 Linux下安装 1 简介 OpManager Plus 属于ManageEngine&#xff0c;是一款商业软件。 ManageEngine OpManager是一款全面的网络监视软件&#xff0c;可为网络管理员提供集成控制台&#xff0c;用于管理路由器&#xff0c;防火墙&#xff0c;服务器&#x…

免费个人网站怎么建立

一、选择免费网站建设平台 有许多免费的网站建设平台可供选择&#xff0c;如WordPress.com 、Wix、Weebly等。这些平台提供了易于使用的界面和模板&#xff0c;能够帮助用户快速创建个人网站博客网站 _ 网址大全 _ 博科趣 - 第2页博客网站大全,博客网址导航,个人独立博客,个人博…

Vue3项目开发——新闻发布管理系统(二)

文章目录 五、项目的目录调整六、系统整体路由设计开发1、系统整体路由分析2、路由配置2.1路由代码解析2.2路由信息设计2.3系统路由信息汇总2.4路由信息配置2.5路由对应Vue组件框架3系统效果五、项目的目录调整 默认生成的src目录结构如下: 这个结构不能满足我们的开发需求,…

Python测试框架之—— pytest介绍与示例

Pytest是一个功能强大且易于使用的Python测试框架&#xff0c;它提供了丰富的功能和灵活的用法&#xff0c;使得编写和运行测试变得简单而高效。 一、Pytest的特点 简单灵活&#xff1a;Pytest的语法简洁清晰&#xff0c;容易上手&#xff0c;并且支持复杂的测试场景。自动发…

为什么制造企业数字化转型需要MES管理系统

制造企业数字化转型需要MES管理系统&#xff0c;这主要源于MES管理系统在提升生产效率、优化资源配置、加强质量控制以及实现数据驱动决策等方面的显著优势。以下是具体的原因分析&#xff1a; 1. 提升生产效率 实时数据采集与分析&#xff1a;MES管理系统能够实时收集生产过程…

【(逆向)PE64是什么意思?】

PE64 是指 64 位的可移植可执行&#xff08;Portable Executable&#xff09;文件格式。在 Windows 操作系统中&#xff0c;PE 文件是一种常见的可执行文件格式。 在逆向工程中&#xff0c;判断一个 PE 文件是否为 64 位通常需要检查其特定的结构和字段。例如&#xff0c;可以…

利用 UrlClickEvents 深入研究网络钓鱼活动

在 Microsoft 365 Defender 中发现了一个新的高级搜索表:UrlClickEvents 图 1 – UrlClickEvents 表 在撰写本文时,此表尚未出现在每个 Office 365 租户中,官方文档中也不包含有关它的信息。快速查看它包含的事件表明,它记录了用户从 Office 应用程序(例如 Outlook 和 Te…

中仕公考怎么样?事业编备考技巧!

距离2024年下半年事业编考试还有两个月的时间&#xff0c;现在开始准备还能抓住机会!事业编考试一定要了解&#xff1a; 一、事业编招考流程 发布公告→注册报名→选岗→交报名费→报名确认→打印准考证→笔试→调剂→面试→体检→录用。 二、事业编报考地址 1.省人事考试网…

VUE3+nest.js前后端部署-服务器linux中部署Node.js环境

一.安装分布式版本管理系统Git (Alibaba Cloud Linux 3/2、CentOS 7.x) sudo yum install git -y 二.使用Git将NVM的源码克隆到本地的~/.nvm目录下&#xff0c;并检查最新版本。 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && gi…

34 增加系统调用(3)

首先是 在GDT中添加 系统调用的内容&#xff1a; 然后是汇编中实现 syscall_hander 然后是使用C语言函数 实现在屏幕上显示字符。 然后是在 任务中调用这个函数。 然后 sys_show 去调用 系统调用。 在进行系统调用前需要 保存现场。 系统调用之后需要 释放现场。 为了保证在系统…

前端宝典十八:高频算法排序之冒泡、插入、选择、归并和快速

前言 十大经典排序算法的 时间复杂度与空间复杂度 比较。 名词解释&#xff1a; n&#xff1a;数据规模&#xff1b;k&#xff1a;桶的个数&#xff1b;In-place: 占用常数内存&#xff0c;不占用额外内存&#xff1b;Out-place: 占用额外内存。 本文主要探讨高频算法排序中…