十二个一创作文本——文本自然语言分析

实验要求

整理大家的作业数据十二个一的文艺创作&十二个一的文艺创作拓展,运用NLP技术(自然语言处理)对其进行分析,完成一篇图文结合的分析报告,特别是要分别对十二个“一”有关的文本分别进行统计。

实验过程

实验对象

“一”

这里因为统计上的原因只选取了十二个“一”中的四个,整理相关的文本进行统计:
A:
在这里插入图片描述
G:

J:

K:

文本

整理的文本链接截图:
因为后面在处理文本分析数据的时候遇到一些问题,加上同学们的创作,形式不统一,选取自然语言处理工具时未考虑到这些因素,只筛选出25位同学的文本,本来想用爬虫来爬取文字,但是因为文章写作形式的多样性,这里也只是按照四个“一”,分别一条条手工整理的。

(文档截图)

实验方法

这里我想对每个“一”,不同的文本,用自然语言处理的方法来获取文本的情感倾向,并提取每位同学对每个"一"创作文本的关键字

NLP库选择

1、在文本情感分析上,我选择了使用百度开放的自然语言处理API——情感倾向分析接口:

返回的值有:sentiment 表示情感极性分类结果,0:负向,1:中性,2:正向
confidence float 表示分类的置信度,取值范围[0,1]
positive_prob float 表示属于积极类别的概率 ,取值范围[0,1]
negative_prob 表示属于消极类别的概率,取值范围[0,1]
为了清楚的比较他们的情感倾向,加上后期预处理的效果,我选取了positive_prob这个值,作为统计作图的主要值

百度AI文档

2、提取关键词
提取关键词用了python的textrank4zh库:
TextRank算法可以用来从文本中提取关键词和摘要(重要的句子)。TextRank4ZH是针对中文文本的TextRank算法的python算法实现。
原理:
将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。
每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成:
w1,w2,w3,w4,w5,…,wn
[w1,w2,…,wk]、[w2,w3,…,wk+1]、[w3,w4,…,wk+2]等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。
基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。
textrank4zh

代码

程序主要代码:
情感倾向分析+存入excel文档:

def get_sentiment_result(text):
    """
    利用情感倾向分析API来获取返回数据
    :param text: 输入文本
    :return response: 返回的响应
    """
    if text == '':
        return ''
    # 请求接口
    url = 'https://aip.baidubce.com/oauth/2.0/token'
    # 需要先获取一个 token
    client_id = 'GvgwGxi2t86rayjpqdeLqSG6'
    client_secret = 'zTz8rX9iXlg8PZ48ri8jz0Rs4Yhc6OGY'
    params = {
        'grant_type': 'client_credentials',
        'client_id': client_id,
        'client_secret': client_secret
    }
    headers = {'Content-Type': 'application/json; charset=UTF-8'}
    response = requests.post(url=url, params=params, headers=headers).json()
    access_token = response['access_token']
    print(access_token)

    # 通用版情绪识别接口
    url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify'
    # 定制版情绪识别接口
    # url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify_custom'
    # 使用 token 调用情感倾向分析接口
    params = {
        'access_token': access_token
    }
    payload = json.dumps({
        'text': text
    })
    headers = {'Content-Type': 'application/json; charset=UTF-8'}
    response = requests.post(url=url, params=params, data=payload, headers=headers).json()
    return response
labels =[]
def getMotion(txt):
    if txt=='':
        return ''
    access_token='24.b6101218ff542921d72bac0014b46795.2592000.1580745381.282335-18177220'
    url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify'
    params = {
        'access_token': access_token
    }
    payload = json.dumps({
        'text': txt
    })
    headers = {'Content-Type': 'application/json; charset=UTF-8'}
    response = requests.post(url=url, params=params, data=payload, headers=headers).json()
    ##a1 = response['items'][0]['positive_prob']
    ##return a1      ##response['sentiment']

    if ('items' not in response):
            return 'null'
    else:
        return response['items'][0]['positive_prob']
    ##return response

