「这是我参与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>
增加配置类,这里是为了将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()) 这样。
好了、本期就先介绍到这里,有什么需要交流的,大家可以随时私信我。😊