山东大学项目实训-创新实训-法律文书专家系统-项目报告(三)

项目简介

法律文书专家系统是一个 Web 应用,提供法律文书摘要提取、法律预测报告生成和法律考试问题答疑三大核心功能。用户需要登录或注册后,进入主页面选择所需功能,进行相应的操作

用户群体

律师:需要快速提取法律文书摘要,提高办案效率。

法务人员:需要根据案件输入生成法律预测报告,辅助决策。

法学生:需要练习法律考试题,获取答案与解析。

进度说明:

法律文书摘要功能,法律文书预测报告的大致功能基本完成.

完成效果:

界面效果:

山东大学项目实训-创新实训-法律文书专家系统-项目报告(三)_第1张图片

山东大学项目实训-创新实训-法律文书专家系统-项目报告(三)_第2张图片

开发技术:

前端使用了vue+JavaScript的技术,同时还使用了element组件库。后端使用了Java+SpringBoot。前后端交互使用了axios技术。

前后端的交互:

axios:Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。

我在前端使用axios技术封装了一个request拦截器,可以自发请求发送前对请求做一些处理.

import axios from 'axios'

const request = axios.create({
    baseURL: 'http://localhost:9090',  // 这里是全局统一加上了 '/api' 前缀,也就是说所有接口都会加上'/api'前缀在,页面里面写接口的时候就不要加 '/api'了,否则会出现2个'/api',类似 '/api/api/user'这样的报错,切记!!!
    timeout: 60000
})

// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token,对请求参数统一加密
request.interceptors.request.use(config => {
    //config.headers['Content-Type'] = 'application/json;charset=utf-8';

    if (!(config.data instanceof FormData)) {
        config.headers['Content-Type'] = 'application/json;charset=utf-8';
    }


    // 设置请求头
    let jwtToken = localStorage.getItem('jwtToken');
    if (jwtToken) {
        config.headers['jwtToken'] = jwtToken;
    }

    return config
}, error => {
    return Promise.reject(error)
});

// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data;
        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        return res;
    },
    error => {
        console.log('err' + error) // for debug
        return Promise.reject(error)
    }
)


export default request

使用时可以直接这么使用:

(文书摘要功能中上传文件的代码)

import request from "@/axios/request";

const response = await request.post("/wenshu/upload", formData, {
          headers: {
            "Content-Type": "multipart/form-data",
          },

(法律预测功能中上传的代码) 

import request from "@/axios/request";
const response = await request.post('/yuce/send', this.inputQuestion);
    // 处理文件上传成功的事件
    handleUploadSuccess(response, files, fileList) {
      console.log("文件上传成功,后端响应:", response);
      if (response.code == 200) {
        this.inputQuestion = response.msg
      } else {
        this.$message({type: 'error', message: response.msg})
      }


    }

 后端文书摘要功能对应的接收方法:它接收一个文件(txt,pdf,docx)并将其中的文字信息提取,然后与训练好的模型进行交互.


    @PostMapping("/upload")
    public Result handleFileUpload(@RequestParam("file") MultipartFile file) {
        String filename = file.getOriginalFilename();
        if (filename == null) {
            return Result.error("空文件");
        }

        try {
            String textContent = extractTextFromFile(file);

            // 构建请求
            ObjectMapper mapper = new ObjectMapper();
            Map data = new HashMap<>();
            data.put("document", textContent);

            String jsonBody = mapper.writeValueAsString(data);

            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create("http://localhost:7860/summarize"))
                    .header("Content-Type", "application/json")
                    .POST(HttpRequest.BodyPublishers.ofString(jsonBody))
                    .build();

            // 发送请求并处理响应

            HttpClient client = HttpClient.newHttpClient();
            HttpResponse response = client.send(
                    request, HttpResponse.BodyHandlers.ofString());

            System.out.println("Status code: " + response.statusCode());

            System.out.println("Response body: " + response.body());

            //返回结果
            return Result.success(response.body());

        } catch (UnsupportedOperationException e) {

            return Result.error("不支持的文件类型");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("文件解析失败");
        }
    }

 后端文书摘要功能对应的接收方法:

public class YuceController {

    @PostMapping("/upload")
    public Result handleFileUpload(@RequestParam("file") MultipartFile file) {
        String filename = file.getOriginalFilename();
        if (filename == null) {
            return Result.error("空文件");
        }

        try {
            String textContent = extractTextFromFile(file);
            System.out.println(textContent);
                return Result.success(textContent);
        } catch (UnsupportedOperationException e) {

            return Result.error("不支持的文件类型");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("文件解析失败");
        }
    }


    @PostMapping("/send")
    public Result handleRequest(@RequestBody String requestData) {
        System.out.println("接收到的字符串: " + requestData);
        // 构建请求
        try {
        ObjectMapper mapper = new ObjectMapper();
        Map data = new HashMap<>();
        data.put("fact", requestData);
        String jsonBody = mapper.writeValueAsString(data);
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://localhost:7860/prediction"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(jsonBody))
                .build();

        // 发送请求并处理响应

        HttpClient client = HttpClient.newHttpClient();
        HttpResponse response = client.send(
                request, HttpResponse.BodyHandlers.ofString());

        System.out.println("Status code: " + response.statusCode());
        System.out.println("Response body: " + response.body());

            //返回结果
        return Result.success(response.body());

        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("错误");
        }
    }

 其中,第一个方法是接受前端上传的文件,然后将其文字信息提取出来,返回给前端,第二个则是接受前端发送来的信息,与模型交互后返回前端.

你可能感兴趣的:(法律文书摘要专家系统,java,spring,maven,学习)