java分析日记返回情绪值

本来想用python+机器学习做情感分析,但是还没开始就放弃了(机器学习没学过啊,还那么难,为了这一个接口去花费大量的时间学习,实在不划算)所以放弃了造*。emmm,无意中发现了,百度AI开放平台。上面有很多可以免费使用的“*”。

嗯,就是这个情感倾向分析
java分析日记返回情绪值
自己创建一个应用就可以了。这里我使用的是java的SDK。
SDK文档很详细,可以直接照着例子用。

来分析一下返回结果:

{
    "text":"苹果是一家伟大的公司",
    "items":[
        {
            "sentiment":2,    //表示情感极性分类结果
            "confidence":0.40, //表示分类的置信度
            "positive_prob":0.73, //表示属于积极类别的概率
            "negative_prob":0.27  //表示属于消极类别的概率
        }
    ]
}

官方的解释。
java分析日记返回情绪值
我在这里提取的值是positive_prob(取值范围0 ~ 1),这个是属于积极类别的概率,我把它作为文本分析的情绪值。
因为当这个值很大时(接近1)表示情绪正向,即很高兴,当它很小时(接近0)表示情绪负向,即不开心或者其他消极情绪。

返回结果总的是个json对象,我们要首先取到items,它是个json对象数组,用getJSONArray("items")获取,数组里只有一个元素,所以我们要获取它的第一个元素,即get(0),这也是个json对象。然后直接get("positive_porb")就可以获取我们想要的值(为了更加直观的显示,我在这里乘了100,然后转为了int型,使它的取值范围变成0 ~ 100)。

这里我是放在springboot项目里的。下面贴一下代码。主要是一个问题。从返回结果中提取自己想要的值。

我直接写成了一个配置类:

package com.after.demo.config;

import com.baidu.aip.nlp.AipNlp;
import org.json.JSONObject;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

/**
 * @author www.xyjz123.xyz
 * @description
 * @date 2019/4/27 16:45
 */
@Configuration
public class AipNlpConfig {

    public static final String APP_ID = "你的app_id ";
    public static final String API_KEY = "你的api_key";
    public static final String SECRET_KEY = "你的secret_key";

     /**
     * 根据传入的文本进行情感分析
     * @param text 文本内容
     * @return 情感分析结果
     */
    public JSONObject sentimentClassify(String text){
        // 初始化一个AipNlp
        AipNlp client = new AipNlp(APP_ID, API_KEY, SECRET_KEY);

        // 设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        //传入可选参数调用接口
        HashMap<String ,Object> options = new HashMap<>(16);

        //情感倾向分析,并返回结果
        return client.sentimentClassify(text,options);
    }
}

在service中调用:

package com.after.demo.service.impl;

import com.after.demo.config.AipNlpConfig;
import com.after.demo.entity.Diary;
import com.after.demo.mapper.DiaryMapper;
import com.after.demo.service.DiaryService;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author www.xyjz123.xyz
 * @description
 * @date 2019/4/16 20:14
 */
@Service
public class DiaryServiceImpl implements DiaryService {

    @Autowired
    DiaryMapper diaryMapper;

    @Autowired
    AipNlpConfig aipNlpConfig;

    @Override
    public int saveDiary(String userName, String photo, String title, String content,String time) {
        int sentiment = getSentiment(content);

        return diaryMapper.saveDiary(userName, photo, title, content, time, sentiment);
    }

    public int getSentiment(String text){
        //情感分析
        JSONObject res = aipNlpConfig.sentimentClassify(text);
        //获取items
        JSONArray items = res.getJSONArray("items");
        //取items的第一个元素,是个JSONObject对象
        JSONObject it1 = items.getJSONObject(0);
        //取it1的中属于积极类别的概率并 * 100
        int sentiment = (int)(it1.getDouble("positive_prob") * 100);
        return sentiment;
    }
}

到此结束,来测试一下试试:
java分析日记返回情绪值
我传入的文本是一句没啥感情色彩的句子,所以sentiment值不大不小。

上一篇:使用RNN进行imdb影评情感识别--use RNN to sentiment analysis


下一篇:自然语言处理概述(前沿、数据集、下游任务)