山东大学项目实训-创新实训-法律文书专家系统-项目报告(三)
项目简介
法律文书专家系统是一个 Web 应用,提供法律文书摘要提取、法律预测报告生成和法律考试问题答疑三大核心功能。用户需要登录或注册后,进入主页面选择所需功能,进行相应的操作
用户群体
律师:需要快速提取法律文书摘要,提高办案效率。
法务人员:需要根据案件输入生成法律预测报告,辅助决策。
法学生:需要练习法律考试题,获取答案与解析。
进度说明:
法律文书摘要功能,法律文书预测报告的大致功能基本完成.
完成效果:
界面效果:
开发技术:
前端使用了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 debugreturn 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<String, Object> 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<String> 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<String, Object> 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<String> 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("错误");}}
其中,第一个方法是接受前端上传的文件,然后将其文字信息提取出来,返回给前端,第二个则是接受前端发送来的信息,与模型交互后返回前端.