首页 > 其他分享 >基于RNN的NLP学习(二)

基于RNN的NLP学习(二)

时间:2024-04-18 10:46:16浏览次数:25  
标签:NLP 基于 OrderedDict RNN deque dict user collections 字典

首先,根据上一节说的,我对学习基于RNN的NLP有了一个大致的规划,现在我将从第一节开始学习:

1. 复习Python基础:

确保你对Python的基础语法、数据结构(如列表、字典、集合)、控制流(如循环、条件语句)、函数和类有扎实的理解。
学习使用Python的标准库,特别是与数据处理相关的库,如re(正则表达式)、collections和itertools。

我假装我已经确保对Python的基础语法、数据结构(如列表、字典、集合)、控制流(如循环、条件语句)、函数和类有扎实的理解。
我在日常生产工作中,经常会用到re库,所以这里也不再赘述,具体关于re的学习,大家可以参考菜鸟教程

所以这节主要学习collections和itertools这两个库:

1. collections库

这个模块实现了一些专门化的容器,提供了对 Python 的通用内建容器 dict、list、set 和 tuple 的补充。

  1. namedtuple() : 一个工厂函数,用来创建元组的子类,子类的字段是有名称的。
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=22)
# Point(x=11, y=22)

  1. deque() : 类似列表的容器,但 append 和 pop 在其两端的速度都很快。
    deque(双端队列)是 collections 模块中的一个容器类型,它支持在两端快速地添加或删除元素。这意味着你可以在队列的头部或尾部进行 append 和 pop 操作。

下面是 deque 的一些基本操作:

append(x):在 deque 的右侧添加一个元素 x。

from collections import deque
d = deque([1, 2, 3])
d.append(4)  # deque([1, 2, 3, 4])

appendleft(x):在 deque 的左侧添加一个元素 x。

d.appendleft(0) # deque([0, 1, 2, 3, 4])

pop():从 deque 的右侧移除并返回一个元素。如果 deque 为空,则引发 IndexError。

d.pop() # 4, deque 现在是 deque([0, 1, 2, 3])

popleft():从 deque 的左侧移除并返回一个元素。如果 deque 为空,则引发 IndexError。

d.popleft() # 0, deque 现在是 deque([1, 2, 3])

deque 特别适合用于需要频繁在两端添加或删除元素的场景,因为它提供了 O(1) 时间复杂度的操作,而列表在这种情况下会有 O(n) 的时间复杂度。这使得 deque 成为实现队列和栈等数据结构的理想选择。


  1. ChainMap : 类似字典的类,用于创建包含多个映射的单个视图。

  1. Counter : 用于计数 hashable 对象的字典子类
from collections import Counter
c = Counter('abracadabra')
# Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})

  1. OrderedDict : 字典的子类,能记住条目被添加进去的顺序。

OrderedDict 是 collections 模块中的一个类,它提供了一个字典的子类,它记住了元素添加的顺序。在 Python 3.7 及以上版本中,所有的字典都是有序的,但是 OrderedDict 仍然存在,因为它提供了一些额外的功能,比如重新排序等。

下面是 OrderedDict 的一些基本用法:

初始化:创建一个空的 OrderedDict。

from collections import OrderedDict
ordered_dict = OrderedDict()

添加元素:与普通字典一样,可以通过键值对添加元素。

ordered_dict['apple'] = 1
ordered_dict['banana'] = 2

顺序维护:OrderedDict 会按照元素添加的顺序维护键的位置。

# 输出:OrderedDict([('apple', 1), ('banana', 2)])
print(ordered_dict)

重新排序:可以使用 move_to_end() 方法将元素移动到字典的开头或结尾。

# 将 'apple' 移动到字典的末尾
ordered_dict.move_to_end('apple')
# 输出:OrderedDict([('banana', 2), ('apple', 1)])
print(ordered_dict)

排序:可以对 OrderedDict 进行排序,排序后的字典会按照指定的顺序排列。

# 按照键进行排序
ordered_dict = OrderedDict(sorted(ordered_dict.items(), key=lambda t: t[0]))

等值判断:OrderedDict 在比较时也会考虑元素的顺序。

