【tensorflow2.0】35.nlp实战之数据分析与处理

    技术2026-02-26  5

        由于这个项目内容过长,所以我们将它分为三部分,第一部分是数据分析与处理。THUCNews是根据新浪新闻RSS订阅频道2005~2011年间的历史数据筛选过滤生成,包含74万篇新闻文档(2.19 GB),均为UTF-8纯文本格式。我们在原始新浪新闻分类体系的基础上,重新整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐。

    #首先导入相应的包 import pandas as pd import numpy as np from gensim.models import Word2Vec import tensorflow as tf #通过pandas读取数据集,训练集50000条,验证集5000条,测试集10000条,可通过shape函数来查看 train = pd.read_csv('./cnews/train.tsv',sep='\t',header=None,names=['label','content']) val = pd.read_csv('./cnews/dev.tsv',sep='\t',header=None,names=['label','content']) test = pd.read_csv('./cnews/test.tsv',sep='\t',header=None,names=['label','content']) #将数据通过lcut函数生成一个list,通过join连成字符串 import jieba def content_cut(x): x = jieba.lcut(x) x = " ".join(x) return x #然后分别对训练,测试,验证集使用我们刚才定义的函数 train['content'] = train['content'].map(lambda x: content_cut(x)) val['content'] = val['content'].map(lambda x: content_cut(x)) test['content'] = test['content'].map(lambda x: content_cut(x)) #将三者堆叠(第一个维度) df = pd.concat([train,val,test],axis=0) #split() 通过指定分隔符对字符串进行切片 df['content_len'] = df['content'].map(lambda x:len(x.split(" "))) #求取‘content_len’数列第80%分位的数值 np.percentile(df['content_len'].values,80) #数据分析 import matplotlib.pyplot as plt import numpy as np #绘制出所有的新闻词条的长度,并且标记处占比90%和98%的平行于x轴的线 plt.figure(figsize=(20,10)) plt.plot(df['content_len'].tolist(),marker='*',markerfacecolor='red') plt.axhline(y=np.mean(df['content_len'].tolist()),color="black",) plt.axhline(y=np.percentile(df['content_len'].values,90),color="peru") plt.axhline(y=np.percentile(df['content_len'].values,98),color="orange")

    import matplotlib.pyplot as plt import numpy as np #设置字体 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei'] count_class = train['label'].value_counts() plt.figure(figsize=(20,8)) class_bar = plt.bar(x=count_class.index, height=count_class.tolist(),width=0.4,color='lightcoral') #x,y轴字体大小 plt.xticks(fontsize=20) plt.yticks(fontsize=20) #绘制各类别样本数量柱状图 for bar in class_bar: height = bar.get_height() plt.text(bar.get_x() + bar.get_width() / 2, height+1, str(height), ha="center", va="bottom",fontsize=20) plt.ylabel("Sample Count",fontsize=25) plt.xlabel("类别名称",fontsize=25)

    Processed: 0.013, SQL: 9