百度NLP自然语言处理应用(一)

241 阅读2分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战

1、前言

最近,领导提出需要向大屏上展示应用中的正负向评论的统计数据。既然要分析出评论内容的正负向,就必然要用到自然语言处理技术,即NLP(让程序帮我们处理、分析人类的语言)。像笔者所在的公司仅专注于某一行业,NLP并不是核心业务所必需的技术,从头开发肯定不合适,结合实际情况,最后决定使用百度的NLP接口。下面为大家介绍一下,具体的开发应用。

2、 配置APIClient

pom文件中添加:

<dependency>
    <groupId>com.baidu.aip</groupId>
    <artifactId>java-sdk</artifactId>
    <version>4.16.3</version>
</dependency>

这里需要特别注意的是,如果大家在单元测试中调试程序的话,一定要在pom文件中加上下面的配置,这里是因为百度提供的SDK用到的JSON包与spring-boot-starter-test中的发生了冲突,导致java.lang.NoSuchMethodError

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.skyscreamer</groupId>
            <artifactId>jsonassert</artifactId>
        </exclusion>
    </exclusions>
    <scope>test</scope>
</dependency>

3.png

增加配置类,这里是为了将AipNlp类放入到Spring的容器中来管理。

@Configuration
public class NlpBaiduApiConfig {
​
    @Value("${nlp.baidu.AppID}")
    private String APP_ID;
​
    @Value("${nlp.baidu.APIKey}")
    private String API_KEY;
​
    @Value("${nlp.baidu.SecretKey}")
    private String SECRET_KEY;
​
    /**
     * 定义AipNlp
     * @return
     */
    @Bean(name="aipNlpClient")
    public AipNlp registerAipNlp() {
        AipNlp aipNlp = new AipNlp(APP_ID, API_KEY, SECRET_KEY);
        // 建立连接的超时时间(单位:毫秒)
        aipNlp.setConnectionTimeoutInMillis(15000);
        // 通过打开的连接传输数据的超时时间(单位:毫秒)
        aipNlp.setSocketTimeoutInMillis(60000);
        return aipNlp;
    }
​
}

好了,完成上述的准备步骤就可以进行具体的开发了。

3、情感倾向分析

顾名思义,这是判断文本内容的情感倾向(积极、消极、中性),同事还有对应的置信度(就是正确的概率)。

JSONObject resObj = aipNlp.sentimentClassify("很厉害,学到了很多东西!", null);
​
评论内容情感分析结果,返回值为:{"log_id":3275680488540873499,"text":"很厉害,学到了很多东西!","items":[{"positive_prob":0.986141,"sentiment":2,"confidence":0.969203,"negative_prob":0.0138589}]}

这里的返回值是JSONObject形式的,需要注意的一点是,虽然百度的接口返回值中对置信度等值标为了double类型,但是如果置信度位100那么它的类型是Integer。所以我们做类型转换时要使用Double.valueOf(confidence.toString()) 这样。

4.png

好了、本期就先介绍到这里,有什么需要交流的,大家可以随时私信我。😊