spllit_json.py代码分析

2021SC@SDUSC

系列文章目录

(一)面向特定问题的开源算法管理和推荐

(二)论文阅读上

(三)sent2vec

(四)BERT for Keyphrase Extraction

(五)config.py 代码分析

(六)model.py(上)

(七)论文 - 补充理解

(八)数据处理之prepro_utils.py

(九)preprocess.py代码分析

(十)preprocess.py代码分析-下

(十一)spllit_json.py代码分析

(十二)prepro_utils.py代码分析

(十三)jsonify_multidata.py + Constant.py

(十四)loader_utils.py + word2Vec补充学习

(十五)Keyphrase Chunking - bert2chunk_dataloader.py分析

(十六)Encoder-Decoder

(十七)bert2joint_dataloader.py

(十八)模型用到的方法总结整理 + 个人总结


将json数据拆分为训练、测试和验证数据

在sklearn里面,有一个函数可以解决这个问题,自动选出训练集,训练标签,测试集,测试标签。
sklearn.model_selection.train_test_split
作用:将数组或矩阵拆分为随机训练子和测试子集

参数

*array:具有相同长度的,带索引的序列,可以是lists, numpy arrays, scipy-sparse matrices 和dataframes ,代表要划分的矩阵(第一个是特征矩阵,第二个是标签矩阵)
test_size(default=None):当是float类型时,代表测试集的比例,是int类型时,代表测试集的个数,是None时,取1-训练集的比例(总数-训练集的个数),训练集参数也为None时,默认为0.25
train_size(default=None):同上,不过这个代表的是训练集,不要弄混了!
random_state(default=None):如果为int类型,则是一个随机种子,如果是RandomState
实例,则random_state就是随机数生成器,如果为None,则生成器取np.random。
shuffle(default=False):是否要在拆分数据前随机排列数据,如果这个参数是False,则stratify
参数必须是None。 stratify(default=None):如果不是None,则数据以分层方式拆分,使用此作为类标签。
随机种子的概念比较重要,简而言之,可以看作一个给随机数的ID,如果调用了这个ID的随机数,无论怎么运行,结果都是一样的。(可以保证不同时刻运行的随机数是同一序列)
返回值 返回的是拆分之后的序列,是一个list,长度是原有数据的二倍。 可以直接赋值来取得训练集和测试集,顺序分别是train_x,
test_x, train_y, test_y,不要记混了。

相关代码:

"""Split the json data in train, test and validation data"""

from sklearn.model_selection import train_test_split
import os

读入 json 文件

with open("data.json") as f:
    lines = f.readlines()

将数据分为训练、测试和验证

train, test = train_test_split(lines, test_size=0.3)
val, test = train_test_split(test, test_size=0.5)

将相应的数据存入对应的数据文件夹中

# path to target folder
data_path = "../data/prepro_dataset/multidata/"
os.makedirs(data_path, exist_ok=True)

# write to train, test and validation files
with open(data_path + "wikinews.train.json", "w") as f:
    for line in train:
        f.write(line)

with open(data_path + "wikinews.test.json", "w") as f:
    for line in test:
        f.write(line)

with open(data_path + "wikinews.dev.json", "w") as f:
    for line in val:
        f.write(line)

preprocess.sh文件

shell命令写到一个文件夹当中,便于执行

export DATA_PATH=../data

# preprocess openkp or kp20k
python preprocess.py --dataset_class openkp \
--source_dataset_dir $DATA_PATH/dataset \
--output_path $DATA_PATH/prepro_dataset \

shell命令

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。

运行 Shell 脚本有两种方法:

1、作为可执行程序
注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/sh test.sh
/bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

简单实用示例:

echo "It is a test"
echo "\"It is a test\""
#!/bin/sh
read name 
echo "$name It is a test"
echo -e "OK! \n" # -e 开启转义
echo "It is a test"

shell常见命令

  • ls 功能:显示文件和目录的信息

ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 例如: .file 文件名称前面带小数点为隐藏文件。
ls -l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ls -lh 显示文件的大小,以容易理解的格式印出文件大小
(例如 1K 234M2G) ls -lt 显示文件,按照修改时间排序

  • cd命令 功能:改名目录

cd dir 切换到当前目录下的dir目录
cd / 切换到根目录
cd … 切换到到上一级目录
cd …/… 切换到上二级目录
cd ~ 切换到用户目录,比如是root用户,则切换到/root下

Shell printf 命令

printf 命令的语法:

printf format-string [arguments…]
参数说明:
format-string: 为格式控制字符串
arguments: 为参数列表。

$ echo "Hello, Shell"
Hello, Shell
$ printf "Hello, Shell\n"
Hello, Shell
$

详细具体示例如下:

$ printf "a string, no processing:<%s>\n" "A\nB"
a string, no processing:<A\nB>

$ printf "a string, no processing:<%b>\n" "A\nB"
a string, no processing:<A
B>

$ printf "www.runoob.com \a"

Shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

另外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。例如:

cd /bin
if test -e ./notFile -o -e ./bash
then
    echo '至少有一个文件存在!'
else
    echo '两个文件都不存在'
fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值