Keras学习(六)-imdb电影影评数据处理(自然语言处理)

1.处理流程

Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第1张图片

  • 建立token字典:因为深度学习模型是无法处理文字的,必须将文字对应成可以计算的数字,所以需要将“影评文字”对应成为“数字列表”建立一一对应关系,本训练中提取最常用的前2000个高频词语进行建立token字典,因为最常用的词语对情感分析是最为重要的。同时为保持所用影评的“数字列表”的长度都是统一的(放入模型中的参数必须规格统一),采取取长补短法,短的在前面填0,长的截取前面的元素。
    Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第2张图片
    Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第3张图片
  • 将“数字列表”转化为“向量列表”,因为数字列表无法显示出各个词语之间的相互联系,故转化为向量之后,便能够建立起各个词语之间的联系,相似度近的便靠的更近。
    Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第4张图片
  • 最终将向量列表送入深度学习模型进行训练和预测。

2.数据下载,解压

import urllib.request
import os
import tarfile  #导入压缩模块,用于解压下载好的文件

url="http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz"
filepath="data/aclImdb_v1.tar.gz"
if not os.path.isfile(filepath):
    result=urllib.request.urlretrieve(url,filepath)
    print('downloaded:',result)

if not os.path.exists("data/aclImdb"): #如果文件没有解压,便对下载好的压缩包进行解压
    tfile = tarfile.open("data/aclImdb_v1.tar.gz", 'r:gz')
    result=tfile.extractall('data/')

3.导入运行库

from keras.datasets import imdb
from keras.preprocessing import sequence #用于进行取长补短操作,将长度统一设定为100
from keras.preprocessing.text import Tokenizer #用于建立token字典

4.数据准备

#利用正则去除无用信息
import re
def rm_tags(text): #利用正则将html中的标签去除
    re_tag = re.compile(r'<[^>]+>')
    return re_tag.sub('', text)

#建立函数划分下载好的数据,分成正面和负面信息
import os
def read_files(filetype): #创建函数用于读取设定格式的imdb信息
    path = "data/aclImdb/"
    file_list=[]

    positive_path=path + filetype+"/pos/"
    for f in os.listdir(positive_path):
        file_list+=[positive_path+f]
    
    negative_path=path + filetype+"/neg/"
    for f in os.listdir(negative_path):
        file_list+=[negative_path+f]
        
    print('read',filetype, 'files:',len(file_list))
       
    all_labels = ([1] * 12500 + [0] * 12500) 
    
    all_texts  = []
    for fi in file_list:
        with open(fi,encoding='utf8') as file_input:
            all_texts += [rm_tags(" ".join(file_input.readlines()))]
            
    return all_labels,all_texts
y_train,train_text=read_files("train")
y_test,test_text=read_files("test")

Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第5张图片
Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第6张图片

  • 整理后的数据Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第7张图片

5.建立token字典

token = Tokenizer(num_words=2000) #建立一个有2000个单词的字典
token.fit_on_texts(train_text) #读取所有的影评,按照单词出现的频数进行排序,取前2000个形成字典
  • 查看读取了多少文章
    在这里插入图片描述
  • 查看统计后的index和数据对应情况
    Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第8张图片

6.将文章转换为数字列表

x_train_seq = token.texts_to_sequences(train_text) #将训练和测试的文章转换为数字列表,以便以后进行计算
x_test_seq  = token.texts_to_sequences(test_text)

Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第9张图片

7.进行“取长补短”操作

x_train = sequence.pad_sequences(x_train_seq, maxlen=100)#利用方法进行取长补短操作
x_test  = sequence.pad_sequences(x_test_seq,  maxlen=100)

Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第10张图片

8.数据预处理操作总览

Keras学习(六)-imdb电影影评数据处理(自然语言处理)_第11张图片

你可能感兴趣的:(Keras)