def getTxtpositive(filepath):
    sentiments=[]
    f=open(filepath)
    list=f.readlines()
    print(list)
    count=2
    for i in list:
        result=getMotion(i)       ##积极性情感分析
        sentiments.append(result)
        sheet1.cell(row=count, column=2).value = result
        count=count+1
    wb.save('./十二个一文本分析/K_文本分析结果.xlsx')
    return sentiments

关键词提取+存入excel文档:

def get_key_words(text, num=3):
    """提取关键词"""
    tr4w = TextRank4Keyword()
    tr4w.analyze(text, lower=True)
    key_words = tr4w.get_keywords(num)
    '''
    if(key_words==''):
        return ['null','null','null']
    else:
    '''
    return [item.word for item in key_words]

def getTxtKeywords(filepath):
    keywords=[]
    f=open(filepath)
    list=f.readlines()
    ##print(list)
    count=2
    for i in list:
        print(i)
        result=get_key_words(i)       ##关键词提取
        print(result)
        for j in range(len(result)):
            sheet1.cell(row=count, column=3+j).value = result[j]
        count=count+1
        keywords.append(result)
    wb.save('./十二个一文本分析/K_文本分析结果.xlsx')
    return keywords

结果展现

文本数据整理

在用文本分析得过程,本来想多做几个“一”,但是因为出现了下面这样得情况:
积极概率的值出现了空值,调试了很久才发现是调用百度API的时候,请求的过于频繁,出现错误,这样就导致这些空值,我又另写代码,单独求。。。。

最终整理数据结果如下:
A:

G:

J:

K:

对比结果:

前期实验数据整理

为了增加实验的对比性,我们将之前做过的十二个 一 ”大五人格“实验数据,将其中的四个实验对象得”一“挑选出来。

实验数据说明:
实验时按照大五人格理论评价对十二"一"得主观感受,按照大五人格得分类,进行判别:数据0为最小,10为最大。

将上面表格得数据进一步处理,计算平均评分值:

可视化呈现

A:

J: G: 放进一个图中对比看效果更加:

大五人格数据可视化:

关键词(文字云可视化):

对比分析

整体:
1、数据整体上来看,大部分同学得文本都是偏正向积极,情感积极的概率很高。都有值时接近1 ,说明同学们对这四个一的文本创作都偏向正面性
2、大五人格数据的均值,都集中在2-6 之间。同学们对四个“一”的人格认知都没有明显得偏向性
个体:
A : 对A这个“一”来说,同学的创作文本情感积极概率都是最高的,我们再来看看A的大五人格,发现,A的大五人格均值都是接近6,而且,都比较平均,其中宜人性最高。可以得出结论 A这个“一” 表现出来给人的感觉是性格比较平和,令人感到亲近
G:G这个“一”得,创作文本情感积极概率波动比较大,当概率很小得时候,相当于,负面,消极概率是比较高而,多为同学得创作文本表现出来情感消极概率比较高。大五人格数据中,G的图像表现出来也是比较明显:神经质大于6 ,开放性,也比较高,宜人性最小接近2,结论: G这个“一” ,性格比较突出,明显、活跃,容易冲动,同样也个性鲜明。会引起部分人的感觉不适
J:J这个“一”的再文本创作情感分析数据上,表现出来也是具有一定的波动性,说明同学的创作情感也有一定的不一致性,大五人格数据上表现出来,具有较强的责任心,和一定程度的宜人性。神经质数值最小,从关键词中其实也有一定程度的体现。结论:J这个“一”给人以稳重,踏实,有较强的责任心的感觉,同时也可能带给人以创意不够的遗憾。
K:k的数据就相对而且没有那么突出,不过要比A的数据有点波动。同学们创作上对其的认知也有一定的不一致性。总体上还是创作情感还是偏向积极方向。从大五人格的数据上看,宜人性的数据较高,其他数据指标都处于比较中间的位置
结论:K表现出来的也是性格比较好,没有特别的冲动或者脆弱的感觉,比较符合普通人的感觉,没有特别的地方

这学期的互动媒体课,我们也是本着艺工交叉的初衷,做了很多有意思的问卷,最后大作业也是有机会拿到自己的数据,用编程等手段对数据进行分析,总结得出一些结论。看着数据绘制出来的图标,以及自己的分析,也是比较享受这一个过程(好吧,其实还是很累的。。。)期待下学期律老师的课!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值