首页 PaddleNLP 帖子详情
PaddleNLP一种更好的异常处理办法
收藏
快速回复
PaddleNLP 问答学习资料 1123 4
PaddleNLP一种更好的异常处理办法
收藏
快速回复
PaddleNLP 问答学习资料 1123 4

通常情况下,PaddleNLP读取函数会长这样:

# 数据ID,用户ID,商品ID,评论时间戳,评论标题,评论内容,评分
def read(data_path):
    with open(data_path, 'r', encoding='utf-8') as in_f:
        next(in_f)
        for line in in_f:
            line = line.strip('\n')
            split_array = [i.start() for i in re.finditer(',', line)]
            id = line[:split_array[0]]
            comment_title = line[split_array[3] + 1:split_array[4]]
            comment = line[split_array[4] + 2:split_array[-2]]
            label = line[split_array[-1] + 1:]
            yield {'text': comment_title  +' '+ comment, 'label': str(int(label.split('.')[0])-1), 'qid': id}

会经常遇到某行少列等异常情况,处理很麻烦,现在有更好的办法来处理:

def read(pd_data):
    for index, item in pd_data.iterrows():       
        yield {'text_a': item['text_a'], 'label': label_id_dict[item['label']]}


BQ_train = pd.read_csv('train/BQ/train', sep="\t", header=None,  error_bad_lines=False)

 

使用pandas来读取数据,其中error_bad_lines=False,可以自动忽略错误行。

 

 
0
收藏
回复
全部评论(4)
时间顺序
JavaRoom
#2 回复于2021-12

可参考我的项目:https://aistudio.baidu.com/aistudio/projectdetail/2411372?contributionType=1

0
回复
十进制到二进制
#3 回复于2021-12

弱弱给大佬补充一下,之前有用这个处理过某行的编码形式不同导致的错误,一样有用。error_bad_lines=False 就是跳过报错行。但是还是要慎用~ 因为可能数据读取时候有多个不同的错误,编码问题就是可以解决的,不一定要跳过,会少很多数据。

当然感谢大佬普及~

0
回复
JavaRoom
#4 回复于2021-12
弱弱给大佬补充一下,之前有用这个处理过某行的编码形式不同导致的错误,一样有用。error_bad_lines=False 就是跳过报错行。但是还是要慎用~ 因为可能数据读取时候有多个不同的错误,编码问题就是可以解决的,不一定要跳过,会少很多数据。 当然感谢大佬普及~
展开

说得对,不过真的懒得处理了,有时候空值或者什么的。

0
回复
JavaRoom
#5 回复于2021-12
弱弱给大佬补充一下,之前有用这个处理过某行的编码形式不同导致的错误,一样有用。error_bad_lines=False 就是跳过报错行。但是还是要慎用~ 因为可能数据读取时候有多个不同的错误,编码问题就是可以解决的,不一定要跳过,会少很多数据。 当然感谢大佬普及~
展开

编码应该有其他办法吧

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户