用 python3 处理文本数据集

要进行机器学习,先要有数据。数据集处理是机器学习的基础。本文将介绍如何利用 python 自带的 csv 模块进行一些简单的数据集处理。


任务

将指定的 semeval 文件按照规定格式处理成 .csv 文件。

seminal 文件预览如下图:

这里写图片描述

每一行数据集由三个 part 组成——序号、情感和文本;part 与 part 之间由 tab 键分开,每一个 part 内部文本由空格分开。
要求用 python 实现的 .csv 文件效果如下:

这里写图片描述


算法

解决这个问题的算法是相对简单的。首先我们输出最上方的表头,然后依次读入每行的内容,先按 \t 分割三个 part,然后对中间情感的 part 再分别按空格和冒号分割,取到后面的值。最后按要求输出即可。


代码实现

对于新手来说,解决这个问题的代码实现还是有一定难度的,需要我们对 python3 的文件读写、字符串处理和 csv模块有一定的了解。

首先先看一下最终的代码:

import csv

#print the header:
with open("new.csv", "w") as csvFile:
    fileheader = ["id", "text", 'all', 'anger', 'disgust', 'fear', \
                  'joy', 'sad', 'surprise']
    writer = csv.writer(csvFile)
    writer.writerow(fileheader)

with open('/path/semeval', 'r') as inputFile:
    currentLineContent = inputFile.readline()
    while(currentLineContent):
        part = currentLineContent.split('\t')

    #split in 3 parts:
        num = part[0]
        emo = part[1]
        text = part[2]

    #spilt different emotions:
        emo = emo.split(' ')
        csvall = emo[0].split(':')[1]
        anger = emo[1].split(':')[1]
        disgust = emo[2].split(':')[1]
        fear = emo[3].split(':')[1]
        joy = emo[4].split(':')[1]
        sad = emo[5].split(':')[1]
        surprise = emo[6].split(':')[1]

        with open("new.csv", "a") as csvFile:
            dict_writer = csv.DictWriter(csvFile, fileheader)
            dict_writer.writerow({"id":num, "text":text, 'all':csvall,\
                                  'anger':anger, 'disgust':disgust, 'fear':\
                                  fear, 'joy':joy, 'sad':sad, 'surprise':\
                                  surprise})
        currentLineContent = inputFile.readline()


读取文件

我们首先来看读取文件的部分:

with open('/Users/youzunzhi/Desktop/semeval', 'r') as inputFile:
    currentLineContent = inputFile.readline()
    while(currentLineContent):
        ...
        currentLineContent = inputFile.readline()

python 自带的 open()函数可以打开一个文件对象:
f = open('/path/file.txt', 'r')
其中'r' 表示用读文件的模式打开。此外还可以用:

  • 'w':写文件模式
  • 'a':在原文件后面添加的模式

以这样的方式打开文件成功后,文件对象会一直占用操作系统的资源,所以要用close()方法关闭这个文件:
f.close()

由于这样的方法过于繁琐还容易被忘记,python 提供了with语句来自动帮我们调用close()方法:

with open('/path/file.txt', 'r') as f:
    pass

打开文件后,就可以对文件进行操作了。如果文件很小,可以用read()直接读取,但如果文件很大的话内存就会直接爆掉了,所以这里我们用readline()方法一行一行的读取,直到读取结束,while的条件就会为 False了。


字符串处理

再来看字符串处理的部分:

    part = currentLineContent.split('\t')

    #split in 3 parts:
        num = part[0]
        emo = part[1]
        text = part[2]

    #spilt different emotions:
        emo = emo.split(' ')
        csvall = emo[0].split(':')[1]
        anger = emo[1].split(':')[1]
        disgust = emo[2].split(':')[1]
        fear = emo[3].split(':')[1]
        joy = emo[4].split(':')[1]
        sad = emo[5].split(':')[1]
        surprise = emo[6].split(':')[1]

python3 提供了 split()函数来分割字符串。使用后函数将会返回一个list,所以在按 \t 分割后我们先分别将得到的列表中的三个元素分别赋给 num,emo,和 text。然后继续按空格和冒号分割,最后分别取出分割后的列表的第二个值赋给各个情绪。


csv文本输出

最后我们利用 python3 自带的csv模块将数据集按要求输出成 .csv文件。

import csv

#print the header:
with open("new.csv", "w") as csvFile:
    fileheader = ["id", "text", 'all', 'anger', 'disgust', 'fear', \
                  'joy', 'sad', 'surprise']
    writer = csv.writer(csvFile)
    writer.writerow(fileheader)
...
with open("new.csv", "a") as csvFile:
    dict_writer = csv.DictWriter(csvFile, fileheader)
    dict_writer.writerow({"id":num, "text":text, 'all':csvall,\
                                  'anger':anger, 'disgust':disgust, 'fear':\
                                  fear, 'joy':joy, 'sad':sad, 'surprise':\
                                  surprise})

首先我们用csv中的writer函数中的writerow方法输出表头。

writer.writerow(fileheader)

对于后面的值,虽然也可以按顺序输出,但是这里我们再介绍一种DictWriter函数,它以词典的方式按照指定的 key 输出值,而不用担心顺序问题。

dict_writer = csv.DictWriter(csvFile, fileheader)

DictWriter函数也有writerow方法,参数是一个词典。

dict_writer.writerow({"id":num, "text":text, 'all':csvall,\
                                  'anger':anger, 'disgust':disgust, 'fear':\
                                  fear, 'joy':joy, 'sad':sad, 'surprise':\
                                  surprise})

至此,用 python3 处理文本数据集,并用 csv 格式输出的任务就完成了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值