import pandas as pd
df = pd.read_csv("../data/Clothing Reviews.csv")
print(df.info())
df['Review Text'] = df['Review Text'].astype(str)
x_train = df['Review Text']
y_train = df['Rating']
from tensorflow.keras.preprocessing.text import Tokenizer
# 创建词典的索引,默认词典大小20000
dict_size = 20000
tokenizer = Tokenizer(num_words=dict_size)
# jieba: 停用词,标点符号,词性.....
tokenizer.fit_on_texts(x_train)
print(len(tokenizer.word_index), tokenizer.index_word)
# 把评论的文本转化序列编码
x_train_tokenized = tokenizer.texts_to_sequences(x_train)
print(x_train_tokenized)
for v in x_train_tokenized[:10]:
print(v, len(v))
# 可以通过可视化方式展示评论的长度
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
matplotlib.use('TkAgg')
word_per_comment = [len(comment) for comment in x_train_tokenized]
plt.hist(word_per_comment, bins=np.arange(0, 200, 10))
plt.show()
# 通过指定长度,把不等长list转化为等长
from tensorflow.keras.preprocessing.sequence import pad_sequences
max_comment_length = 120
x_train = pad_sequences(x_train_tokenized, maxlen=max_comment_length)
for v in x_train[:10]:
print(v, len(v))
逐行解读这段代码。
import pandas as pd
引入了pandas
库,并以pd
为别名。
df = pd.read_csv("../data/Clothing Reviews.csv")
使用pandas的read_csv
函数读取一个CSV文件,并将其保存到变量df
中。
print(df.info())
打印数据框df
的信息,包括列名、非空值数量和数据类型。
RangeIndex: 23486 entries, 0 to 23485
Data columns (total 11 columns):
Column Non-Null Count Dtype
0 Unnamed: 0 23486 non-null int64
1 Clothing ID 23486 non-null int64
2 Age 23486 non-null int64
3 Title 19676 non-null object
4 Review Text 22641 non-null object
5 Rating 23486 non-null int64
6 Recommended IND 23486 non-null int64
7 Positive Feedback Count 23486 non-null int64
8 Division Name 23472 non-null object
9 Department Name 23472 non-null object
10 Class Name 23472 non-null object
df['Review Text'] = df['Review Text'].astype(str)
将数据框df
中的Review Text
列的数据类型转换为字符串。
x_train = df['Review Text']
y_train = df['Rating']
将Review Text
列分配给x_train
,将Rating
列分配给y_train
。
from tensorflow.keras.preprocessing.text import Tokenizer
从tensorflow.keras.preprocessing.text
模块导入Tokenizer
类。
dict_size = 20000
tokenizer = Tokenizer(num_words=dict_size)
设置词典大小为20,000,并创建一个Tokenizer
对象。
tokenizer.fit_on_texts(x_train)
在x_train
上调用fit_on_texts
方法,这样tokenizer
就可以根据x_train
中的文本构建词典。
print(len(tokenizer.word_index), tokenizer.index_word)
打印词典中的词数量和词到索引的映射。
x_train_tokenized = tokenizer.texts_to_sequences(x_train)
使用texts_to_sequences
方法将x_train
中的文本转化为整数序列,并保存到x_train_tokenized
。
print(x_train_tokenized)
打印转化后的整数序列。
for v in x_train_tokenized[:10]:
print(v, len(v))
打印x_train_tokenized
中前10个序列及其长度。
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
导入了matplotlib.pyplot
,matplotlib
和numpy
库。
matplotlib.use('TkAgg')
设置matplotlib
使用的后端为TkAgg
。
word_per_comment = [len(comment) for comment in x_train_tokenized]
计算每个评论的词数,并保存到word_per_comment
列表中。
plt.hist(word_per_comment, bins=np.arange(0, 200, 10))
绘制一个直方图,显示评论的词数分布。直方图的分箱范围是0到200,每10个单位一个分箱。
plt.show()
显示上面绘制的直方图。
from tensorflow.keras.preprocessing.sequence import pad_sequences
从tensorflow.keras.preprocessing.sequence
模块导入pad_sequences
函数。
max_comment_length = 120
设置评论的最大长度为120。
x_train = pad_sequences(x_train_tokenized, maxlen=max_comment_length)
使用pad_sequences
函数将x_train_tokenized
中的序列填充或截断到长度为120。
for v in x_train[:10]:
print(v, len(v))
打印填充或截断后的前10个序列及其长度。
print('ok')
打印ok
,表示代码运行完毕。
总之,这段代码的主要目的是从CSV文件中读取文本评论,然后使用Tokenizer
将文本转化为整数序列,并对这些序列进行填充或截断,以确保它们都有相同的长度。