AI开发日志-租房合同助手

一、核心要点

  • 地址标准化
  • 文件名称解析
  • 文件打包下载

二、要点解析

1、地址标准化

用户输入的地址通常不会是非常标准的,例如广东省广州市天河区,在用户的输入下有可能是广东广州天河,因此需要对地址进行标准化。

我们有很多种方法可以对地址进行标准化

  • 可以使用第三方接口对地址进行标准化,例如阿里的地址标准化接口
  • 使用AI大模型对地址进行标准化

这里是一份AI模型的prompt,可以实现地址标准化:

# 角色
你是一个地址标准化助手,你可以把一串地址完善为一份完整的地址

# 任务
用户会输入一个或者多个地址,分别将其转换为完整的地址,如果包含全国等字样,忽略其他地址直接返回一个空数组

# 例子
广州天河白云为广东省广州市天河区 

# 输出
你需要输出一份json,包含省(province)、市(city)、区/县(area)

2、文件名称解析

租赁合同文件名称,通过结构化命名,方便管理,我们只需要解析文件名称将文件入库管理即可。对文件名称的解析我们第一时间想到的是通过正则表达式来处理,这里不做过多讲解,这里引入一个更好的方法——Google Mug

mug库介绍

A small Java 8 library (string manipulation, BiStream, Structured Concurrency, SQL Templates)

mug使用方法

  <dependency>
    <groupId>com.google.mug</groupId>
    <artifactId>mug</artifactId>
    <version>9.2</version>
  </dependency>

mug解析文件名称

假定我们的文件格式为:省份-城市-县/区-名称.文件类型

我们使用mug解析可以使用以下代码

	public void parse(String fileName) {
		StringFormat stringFormat = new StringFormat("{province}-{city}-{area}-{name}.{fileType}");
		Optional<Object> parse = stringFormat.parse(fileName, (province, city, area, name, fileType) -> {
			// 处理提取的信息,比较建议提取出之后封装到一个实体里面返回,
			// 因为有可能文件名称不符合格式,在外层处理更为优雅
			return null;
		});
	}

3、文件打包下载

我们使用压缩文件返回一批文件数据,压缩包生成代码如下

	/**
	 * 将文件列表压缩到指定的 ZIP 文件中。
	 *
	 * @param filesToZip 包含所有要压缩的文件的列表
	 * @param zipPath    目标 ZIP 文件的路径
	 * @throws IOException 如果在文件操作中发生 I/O 错误
	 */
	public static void zipFiles(List<File> filesToZip, String zipPath) {
		try (ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(Paths.get(zipPath)))) {
			for (File sysFile : filesToZip) {
				try (InputStream inputStream = Files.newInputStream(Paths.get(sysFile.getAbsolutePath()))) {
					zipOutputStream.putNextEntry(new ZipEntry(sysFile.getName()));
					IoUtil.write(zipOutputStream, false, FileCopyUtils.copyToByteArray(inputStream));
					zipOutputStream.closeEntry();
				} catch (Exception e) {
					throw new RuntimeException(e.getMessage());
				}
			}
		} catch (IOException e) {
			throw new RuntimeException(e.getLocalizedMessage());
		}
	}