当前位置: 首页 > article >正文

langchain4j+PDFBox小试牛刀

本文主要研究langchain4j结合Apache PDFBox进行pdf解析

步骤

pom.xml

        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-document-parser-apache-pdfbox</artifactId>
            <version>1.0.0-beta1</version>
        </dependency>

example

public class PDFBoxTest {
    public static void main(String[] args) {
        String path = System.getProperty("user.home") + "/downloads/deepseek.pdf";
        DocumentParser parser = new ApachePdfBoxDocumentParser();
        Document document = FileSystemDocumentLoader.loadDocument(path, parser);
        log.info("textSegment:{}", document.toTextSegment());
        log.info("meta data:{}", document.metadata().toMap());
        log.info("text:{}", document.text());
    }
}

指定好了文件路径,通过ApachePdfBoxDocumentParser来解析,最后统一返回Document对象,它可以返回textSegment,这个可以跟向量数据库结合在一起

			EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
            TextSegment segment1 = document.toTextSegment();
            Embedding embedding1 = embeddingModel.embed(segment1).content();
            embeddingStore.add(embedding1, segment1);

源码

document-parsers/langchain4j-document-parser-apache-pdfbox/src/main/java/dev/langchain4j/data/document/parser/apache/pdfbox/ApachePdfBoxDocumentParser.java

public class ApachePdfBoxDocumentParser implements DocumentParser {

    private final boolean includeMetadata;

    public ApachePdfBoxDocumentParser() {
        this(false);
    }

    public ApachePdfBoxDocumentParser(boolean includeMetadata) {
        this.includeMetadata = includeMetadata;
    }

    @Override
    public Document parse(InputStream inputStream) {
        try (PDDocument pdfDocument = PDDocument.load(inputStream)) {
            PDFTextStripper stripper = new PDFTextStripper();
            String text = stripper.getText(pdfDocument);
            if (isNullOrBlank(text)) {
                throw new BlankDocumentException();
            }
            return includeMetadata
                    ? Document.from(text, toMetadata(pdfDocument))
                    : Document.from(text);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private Metadata toMetadata(PDDocument pdDocument) {
        PDDocumentInformation documentInformation = pdDocument.getDocumentInformation();
        Metadata metadata = new Metadata();
        for (String metadataKey : documentInformation.getMetadataKeys()) {
            String value = documentInformation.getCustomMetadataValue(metadataKey);
            if (value != null) metadata.put(metadataKey, value);
        }
        return metadata;
    }
}

ApachePdfBoxDocumentParser实现了DocumentParser,默认includeMetadata为false,其parse方法先通过PDDocument.load(inputStream)加载,然后通过PDFTextStripper去提取文本,最后若includeMetadata为true,则通过pdDocument.getDocumentInformation()来获取元数据信息。

小结

langchain4j提供了langchain4j-document-parser-apache-pdfbox用于读取PDF文档,然后解析成Document类型,它可以返回textSegment,这个可以跟向量数据库结合在一起。

doc

  • document-parsers/apache-pdfbox

http://www.kler.cn/a/580281.html

相关文章:

  • flink cdc同步mysql数据
  • deepseek在pycharm中的配置和简单应用
  • 科技的成就(六十七)
  • 深度学习五大模型全解析:CNN、Transformer、BERT、RNN、GAN 的区别与联系,一文读懂!
  • osgEarth 加载MapBox的pbf瓦片数据
  • 控制--机器人模型--四旋翼无人机
  • 深入探索 Dubbo:高效的 Java RPC 框架
  • 化工厂防爆气象站:为石油化工、天然气等领域提供安全保障
  • (每日一题) 力扣 14 最长公共前缀
  • GreatSQL 8.0.32-27 GA (2025-3-10)
  • 几种linux获取系统运行时间的方法
  • java中泛型
  • Mysql主从复制和Mysql高可用以及负载均衡配置
  • 解锁下一代开发范式:IntelliJ Idea AI插件全景实战与未来展望
  • Python数据可视化自动化工具:让数据跃然纸上
  • King3399(ubuntu文件系统)Qt(C++)串口工具开发
  • 掌握Excel快捷键与函数公式,开启高效办公之旅
  • android如何实现OOM治理
  • MAC电脑配置VSCode写JAVA
  • 系统架构设计师—系统架构设计篇—软件可靠性