Przeglądaj źródła

新增:

1、新增语义完整度相关接口
dev-translate
10710 1 rok temu
rodzic
commit
a69876ff5d
6 zmienionych plików z 169 dodań i 0 usunięć
  1. +15
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/config/BaiduConfig.java
  2. +10
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/vo/WordProcessVo.java
  3. +10
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/manager/IDmWordProcessManager.java
  4. +99
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/manager/impl/DmWordProcessManager.java
  5. +7
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/IDmWordProcessService.java
  6. +28
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/DmWordProcessServiceImpl.java

+ 15
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/config/BaiduConfig.java Wyświetl plik

@@ -0,0 +1,15 @@
package com.xueyi.nlt.nlt.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties(prefix = "secret.baidu")
public class BaiduConfig {
private String apiKey;
private String secretKey;
private String authUrl;
private String dnnUrl;
}

+ 10
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/domain/vo/WordProcessVo.java Wyświetl plik

@@ -0,0 +1,10 @@
package com.xueyi.nlt.nlt.domain.vo;

import lombok.Data;

@Data
public class WordProcessVo{
private String metadata;
private String method;
private String processedResult;
}

+ 10
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/manager/IDmWordProcessManager.java Wyświetl plik

@@ -0,0 +1,10 @@
package com.xueyi.nlt.nlt.manager;

import com.xueyi.nlt.nlt.domain.vo.WordProcessVo;


public interface IDmWordProcessManager {
public WordProcessVo semanticIntegrityDetection(WordProcessVo wordProcessVo);

public WordProcessVo split(WordProcessVo wordProcessVo);
}

+ 99
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/manager/impl/DmWordProcessManager.java Wyświetl plik

@@ -0,0 +1,99 @@
package com.xueyi.nlt.nlt.manager.impl;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xueyi.nlt.nlt.config.BaiduConfig;
import com.xueyi.nlt.nlt.domain.vo.WordProcessVo;
import com.xueyi.nlt.nlt.manager.IDmWordProcessManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import okhttp3.*;
import java.io.*;

@Component
public class DmWordProcessManager implements IDmWordProcessManager {

@Autowired
private BaiduConfig baiduConfig;
static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();

private static final Logger log = LoggerFactory.getLogger(DmWordProcessManager.class);
@Override
public WordProcessVo semanticIntegrityDetection(WordProcessVo wordProcessVo) {
String result = detected(wordProcessVo.getMetadata());
log.info("语义完整性检测结果:" + result);
if(result != null){
JSONObject jsonObject = JSONObject.parseObject(result);
if(jsonObject.containsKey("error_code")){
String errorMsg = String.format("语义完整性检测失败,错误码:%d,错误信息:%s", jsonObject.getInteger("error_code"),jsonObject.getString("error_msg"));
log.error(errorMsg);
}else{
Double ppl = jsonObject.getDouble("ppl");
if(ppl < 300) {
wordProcessVo.setProcessedResult("2");
}else if(ppl > 1000){
wordProcessVo.setProcessedResult("0");
}else{
wordProcessVo.setProcessedResult("1");
}
log.info("语义完整性检测结果:" + wordProcessVo.getProcessedResult());
}
}else{
log.error("语义完整性检测失败,未获取到返回结果");
}
return wordProcessVo;
}

private String detected(String question) {
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"text\":\"" + question + "\"}");
String accessToken = getAccessToken();
if(StringUtils.isNotEmpty(accessToken)){
Request request = new Request.Builder()
.url(baiduConfig.getDnnUrl() + accessToken)
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
try(Response response = HTTP_CLIENT.newCall(request).execute();) {
if(response.body() != null) {
return response.body().string();
}else{
return null;
}
}catch (IOException e){
return null;
}
}else{
return null;
}
}

private String getAccessToken(){
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + baiduConfig.getApiKey()
+ "&client_secret=" + baiduConfig.getSecretKey());
Request request = new Request.Builder()
.url(baiduConfig.getAuthUrl())
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
try (Response response = HTTP_CLIENT.newCall(request).execute();){
if(response.body() != null){
String result = response.body().string();
return JSONObject.parseObject(result).getString("access_token");
}else{
return null;
}
}catch (IOException e) {
return null;
}
}

@Override
public WordProcessVo split(WordProcessVo dmWordProcessVo){
return null;
}
}

+ 7
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/IDmWordProcessService.java Wyświetl plik

@@ -0,0 +1,7 @@
package com.xueyi.nlt.nlt.service;

import com.xueyi.nlt.nlt.domain.vo.WordProcessVo;

public interface IDmWordProcessService {
public WordProcessVo handle (WordProcessVo dmWordProcessVo);
}

+ 28
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/DmWordProcessServiceImpl.java Wyświetl plik

@@ -0,0 +1,28 @@
package com.xueyi.nlt.nlt.service.impl;

import com.xueyi.nlt.nlt.domain.vo.WordProcessVo;
import com.xueyi.nlt.nlt.manager.IDmWordProcessManager;
import com.xueyi.nlt.nlt.manager.impl.DmWordProcessManager;
import com.xueyi.nlt.nlt.service.IDmWordProcessService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DmWordProcessServiceImpl implements IDmWordProcessService {
@Autowired
IDmWordProcessManager dmWordProcessManager;

private static final Logger log = LoggerFactory.getLogger(DmWordProcessServiceImpl.class);

public WordProcessVo handle (WordProcessVo wordProcessVo){
log.info("wordProcessVo.getMethod() = " + wordProcessVo.getMethod() + " wordProcessVo.getMetadata() = " + wordProcessVo.getMetadata());
return switch (wordProcessVo.getMethod()) {
case "integrity" -> dmWordProcessManager.semanticIntegrityDetection(wordProcessVo);
case "split" -> dmWordProcessManager.split(wordProcessVo);
default -> null;
};

}
}

Ładowanie…
Anuluj
Zapisz