LangChain4j如何自定义文档转换器实现数据清洗?
LangChain4j 提供了 3 种 RAG(Retrieval-Augmented Generation,检索增强生成)实现,我们通常在原生或高级的 RAG 实现中,要对数据进行清洗,也就是将外接知识库中的原数据进行噪音去除,留下有价值的信息。
例如在带有 HTML 标签的文本中,HTML 标签就是噪音,他对于搜索结果是没有任何帮助,甚至会影响查询结果的,因此我们就需要将 HTML 标签进行清除。
那问题来了,怎么进行数据清洗呢?
这就要使用到文档转换器了,那么在不使用 LangChain4j 内置文档转换器的前提下(因为业务需求是复杂且多变的,因此很多时候我们需要使用自定义文档转换器才能实现预期的效果),那怎么实现呢?接下来一起来看。
自定义文档转换器
以去除文本中的 HTML 标签为例,LangChain4j 中自定义文档转换器的实现步骤如下:
- 新建类实现 DocumentTransformer 接口。
- 重写 transform 和 transformAll 方法,前者是对 Document 对象进行文档转换,后者是对 List 进行数据转换。
- 在 transform 和 transformAll 方法中,实现数据清除的具体业务落地。
具体实现代码
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.DocumentTransformer;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义文档转换器
*/
public class HtmlToTextDocumentTransformer implements DocumentTransformer {
@Override
public Document transform(Document document) {
return Document.from(removeHtmlTags(document.text()));
}
// 使用正则表达式清除内容中的 HTML 标签
public static String removeHtmlTags(String html) {
if (html == null || html.isEmpty()) {
return "";
}
// 定义正则表达式,匹配所有HTML标签
String regex = "<[^>]+>";
// 替换所有匹配的标签为空字符串
return html.replaceAll(regex, "").trim();
}
@Override
public List<Document> transformAll(List<Document> documents) {
List<Document> list = new ArrayList<Document>();
documents.stream().forEach(document -> {
list.add(this.transform(document));
});
return list;
}
}
调用文档转换器
Document htmlDoc = Document.from(
"<html><body><p>Clean <b>me</b>!</p></body></html>"
);
// 文档转换器
DocumentTransformer transformer = new HtmlToTextDocumentTransformer();
Document cleanedDoc = transformer.transform(htmlDoc);
System.out.println(cleanedDoc.text());
最终的执行结果为:
Clean me!
小结
文档转换器只是实现生产级别 RAG 的实现步骤之一,生产级别的 RAG 实现的步骤通常包含:文档加载器、文档解析器、文档转换器、文档分词器、文档向量化、向量持久化、向量检索等过程,而且每个过程可能都要反复调优,才能实现生产级别的准确性要求,所以道阻且长,吾辈尚需努力啊!
本文已收录到我的技术小站 www.javacn.site,其中包含的内容有:Spring AI、LangChain4j、Dify、Agent、MCP、Function Call、RAG、向量数据库、Prompt、多模态、向量数据库、嵌入模型等内容。
LangChain4j如何自定义文档转换器实现数据清洗?的更多相关文章
- [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office
打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...
- eclipse中设置自定义文档签名(工具)
今天第一次认真学习eclipse的使用,看到自定义文档签名,步骤如下: 1.点击window->preferences->java->Code Style->Code Tem ...
- Eclipse中设置自定义文档签名
今天第一次认真学习eclipse的使用,看到自定义文档签名,步骤如下: 1.点击window->preferences->java->Code Style->Code Temp ...
- 【Android Developers Training】 54. 打印自定义文档
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Aspose.Words 自定义文档模版生成操作类
/// <summary> /// 操作word通用类 LIYOUMING add 2017-12-27 /// </summary> public class DocHelp ...
- Latex自定义文档纸张大小
\usepackage{geometry} \special{papersize=8.5in,11in}%纸张大小为8.5inch×11inch
- eclipse 自定义 文档
在这里写....
- idea自定义文档注释模板
1.类注释模板 IntelliJ IDE --> Preferences --> Editor --> File and Code Templates --> Includes ...
- VBA读取、增加自定义和修改文档属性
读取系统文档属性 Sub read()On Error Resume Nextrw = 1Worksheets(1).ActivateFor Each p In ActiveWorkbook.Buil ...
- ABBYY FineReader 14如何查看PDF文档
使用 ABBYY FineReader,您可以轻松查看和编辑任何类型的 PDF文档,就像是一款功能强大的PDF编辑转换器,不仅如此,它还能够允许您复制其中的文本.图片和表格.本文我们来看看如何从&qu ...
随机推荐
- .NET 使用 DeepSeek R1 开发智能 AI 客户端
前言 最近 DeepSeek 可太火了,在人工智能领域引起了广泛的关注,其强大的自然语言处理能力和智能搜索功能让大家跃跃欲试. 对于 .NET 技术栈的开发来说,一个常见的问题是:能否在 .NET 程 ...
- Halcon学习教程(一) 之提取十字线中心 图像分割
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/17266405.html 废话不多说,因为毕业后工作原因比较忙,好久没更新博客了,直接上图... ...
- docker - [05] 部署Nginx
题记部分 一.查找镜像 docker search nginx 二.拉取镜像 docker pull nginx 三.启动镜像 Nginx默认端口号为80,可以在启动时指定Nginx使用的端口号(例如 ...
- 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
从 Chrome 125 开始,支持了一个全新的 CSS 特性 - Anchor Positioning,翻译过来即是锚点定位. 在之前的文章中,我们较为系统的讲述了这个新特性的使用,感兴趣的可以翻开 ...
- laradock 更改 mysql 版本
# 修改 .env 文件 MYSQL_VERSION=5.7 # 默认为 latest #停止mysql容器 docker-compose stop mysql # 删除旧数据库数据 rm -rf ~ ...
- Oracle使用Impdp导入dmp文件的详细过程
这一天为了导入这个Oracle的dmp文件,简直就是血泪史,因本人对Oracle并不是很会,随意踩了很多小白会踩的坑,因此特意记录一下过程,防备下次的使用. 1.首先将你需要的dmp文件准备好,将其放 ...
- vSphere虚拟化之ESXi的安装及部署
vSphere虚拟化之ESXi的安装及部署一.什么是vSphere?vSphere是VNware公司在2001年基于云计算推出的一套企业级虚拟化解决方案.核心组件为ESXi.如今,经历了5个版本的改进 ...
- Oracle 内存(SGA,PGA)详细介绍
一.名词解释(1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区.(2)共享 ...
- Redis 相关
高并发多机的时候,虽然有失效时间,但还是会有短时间内缓存和数据库数据不一致(读操作不需要特殊操作),更新操作的时候先删除缓存,再更新数据库先更新数据库,再删除缓存原子性破坏,增加队列重试 先删除缓存, ...
- Git Bash 无法输入中文
场景重现 有个小伙伴的电脑上 Git Bash 里死活无法输入中文, 导致 git 提交信息没法用中文写... git commit -m "无法输入中文" 解决办法 在 Git ...