ゼロベースのエントリNLPニューステキスト分類_タスク2

ゼロベースのエントリNLPニューステキスト分類_タスク2

Taks2で行われる主なことは、ニュースデータの配信法を調査して理解することです。ここでは主にコードを再現して説明します。
1.サードパーティのモジュールをインポートする

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from collections import Counter     # python中自带的计数器

2.トレーニングセットを読みます。ここで、トレーニングセット全体をインポートしました

train_df = pd.read_csv(r'D:\Users\Felixteng\Documents\Pycharm Files\Nlp\data\train_set.csv', sep='\t')
train_df.head()

ここに画像の説明を挿入
データは主に「テキスト」と「ラベル」の2つの部分で構成されていることがわかります。テキストはスペースで区切られます。

3.文の長さの分析

'''
数据中每行句子的字符使用空格进行隔开,所以可以直接统计单次的个数来得到每个句子的长度
%pylab inline 是jupyternotebook中用于调试的的魔法函数,pycharm中用回plt.show()即可
'''
train_df['text_len'] = train_df['text'].apply(lambda x: len(x.split(' ')))   # text数据按空格分割后计数
print(train_df['text_len'].describe())  # 对每个句子的长度做统计性描述

ここに画像の説明を挿入

データテキストが長く、各文は平均で907文字で構成され、最短の文の長さは2、最長の文の長さは57921であることがわかります。

4.文章の長さのヒストグラムを描く

plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
sns.distplot(train_df['text_len'], axlabel='Text char count', kde=False, bins=200)

ここに画像の説明を挿入
5.データセットのカテゴリの分布統計を実行し、特にニュースの種類ごとにサンプル数をカウントする

train_df['label'].value_counts().plot(kind='bar')
plt.xlabel('category')

ここに画像の説明を挿入
データセットのカテゴリが不均一に分布していることがわかります。トレーニングセットのテクノロジーニュースが最も多く(ほぼ4W)、株式ニュースがそれに続き、コンステレーションニュース(1K未満)が最も少ないです
。データセット内のタグ間の対応する関係は次のとおりです
{'科技': 0、「株式」:1、「スポーツ」:2、「エンターテイメント」:3、「時事」:4、「社会」:5、「教育」:6、
「金融」:7、「家具」:8 'ゲーム':9、 'プロパティ':10、 'ファッション':11、 '宝くじ':12、 '星座':13}

6.各キャラクターの出現回数をカウントするキャラクター分布統計

# all_lines = ' '.join(list(train_df['text']))    # 将所有text用空格连接起来
# word_count = Counter(all_lines.split(" "))
# word_count = sorted(word_count.items(), key=lambda d: d[1], reverse=True)

コンピューターが原因で、メモリ不足のエラー:MemoryErrorを報告しました。pycharmの実行メモリを増やしましたが、それでも解決できません。

7.句読点を逆にする

train_df['text_unique'] = train_df['text'].apply(lambda x: ' '.join(list(set(x.split(' ')))))
'''
set()函数表示创建一个集合,特点是集合内不会有重复的元素
text_unique可以理解成一句话中所有不重复的字符用空格连接而成的单元句子
'''
all_lines = ' '.join(list(train_df['text_unique']))     # 这里把所有去重后的句子用空格连接
word_count = Counter(all_lines.split(' '))  # 去重以后不报内存不足的错误了
'''
Counter()函数返回的是一个字典,包括了元素及其出现的次数
'''
word_count = sorted(word_count.items(), key=lambda d: int(d[1]), reverse=True)
'''
sorted(iterable, key, reverse)
    iterable:可迭代对象;
    key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,
        指定可迭代对象中的一个元素进行排序,这里取字典中的第二个元素,也就是出现次数来进行排序;
    reverse:排序规则,True-降序/False-升序(默认)
'''
print(word_count[0])
print(word_count[1])
print(word_count[2])
print(word_count[3])

文字3750、900、648はカバー率が高く、句読点である可能性が高いことがわかりました。

8.各タイプのニュースで最も頻繁に出現する文字を数え、最初にデータセットをラベルに従って分類し、ラベルを分類するための関数を作成します

def select_label(df, num):
    df_num = df[df['label'] == num]
    return df_num

たとえば、統計技術のニュースで最も頻繁に出現するキャラクターを取り上げます

df_0 = select_label(train_df, 0)
all_lines_0 = ' '.join(list(df_0['text']))
word_count_0 = Counter(all_lines_0.split(' '))
word_count_0 = sorted(word_count_0.items(), key=lambda d: d[1], reverse=True)
print(word_count_0[0])

ここに画像の説明を挿入
3750の文字が科学技術で最も多く登場していることがわかります。

1つずつトラバースするのが面倒な場合は、データをラベルで分類する関数を作成し、ラムダを使用してトラバースすることができます。

def top_count(x):
    all_lines = ' '.join(list(x))
    word_count = Counter(all_lines.split(' '))
    word_count = sorted(word_count.items(), key=lambda d: int(d[1]), reverse=True)
    return word_count[0]

このタスクは、主にニューステキストデータを探索し、機械学習を使用して次のテキスト分類タスクの基礎を築くことです。

おすすめ

転載: blog.csdn.net/Baby1601tree/article/details/107528829