上市公司新闻标题情感识别在线实验闯关

第1关 

#1.读取“新闻训练数据集.xlsx”,其中第1列为情感分类(积极、中性、消极),

#  2-5列依次为标题、来源、爬取时间、网址

#2.对标题进行分词处理,每一条标题分词后是元素为词的列表,则

#  所有标题分词后的数据为一个嵌套列表trainX_txt。

#  同时对情感分类进行标签值化处理:积极-0,中性-1,消极-2,用一个列表Y来表示。

#3.读取“新闻测试数据.xlsx”,该数据集与训练集相比,没有情感分类字段,为待预测

#  同步骤2,对测试集中的标题进行分词,分词后的结果为testX_txt

def return_values():

    import jieba#引入结巴分词

    import pandas as pd

    jieba.setLogLevel(jieba.logging.INFO)

    #1.新闻标题训练数据集操作

    rawdata=pd.read_excel('新闻训练数据集.xlsx')

    Y=[]

    trainX_txt=[]

    for i in range(len(rawdata)):

        #1.1.对标题进行分词处理

        text=rawdata.iloc[i,1]

        word_list=list(jieba.cut(text,cut_all=False))

        trainX_txt.append(word_list)

        #1.2.对情感分类进行标签值化处理

        if rawdata.iloc[i,0]=='积极':

            Y.append(0)

        elif rawdata.iloc[i,0]=='中性':

            Y.append(1)

        else:

            Y.append(2)

    #2.新闻标题测试数据集操作

    rawdata_test=pd.read_excel('新闻测试数据.xlsx')

    testX_txt=[]

    for i in range(len(rawdata_test)):

        #2.1.对标题进行分词处理

        text=rawdata_test.iloc[i,0]

        word_list=list(jieba.cut(text,cut_all=False))

        testX_txt.append(word_list)

    return (trainX_txt,Y,testX_txt)

第2关 

#读取停用词文件“stop_words.txt”,该文件为单列无表头的文件

#对上一关获得的分词后的训练集trainX_txt和测试集testX_txt,

#去掉停用词和数值,同时对每条标题(词列表),变成字符串(词之间用空格分开),

# 最后返回结果,同时也返回上一关的Y值(r[1])

# def return_values():

#     import step10_1

#     r=step10_1.return_values()

   

   

   

#     return (trainX_txt,r[1],testX_txt)

def rm_stop_words(word_list):

    stop_word=open('stop_words.txt', 'r').read().splitlines()

    for i in range(len(word_list))[::-1]:

        if word_list[i] in stop_word:

            word_list.pop(i)

        elif word_list[i].isdigit():#去数值

            word_list.pop(i)

    return word_list

def return_values():

    import step10_1

    r=step10_1.return_values()

    trainX_txt=[]#整合后的训练数据

    testX_txt=[]#整合后的测试数据

    for i in range(len(r[0])):

        t=rm_stop_words(r[0][i])

        text=' '.join(t)

        trainX_txt.append(text)

    for i in range(len(r[2])):

        t=rm_stop_words(r[2][i])

        text=' '.join(t)

        testX_txt.append(text)

    return (trainX_txt,r[1],testX_txt)

第3关 

#1.基于上一关的结果trainX_txt,Y,testX_txt,利用机器学习包的内置函数,

#  计算逆向词频,并构造特征集,对训练数据集按80%训练、20%测试随机划分,

#  构建支持向量机模型,返回模型准确率rv和预测准确率rs。

#2.最后,利用训练好的模型,对testX_txt进行预测,返回测试集的情感分类标签值。

def return_values():

    from sklearn.model_selection import train_test_split

    from sklearn.feature_extraction.text import CountVectorizer

    from sklearn.feature_extraction.text import TfidfTransformer

    import pandas as pd

    import step10_2

    r=step10_2.return_values()

    X, Y, testX_txt = r  # 确保 X, Y, testX_txt 被正确赋值

    count_vect = CountVectorizer() #对CountVectorizer创建对象count_vect

    x_train_counts = count_vect.fit_transform(X) #用来对数据进行处理,表示成n-gram的形式

    tfidf_transformer = TfidfTransformer()#对TfidfTransformer创建对象tfidf_transformer

    X = tfidf_transformer.fit_transform(x_train_counts)

   

    x_train, x_test, y_train, y_test = train_test_split (X, Y, random_state = 0)

    from sklearn.svm import LinearSVC

    clf_svm = LinearSVC()

    clf_svm.fit(x_train, y_train)

    rv=clf_svm.score(x_train, y_train)

    rs=clf_svm.score(x_test,y_test)

    test_y=[]#测试数据的情感分类预测

    for i in range(len(testX_txt)):

        text1=testX_txt[i]

        pre=clf_svm.predict(count_vect.transform([text1]))

        test_y.append(pre[0])

   

    return (rv,rs,test_y)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值