使用Python编写数据集批量预处理脚本

话不多说,先贴代码

import json
datadir='temp.json'
datatarget='test.json'
rating=0
sum=0
all_review=[] #用于去重
with open(datadir, 'r') as f1:
    #with open('sum.txt','w') as f:
            for line in f1:
              review = json.loads(line)
              temp_text=[review['text']]
              if len(review['media'])!=2 and review['text'] not in all_review and review['media'].find('video')==-1 : #去重,去视频,去纯文字评论
                  uid=str(review['user'])
                  tid=str(review['tweet_id'])
                  text=review['text']
                  all_review.extend(temp_text)
                  picture=review['media']
                  if(len(review['text'])>100):
                      sum+=1
                  i=1
                  l=[]
                  t_str=str(tid)+'_1'
                  t_list=[{"_id":t_str}]
                  l.extend(t_list)
                  for ch in picture: #判断图片数量
                      if ch==',':
                         i+=1
                         t_str=str(tid)+'_'+str(i)
                         t_list=[{"_id":t_str}] #list[dict] 存放图片编号
                         l.extend(t_list)

                  temp_d={'Rating':rating,
                          'UserId':uid,
                          'Text':text,
                          'Photos':l, 
                          'tweet_id':tid,
                  }
                  pic_d={
                      'photo':picture
                  }
                  with open(datatarget, 'a') as f2:
                       json.dump(temp_d,f2)
                       f2.write('\n')
                       json.dump(pic_d,f2)
                       f2.write('\n')
            print(sum)

然后是数据集格式介绍,数据集是json格式,源数据是从推特上爬的推文,处理成了json格式,摘一条放下面.

{"user": 1497469538526543873, "tweet_id": 1507470350900203522, "time": "2022-03-25 21:31:53", "text": "RT @Gadhwara27: #UkraineRussianWar #Ukraine #UkraineWar somewhere in Ukraine, UA soldiers captured Russian Grad. https://t.co/meJNTUeMZl", "media": "['http://pbs.twimg.com/ext_tw_video_thumb/1507397882306961408/pu/img/PyQVTaa_Z0UQ5n5p.jpg']"}

可以看到,包含用户编号,推特编号,时间,文本,图像链接啥的

我们需要的是文本,用户编号,推特编号及图像链接,放一条处理好的数据如下:

{"Rating": 0, "UserId": "2738363938", "Text": "RT @Sputnik_Not: LEGO releases set recreating famous Ukraine war scene https://t.co/ZYJvLJgvYL", "Photos": [{"_id": "1507470361042067456_1"}], "tweet_id": "1507470361042067456"}
{"photo": "['http://pbs.twimg.com/media/FOnvSyQXMAgLk9T.jpg']"}

这样就基本是我需要的格式了,只用做一些文本的格式处理(去@啥的)然后根据图片链接把图片下载下来再根据图片id命名,最后打上标签就行了。

接下来仔细看一下代码里面重要的部分:

with open(datadir, 'r') as f1:
            for line in f1:
              review = json.loads(line)

首先是逐行json读入

if len(review['media'])!=2 and review['text'] not in all_review and review['media'].find('video')==-1 : #去重,去视频,去纯文字评论

然后按我的需求进行了一些处理

                  uid=str(review['user'])
                  tid=str(review['tweet_id'])
                  text=review['text']
                  picture=review['media']

提一些必要的信息

                  t_str=str(tid)+'_1'
                  t_list=[{"_id":t_str}]
                  l.extend(t_list)
                  for ch in picture: #判断图片数量
                      if ch==',':
                         i+=1
                         t_str=str(tid)+'_'+str(i)
                         t_list=[{"_id":t_str}] #list[dict] 存放图片编号
                         l.extend(t_list)

根据图片数量和tid自动生成图片id(tid不会重复,可以用作主键)

                  temp_d={'Rating':rating,
                          'UserId':uid,
                          'Text':text,
                          'Photos':l, 
                          'tweet_id':tid,
                  }
                  pic_d={
                      'photo':picture
                  }

根据需求封装dict

                  with open(datatarget, 'a') as f2:
                       json.dump(temp_d,f2)
                       f2.write('\n')
                       json.dump(pic_d,f2)
                       f2.write('\n')

格式化写入,搞定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值