NLP中常用的utils

这是我在自己做实验中总结的一些工具方法,对于我这种菜鸟来说,经常不记得这些方法,可以拿出来使用使用.后续会持续更新.

1. 数据持久化成pkl格式\json格式,保存和获取pkl格式文件

  • 导包
import pickle as pkl
import codecs
  • 保存数据成pkl格式
def sava_pkl(path, obj, obj_name):
    print(f'save {obj_name} in {path}')
    with codecs.open(path, 'wb') as f:
        pkl.dump(obj, f)
  • 获取pkl格式数据
def load_pkl(path, obj_name):
    print(f'load {obj_name} in {path}')
    with codecs.open(path,'rb') as f:
        data = pkl.load(f)
    return data
  • 将数据保存成JSON格式
def save_json(path,data):
    # 先将字典对象转换成可读写的字符串
    item=json.dumps(data,ensure_ascii=False,indent=2)
    with open(path,"w",encoding='utf-8')as f:
        f.write(item)

ensure_ascii默认是True,则就会将中文保存成十六进制格式

  • 将数据处理成字典,然后再保存成JSON格式
    for i in range(len(sen_lis)):
        item = dict()
        item["guid"] = i
        item["text_a"] = sen_lis[i]
        item["label"] = label_lis[i]
        res.append(item)
    print("all of %d instances" % (i + 1))
    out_path=os.path.join(out_path,'ChnSenticrop'+index+'.json')
    with open(out_path, "w",encoding='utf-8') as jfile:
        json.dump(res, jfile, ensure_ascii=False)

2.读取CSV和JSON格式的数据

  • 导包
import json
import csv
import codecs
  • 读取CSV格式的数据
def load_csv(file):
    data_list = []

    with codecs.open(file, encoding='utf-8') as f:
        reader = csv.DictReader(f)
        for line in reader:
            data = list(line.values())
            data_list.append(data)
    return data_list
  • 读取JSON格式的数据
def load_json(file):
    data_list = []

    with codecs.open(file, encoding='utf-8') as f:
        for line in f:
            json_data = json.load(line)
            data = list(json_data.values())
            data_list.append(data)
    return data_list

或者:

def load_json(file):
    assert os.path.exists(file),'这个路径不存在'
    data_list=[]
    with codecs.open(file,encoding='utf-8')as f:
        json_data=json.load(f)
        for data in json_data:
            data_list.append(data)
    return data_list

3.拼接成完整的路径,并且判断这个路径是否存在,如果不存在就创建路径

  • 导包
import os
  • 拼接路径,一般在保存文件的时候要用
data_path='data/out'
train_data_path=os.path.join(data_path,'triain.pkl')
if not os.path.exists(train_data_path):
      os.makedirs(train_data_path)

4.tqdm和enumerate一起使用,可视化进度

from tqdm import tqdm
# 首先讲数据用tqdm包裹
epoch_iterator=tqdm(data_loader,desc='Iteration')
for batch_idx, batch in enumerate(epoch_iterator):
               ..............

注意导入包一定是:from tqdm import tqdm

5.读取文件路径

  • 读取文件夹的一级目录
import os
dirs=os.listdir('-文件夹名称-')
  • 读取多级目录
def get_Filelist(path):
    for root, dirs, files in os.walk(path):
        # root 表示当前正在访问的文件夹路径
        # dirs 表示该文件夹下的子目录名list
        # files 表示该文件夹下的文件list
        print('root-dir',root)
        print('sub-dirs',dirs)
        print('files:',files)
        print("=====================")
    return dirs

6.同时打乱2个集合的顺序

def shuffle2list(a: list, b: list):
    # shuffle two list with same rule, you can also use sklearn.utils.shuffle package
    c = list(zip(a, b))
    random.shuffle(c)
    a[:], b[:] = zip(*c)
    return a, b

7.lambda表达式

  • lamdba表达式其实就是一种函数
    例如:
def f(x):
    return x*x
# 这个表达式就和上面的表示式是一个意思,其中第一个x表示函数的输入,冒号后面表示函数体
g=lambda x:x*x

print(g(5))输出的结果就是25

  • lambda也可以输入两个数据
h=lambda x,y:x*y

print(h(5,4))输出的结果为20

  • lambda还可以放在函数中使用
# 有的时候函数y=a*x*x+b*x+c,其中abc和x表示的意义不一样,这个时候就可以使用lambda表达式
def quadratic(a,b,c):
    return lambda x:a*x*x+b*x+c
# 此时表示的就是a=1,b=-1,c=2的一元二次方程
f=quadratic(1,-1,2)

print(f(5))输出的结果为22

8.数据打包

  • zip()函数
    有三个list
    test1=["ccc","aaa","ddd","yyy","xxx"]
    test2=(200,100,400,800,500)
    test3="daceb"
    希望他们能列一起输出,即输出("ccc",200,d)这样的格式,这个时候就需要使用zip()函数将三个list封装到一起.见代码:
test1=["ccc","aaa","ddd","yyy","xxx"]
test2=(200,100,400,800,500)
test3="daceb"
feature=zip(test1,test2,test3)
for i in feature:
    print(i)

输出结果:

('ccc', 200, 'd')
('aaa', 100, 'a')
('ddd', 400, 'c')
('yyy', 800, 'e')
('xxx', 500, 'b')
  • 使用字典打包数据
    有的时候要传递数据,如果数据比较多,不是很好传递到函数中,这个时候就可以使用字典打包数据,见代码:
test1=["ccc","aaa","ddd","yyy","xxx"]
test2=(200,100,400,800,500)
test3="daceb"
feature={'test1':test1,'test2':test2,'test3':test3}
# 这个时候就可以使用字典直接调用其中的数据
print(feature['test1'])

输出结果:

['ccc', 'aaa', 'ddd', 'yyy', 'xxx']
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容