# 如果两个OrderedDict的顺序和元素都相同,则它们相等
if ordered_dict == another_ordered_dict:
    print("The dictionaries are equal.")

在 Python 3.7 之前,如果你需要维护字典元素的插入顺序,OrderedDict 是非常有用的。但是,在 Python 3.7 及以后的版本中,普通字典类型 dict 也保证了插入顺序,所以 OrderedDict 的使用频率有所下降。不过,如果你需要利用 OrderedDict 的特定功能,如重新排序等,它仍然是一个有用的工具。


  1. defaultdict : 字典的子类,通过调用用户指定的工厂函数,为键提供默认值。
from collections import defaultdict
d = defaultdict(int)
# defaultdict(<class 'int'>, {})

  1. UserDict : 封装了字典对象,简化了字典子类化

UserDict 是 collections 模块中的一个类,它提供了一个字典对象的包装器。UserDict 是一个方便的基类,当你想要创建你自己的字典子类时,可以使用它。它简化了字典子类的实现,因为你不需要担心所有字典需要的方法,UserDict 已经为你处理了大部分。

下面是 UserDict 的一些基本用法:

  1. 初始化:创建一个空的 UserDict。
from collections import UserDict
user_dict = UserDict()
  1. 使用字典初始化:可以用一个字典来初始化 UserDict。

user_dict = UserDict({'a': 1, 'b': 2})

  1. 访问元素:与普通字典一样,可以通过键来访问元素。

print(user_dict['a']) # 输出:1

  1. 修改元素:可以修改 UserDict 中的元素。

user_dict['a'] = 3

  1. 添加元素:可以向 UserDict 中添加新的键值对。

user_dict['c'] = 4

  1. 删除元素:可以使用 del 关键字删除元素。

del user_dict['a']

  1. 使用 data 属性:UserDict 实际上使用了一个名为 data 的内部字典来存储数据。

print(user_dict.data) # 输出:{'b': 2, 'c': 4}


  1. UserList : 封装了列表对象,简化了列表子类化

UserList 是 collections 模块中的一个类,它提供了一个列表对象的包装器。与 UserDict 类似,UserList 是一个方便的基类,当你想要创建你自己的列表子类时,可以使用它。它简化了列表子类的实现,因为你不需要担心所有列表需要的方法,UserList 已经为你处理了大部分。

下面是 UserList 的一些基本用法:

  1. 初始化:创建一个空的 UserList。
from collections import UserList
user_list = UserList()
  1. 使用列表初始化:可以用一个列表来初始化 UserList。

user_list = UserList([1, 2, 3])

  1. 访问元素:与普通列表一样,可以通过索引来访问元素。

print(user_list[0]) # 输出:1

  1. 修改元素:可以修改 UserList 中的元素。

user_list[0] = 4

  1. 添加元素:可以使用 append() 方法向 UserList 中添加新的元素。

user_list.append(5)

  1. 删除元素:可以使用 remove() 方法删除元素。

user_list.remove(4)

  1. 使用 data 属性:UserList 实际上使用了一个名为 data 的内部列表来存储数据。

print(user_list.data) # 输出:[2, 3, 5]


  1. UserString : 封装了字符串对象,简化了字符串子类化

UserString 是 collections 模块中的一个类,它提供了一个字符串对象的包装器。UserString 是一个方便的基类,当你想要创建你自己的字符串子类时,可以使用它。它简化了字符串子类的实现,因为你不需要担心所有字符串需要的方法,UserString 已经为你处理了大部分。

下面是 UserString 的一些基本用法:

  1. 初始化:创建一个空的 UserString。
from collections import UserString
user_string = UserString()
  1. 使用字符串初始化:可以用一个字符串来初始化 UserString。

user_string = UserString("hello")

  1. 访问字符:与普通字符串一样,可以通过索引来访问字符。

print(user_string[0]) # 输出:h

  1. 修改字符:可以修改 UserString 中的字符。

user_string[0] = 'H'

  1. 切片操作:可以使用切片来获取字符串的子串。

print(user_string[1:4]) # 输出:ell

  1. 使用 data 属性:UserString 实际上使用了一个名为 data 的内部字符串来存储数据。

print(user_string.data) # 输出:Hello


参考资料:

  1. collections官方文档

  2. itertools官方文档

