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内置嵌入层,这部分放到神经网络架构部分。

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