一、pickle的用法,以及为什么要用pickle
pickle函数的使用直接来说就是序列化和反序列化。可以简单理解为保存某种格式到txt并加密,在需要使用时再解密并得到原始数据的序列模式。
(1)pickle函数的用法:
一般来说最为常用的就是pickle.dump()和pickle.load()函数。对应的是序列化和反序列化过程,也可以理解为存档(保存原始数据结构)和读档(将所保存的文件返回原始数据结构)
两种函数在使用时都需要先打开txt文件再进行操作。使用前先导入pickle包。
①pickle.dump()示例:
dictionary_obj = r'dictionary_obj.txt'
with open(dictionary_obj,'wb') as f:
pickle.dump(dictionary,f)
②pickle.load()示例:
vector_path = "F:/pyProject/NativeNLP/data/dictionary_obj.txt"
f = open (vector_path,"rb")
vector_dict = pickle.load (f)
f.close()
其中的wb,rb代表的是打开方式(以二进制格式打开可写,以二进制格式打开可读,还有其他w、r、w+等等方式),因为pickle函数存储的文件是以二进制保存的,所以需要注意。
(2)使用pickle函数的意义:
便于存储。序列化过程是从文本信息到二进制数据流的转换,而反序列化时就是转换为原始的数据流。二进制数据对于数据的存储更为便利。
除此以外,借助pickle函数可以进字符串、列表、字典等数据的存储,将这些具有序列信息的数据进行保存和存储。
二、python类和实例的属性、方法的作用
从个人理解来说,类就好比是一个框架,里面有各种各样的属性和规则。
拿学生这个类来说,他代表了一个抽象的概念,我们可以根据需要进行填充。比如学生性别、年龄、班级这些都属于“学生”这个类的属性,而方法就是我们使用这个类的渠道。
比如想要知道这个学生的姓名,现实生活中我们需要进行查询,而这个查询过程,在类中就是借助方法如get_name函数实现的。
类中会有相应的函数和属性,调用时使用"self."即可调用,同一类的多个对象共享方法和属性,但是不同实例化对象间并不共享。
实例的意义就是将这个“学生”的类进行实际化,去填充。比如学生李明,男,18岁,3班等就是我们在实例化过程中进行填充的,也可以不进行赋值,因为存在默认值。
借助类和实例属性、方法,可以让我们更好的理清逻辑,后期进行代码维护。
三、rasa添加组件的方法
在初步了解rasa框架后,明白了各自模块的意义。rasa运行过程是按照pipeline一步步进行的,pipeline中规定了执行组件的顺序并设置了一些类内变量的初始值。
而在各个组件中均有自己的类和方法,并标明了自己运行所需要的和所提供的部分。
想要添加一个新的组件,步骤如下:
①在相应分类的文件夹下建立文件:如分类、标记、数据等各种文件夹,根据实际组件分类进行选择。
②在rasa框架中的registry文件进行注册:注册分为两部分
- 在component_classes中添加新建组件中的类名
- 添加from 文件夹各级目录名.组件名 import 新建组件中的类名
③在配置文件中构建新的pipeline或者修改原有文件中的pipeline
- pipeline的顺序根据实际执行进行编写,先写的就是先执行的。例如分词应该处于变化成词向量之前等等。
④进行测试
四、python字典的使用
字典的格式为: d = {key1 : value1, key2 : value2 }
①访问字典:dict[key1]
如果不存在这样的key值会报错:KeyError: 'key1’
②修改字典项:
dict['key1'] = 8 # 更新
dict['key3'] = "value3" # 添加
③删除字典项:
del dict[key1] # 删除键是'key1'的条目
dict.clear() # 清空字典所有条目
del dict # 删除字典
④匹配项:
dict.has_key(key)
如果键在字典dict里返回true,否则返回false
dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值(最为常用,查key值并返回相应的value值)
例如:
temp=self.vector_dict[token.text] 就是返回vector_dict字典中key值为token.text相应值的value值