2024-09-18|閱讀時間 ‧ 約 22 分鐘

AI說書 - 從0開始 - 182 | 資料清洗

我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。


整理目前手上有的素材:


原始資料中包含了一些不需要的雜訊,有鑑於此,需要展開資料清洗,以下先來看看資料格式:

!mkdir -p /content/model/dataset/ 
!mkdir -p /content/model/model/
!mkdir -p /content/model/logs/

import pandas as pd

df = pd.read_csv('/content/twcs/twcs.csv')
print(df.head())


結果如下:


接著展開資料清洗並存檔:

tweets = df['text'].dropna().tolist()
df_tweets = pd.DataFrame(tweets, columns=['text'])
df_tweets.to_csv('tweets.csv', index = False, encoding = 'utf-8')

formatted_length = "{:,}".format(len(df_tweets))
print(formatted_length)

import re

def filter_tweet(tweet):
return re.sub(r'[^a-z\s\']', '', tweet.lower())

filtered_tweets = [filter_tweet(tweet) for tweet in tweets]

f = 30
filtered_tweets = [tweet for tweet in filtered_tweets if len(tweet.split()) > f]

formatted_length = "{:,}".format(len(filtered_tweets))
print(formatted_length)

import csv

with open('/content/model/dataset/processed_tweets.csv', 'w', newline = '') as file:
writer = csv.writer(file)
for tweet in filtered_tweets:
writer.writerow([tweet])


程式說明如下:

  1. re.sub(pattern, repl, string):
  • re.subre 模組中的一個函數,用於替換字符串中的匹配部分
  • pattern:要匹配的正則表達式模式
  • repl:替換匹配部分的字符串
  • string:要處理的字符串
  1. r'[^a-z\s\']':
  • ^:在字符類(character class)中,表示取反,即匹配不在方括號內的字符
  • a-z:表示所有小寫字母
  • \s:表示任何空白字符(空格、製表符、換行符等)
  • \':表示單引號字符
  • 綜合起來,[^a-z\s\'] 表示匹配所有不是小寫字母、空白字符或單引號的字符
  1. '':
  • 這是 repl,表示用於替換的字符串。這裡是一個空字符串,表示將匹配到的字符替換為空,即刪除匹配到的字符
  1. 總結起來,這段程式碼的作用是將 tweet 中的文本轉換為小寫,並刪除所有不是小寫字母、空白字符或單引號的字符


如果想要看一下目前整理好的資料,可以使用以下程式:

from itertools import islice

with open('/content/model/dataset/processed_tweets.csv', 'r') as file:
reader = csv.reader(file)
# Use islice from itertools to only get the first 5 lines
for row in islice(reader, 5):
print(row[0])


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.