系列文章目录
一、pom依赖引入
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.1.1</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
二、百度语音转文字
具体参考百度API文档
public String voiceIdentifyToString(byte[] voiceBytes, String accessToken, String cuid) {
if (voiceBytes == null || voiceBytes.length == 0) {
return StringUtils.EMPTY;
}
String speech = Base64.getEncoder().encodeToString(voiceBytes);
BaiduReqDto baiduReqDto = new BaiduReqDto().setFormat("pcm").setRate(16000).setChannel(1)
.setCuid(cuid).setSpeech(speech).setLen(voiceBytes.length).setToken(accessToken);
String voiceResp = HttpUtil.simplePostJson(appConfig.getBaiduVopUrl(), JSON.toJSONString(baiduReqDto));
BaiduRespDto baiduRespDto = JSONObject.parseObject(voiceResp, BaiduRespDto.class);
System.out.println(baiduRespDto.getResult());
if (baiduRespDto == null || baiduRespDto.getResult() == null || baiduRespDto.getResult().size() == 0) {
return StringUtils.EMPTY;
}
return String.join("", baiduRespDto.getResult()).replaceAll("。", "");
}
public String baiduAccessToken() {
String cacheKey = "baidu:AlAccessToken";
Object valueByKey = redisUtil.getValueByKey(cacheKey);
if (valueByKey == null || StringUtils.isEmpty(valueByKey.toString())) {
String url = String.format("https://aip.baidubce.com/oauth/2.0/token?client_id=%s&client_secret=%s&grant_type=client_credentials", "xxxxx", "xxxxxxx");
String s = HttpUtil.simplePostJson(url, new JSONObject().toString());
TokenRespDto tokenRespDto = JSONObject.parseObject(s, TokenRespDto.class);
valueByKey = tokenRespDto.getAccess_token();
redisUtil.setKeyValueWithExpire(cacheKey, valueByKey, 60 * 60 * 24 * 7l);
}
return valueByKey.toString();
}
三、两个字符串相似度比较方法(补充)
public BigDecimal voiceSimilarity(String var1, String var2) {
BigDecimal bd = new BigDecimal(0);
if (StringUtils.isEmpty(var1)) {
if (StringUtils.isBlank(var2)) {
bd = bd.add(new BigDecimal(100));
}
return bd;
}
int v1Len = var1.length();
int v2Len = var2.length();
String splitVar = v1Len > v2Len ? var2 : var1;
String containVar = v1Len > v2Len ? var1 : var2;
List<String> strings = this.splitSubstrings(splitVar);
for (String st : strings) {
if (containVar.contains(st)) {
bd = new BigDecimal(st.length()).divide(new BigDecimal(v2Len), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP);
System.out.println(bd);
break;
}
}
return bd;
}
public List<String> splitSubstrings(String s) {
int i, j;
int stringLength = s.length();
ArrayList<String> subStringList = new ArrayList<String>();
for (i = 0; i < stringLength; i++) {
for (j = i + 1; j <= stringLength; j++) {
subStringList.add(s.substring(i, j));
}
}
return subStringList.stream().sorted(Comparator.comparing(String::length).reversed()).collect(Collectors.toList());
}