DataFountain疫情情緒分析(一)---數據預處理

一,數據讀取

1.下載到手裏面的數據如果直接使用pandas或者numpy讀取會出現各類編碼問題,使用各種方法測試均失效,解決辦法:先使用excel內置工具將文檔轉爲csv-utf8格式,再使用pandas讀取相關數據。

2.相對於numpy的loadtxt,更推薦使用pandas的readcsv,少了相當一部分麻煩。

 

二,數據預處理

1.獲取的文本中,對於情感標籤官方規定只有-1,0,1,但是拿到手裏面的數據有部分錯誤信息,比如標記值標出了2,或者沒標記,這裏我們簡單認爲這些數據失效,全部歸爲未標記數據。

2.此外,由於使用pandas讀取時未指定列類型(即使指定也會因爲部分錯誤數據報類型無法轉換錯誤),所以後面需要將類型轉化爲float型,這裏我使用float32類型。

3.由於處理的是中文,所以需要jieba分詞工具進行分詞處理,對於分詞的結果可以加入到原始datafram中,代碼使用

arr['分詞內容'] = arr.微博中文內容.apply(lambda x:" ".join(jieba.cut(x)))

即可對每一行的中文進行分詞。

注:分詞之前,需要將arr轉爲str類型,否則jieba會報錯,這是由於讀取的數據默認爲float型。

注:這裏之所以使用空格分割詞彙,是爲了便於後面的tokenizer使用,因爲英文單詞即以空格分割。

官方訓練數據集給了兩部分,一部分有標籤,一部分沒標籤,這可以用到半監督的技巧,由於目前只希望做出一個baseline,所以暫時只利用未標記數據集構建字典。

Label_list = list(Train_Labeled_Data['分詞結果'])
Label_list.extend(list(Train_Unlabeled_Data['分詞結果']))

三,轉化爲詞向量

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
tokenizer = Tokenizer(num_words=10000) #實例化分詞器,取最常見的前一萬單詞
tokenizer.fit_on_texts(arr['分詞內容']) #對每一行分詞
sequences = tokenizer.text_to_sequences(arr['分詞內容']) #生成不定長數字序列
sequences = pad_sequences(arr['分詞內容'],maxlen=100) #統一數字序列長度,缺補多刪

至此,我們對於數據的預處理完畢,獲取了每一句評論的字典序列,以及轉化爲float32的情感類標。

實際上,Embedding層也屬於預處理的一部分,由於Keras內置嵌入層,這部分放到神經網絡架構部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章