标签:NLP,基于,OrderedDict,RNN,deque,dict,user,collections,字典
From: https://www.cnblogs.com/zjw-lxj/p/18142980

相关文章

  • 一篇文章带你领悟Frida的精髓(基于安卓8.1)
    https://www.freebuf.com/articles/system/190565.html前言前阵子受《Xposed模块编写的那些事》这篇文章的帮助很大,感觉有必要写一篇文章来回馈freebuf社区。现在最火爆的又是frida,该框架从Java层hook到Native层hook无所不能,虽然持久化还是要依靠Xposed和hookzz等开发框架,但是fr......
  • GaussDB(DWS)基于Flink的实时数仓构建
    本文分享自华为云社区《GaussDB(DWS)基于Flink的实时数仓构建》,作者:胡辣汤。大数据时代,厂商对实时数据分析的诉求越来越强烈,数据分析时效从T+1时效趋向于T+0时效,为了给客户提供极速分析查询能力,华为云数仓GaussDB(DWS)基于流处理框架Flink实现了实时数仓构建。在本期《GaussDB(DW......
  • 基于RNN的NLP学习(一)
    目前从事RPA自动化机器人这方面的工作,今天了解到可以通过AI+RPA实现RPA的进阶,能够使RPA工作流程更简单完善,所以从今天开始学习基于RNN的NLP。个人认为要学习基于RNN的NLP,需要以下几个流程:1.复习Python基础:确保你对Python的基础语法、数据结构(如列表、字典、集合)、控制流(如循环......
  • 基于ChatGPT打造安全脚本工具流程
    前言以前想要打造一款自己的工具,想法挺好实际上是难以实现,第一不懂代码的构造,只有一些工具脚本构造思路,第二总是像重复造轮子这种繁琐枯燥工作,抄抄改改搞不清楚逻辑,想打造一款符合自己工作的自定义的脚本工具难度倍增,但是随着AI的兴起极大的改变了我们的生活工作方式,只需利用Chat......
  • Mac(M1)配置基于ARM64的Tensorflow
    以下步骤最好先执行condaconfig--remove-keychannels 删除conda镜像源pipconfigunsetglobal.index-url 删除pip镜像源然后接下来的步骤最好挂上梯子。1.下载miniforge:从https://github.com/conda-forge/miniforge上找到arm64(AppleSilicon)版本进行下载,下一步下一步的......
  • 基于RAM的几何变换——平移
    基于RAM的几何变换——平移一、平移的基本概念  平移的概念很好理解,但是在具体操作中可能会涉及到两个问题:平移量有正数也有负数,涉及到Verilog语法中的有符号数处理平移会导致部分像素超出我们的显示范围,对这部分的像素应当做丢弃处理二、MATLAB实现  实现代码和实验......
  • 基于RAM的几何变换——旋转
    基于RAM的几何变换——旋转一、旋转的基本概念  旋转和镜像不同的地方在于旋转可能会改变图像尺寸的大小,一辐长宽不一样的图片在旋转之后的图幅可能需要一定的裁剪,像width和height一致的图片则不需要考虑这些。实验原理则是很简单的全等三角形和坐标变换。二、MATLAB实现 ......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • NLP自然语言处理—主题模型LDA回归可视化案例:挖掘智能门锁电商评价数据
    全文链接:http://tecdat.cn/?p=2175早在1995年比尔·盖茨就在《未来之路》里说过:未来没有配套智能家居的房子,就是毛坯房。现在人们生活越来越便捷,人们也更加倾向于智能化家居,当你还在纠结“人工智能”安利值不值得吃,最近不少朋友家里又出现智能门锁,相比传统门锁来说,究竟能有多智能......
  • 基于K8s+Docker+Openresty+Lua+SpringCloudAlibaba的高并发秒杀系统——与京东淘宝同
    ​介绍基于K8s+Docker+Openresty+Lua+SpringCloudAlibaba的高并发高性能商品秒杀系统,本系统实测单台(16核32G主频2.2GHz)openresty(nginx)的QPS可高达6w并发,如果您需要应对100w的并发,则需要100w/6w=17台openresty服务器,17台服务器同时接收并处理这100w的并发流量呢?当然是商业......