用 python3 處理文本資料集__python

來源:互聯網
上載者:User

要進行機器學習,先要有資料。資料集處理是機器學習的基礎。本文將介紹如何利用 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 格式輸出的任務就完成了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.