欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring AI 文檔的提取、轉(zhuǎn)換、加載功能實(shí)現(xiàn)

 更新時間:2025年04月07日 14:05:49   作者:brother_four  
Spring AI 是一個基于 Spring 生態(tài)系統(tǒng)的框架,旨在簡化人工智能和機(jī)器學(xué)習(xí)模型的集成,本文將介紹如何使用 Spring AI 和 Apache Tika 構(gòu)建一個簡單的 ETL 管道,特別是如何利用?spring-ai-tika-document-reader?依賴來處理和轉(zhuǎn)換文檔數(shù)據(jù),感興趣的朋友一起看看吧

在現(xiàn)代數(shù)據(jù)處理中,ETL(Extract, Transform, Load)管道是一個非常重要的概念。它允許我們從不同的數(shù)據(jù)源中提取數(shù)據(jù),進(jìn)行必要的轉(zhuǎn)換,然后將數(shù)據(jù)加載到目標(biāo)存儲系統(tǒng)中。本文將介紹如何使用 Spring AI 和 Apache Tika 構(gòu)建一個簡單的 ETL 管道,特別是如何利用 spring-ai-tika-document-reader 依賴來處理和轉(zhuǎn)換文檔數(shù)據(jù)。

1. 框架介紹

1.1 Spring AI 簡介

Spring AI 是一個基于 Spring 生態(tài)系統(tǒng)的框架,旨在簡化人工智能和機(jī)器學(xué)習(xí)模型的集成。它提供了豐富的工具和庫,幫助開發(fā)者快速構(gòu)建智能應(yīng)用。Spring AI 不僅支持常見的機(jī)器學(xué)習(xí)任務(wù),還提供了與各種數(shù)據(jù)源的集成能力,使得數(shù)據(jù)處理變得更加高效。

1.2 Apache Tika 簡介

Apache Tika 是一個內(nèi)容分析工具包,能夠從各種文檔格式(如 PDF、Word、Excel 等)中提取文本和元數(shù)據(jù)。Tika 提供了一個簡單的 API,使得開發(fā)者可以輕松地將文檔內(nèi)容提取并轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)。

1.3 spring-ai-tika-document-reader 依賴

spring-ai-tika-document-reader 是 Spring AI 提供的一個擴(kuò)展庫,它集成了 Apache Tika 的功能,使得在 Spring 應(yīng)用中處理文檔變得更加簡單。通過這個依賴,我們可以輕松地將文檔內(nèi)容提取并轉(zhuǎn)換為 Spring AI 可以處理的格式。

2. 轉(zhuǎn)換文檔

2.1 添加依賴

首先,我們需要在 pom.xml 中添加 spring-ai-tika-document-reader 依賴:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-tika-document-reader</artifactId>
    <version>1.0.0-M5</version>
</dependency>
  • 讀取文件。
    /**
     * 從輸入流中讀取文件。像后端接收前端文件時,就可以使用。
     * @param file 附件信息
     * @return
     */
    @PostMapping("etl/read/multipart-file")
    public String readMultipartFile(@RequestParam MultipartFile file) {
        // 從IO流中讀取文件
        Resource resource = new InputStreamResource(file.getInputStream());
        List<Document> documents = new TikaDocumentReader(resource)
                .get();
        return  documents.get(0).getContent();
    }
		/**
     * 從本地文件讀取文件。
     * @param filePath 本地文件地址
     * @return
     */
    @GetMapping("etl/read/local-file")
    public String readFile(@RequestParam String filePath) {
        // 從本地文件讀取文件
        Resource resource = new FileSystemResource("C:\\Users\\augjm\\Desktop\\note.txt");
        List<Document> documents = new TikaDocumentReader(resource)
                .get();
        return  documents.get(0).getContent();
    }
		    /**
     * 從網(wǎng)絡(luò)資源讀取文件。
     * @param filePath 從網(wǎng)絡(luò)資源讀取文件地址
     * @return
     */
    @GetMapping("etl/read/url-file")
    public String readUrl(@RequestParam String filePath) {
        // 從網(wǎng)絡(luò)資源讀取文件。
        Resource resource = new UrlResource(filePath);
        List<Document> documents = new TikaDocumentReader(resource)
                .get();
        return  documents.get(0).getContent();
    }

2.2 轉(zhuǎn)換文檔

Document對象是ETL Pipeline的核心對象,它包含了文檔的元數(shù)據(jù)和內(nèi)容。
內(nèi)容轉(zhuǎn)換器:

TokenTextSplitter:可以把內(nèi)容切割成更小的塊方便RAG的時候提升響應(yīng)速度節(jié)省Token。
ContentFormatTransformer:可以把元數(shù)據(jù)的內(nèi)容變成鍵值對字符串。
元數(shù)據(jù)轉(zhuǎn)換器:

SummaryMetadataEnricher:使用大模型總結(jié)文檔。會在元數(shù)據(jù)里面增加一個summary字段。
KeywordMetadataEnricher:使用大模型提取文檔關(guān)鍵詞。可以在元數(shù)據(jù)里面增加一個keywords字段。

    /**
     * 將文本內(nèi)容劃分成更小的塊。
     * @param file 附件信息
     * @return
     */
    @SneakyThrows
    @PostMapping("etl/transform/split")
    public List<String> split(@RequestParam MultipartFile file) {
        // 從IO流中讀取文件
        TikaDocumentReader tikaDocumentReader = new TikaDocumentReader(new InputStreamResource(file.getInputStream()));
        // 將文本內(nèi)容劃分成更小的塊
        List<Document> splitDocuments = new TokenTextSplitter()
                .apply(tikaDocumentReader.get());
        return splitDocuments.stream().map(Document::getContent).toList();
    }

在這個例子中,split 方法會將每個 Document 對象的內(nèi)容切割成更小的塊,并返回一個新的 Document 對象列表。

2.2 存儲文檔

根據(jù)以上步驟,就將文檔切割各個塊,然后就可以將其存儲到向量數(shù)據(jù)庫中了

/**
     * 嵌入文件
     *
     * @param file 待嵌入的文件
     * @return 是否成功
     */
    @PostMapping("save/file/vectorStore")
    public Boolean saveFileVectorStore(@RequestParam MultipartFile file) {
        // 從IO流中讀取文件
        TikaDocumentReader tikaDocumentReader = new TikaDocumentReader(new InputStreamResource(file.getInputStream()));
        // 將文本內(nèi)容劃分成更小的塊
        List<Document> splitDocuments = new TokenTextSplitter()
                .apply(tikaDocumentReader.get());
        // 存入向量數(shù)據(jù)庫,這個過程會自動調(diào)用embeddingModel,將文本變成向量再存入。
        elasticVectorStore.add(splitDocuments);
        return true;
    }

到此這篇關(guān)于Spring AI 文檔的提取、轉(zhuǎn)換、加載的文章就介紹到這了,更多相關(guān)Spring AI 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼

    java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼

    這篇文章主要介紹了java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 在Java的Struts框架中ONGL表達(dá)式的基礎(chǔ)使用入門

    在Java的Struts框架中ONGL表達(dá)式的基礎(chǔ)使用入門

    這篇文章主要介紹了深入解析在Java的Struts框架中ONGL表達(dá)式的基礎(chǔ)使用入門,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • Java 運(yùn)算符詳情

    Java 運(yùn)算符詳情

    這篇文章主要介紹了Java 運(yùn)算符,Java 中的運(yùn)算符與 C 語言基本一致。下面文章就圍繞Java 中的運(yùn)算符的相關(guān)資料展開內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • window下安裝和配置maven環(huán)境

    window下安裝和配置maven環(huán)境

    這篇文章主要為大家詳細(xì)介紹了window下安裝和配置maven環(huán)境的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java設(shè)計(jì)模式之原型模式詳細(xì)解讀

    Java設(shè)計(jì)模式之原型模式詳細(xì)解讀

    這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式詳細(xì)解讀,原型模式屬于創(chuàng)建型設(shè)計(jì)模式,用于創(chuàng)建重復(fù)的對象,且同時又保證了性能,該設(shè)計(jì)模式的好處是將對象的創(chuàng)建與調(diào)用方分離,需要的朋友可以參考下
    2023-12-12
  • Spring整合Junit的使用詳解

    Spring整合Junit的使用詳解

    這篇文章主要介紹了Spring整合Junit的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 爬蟲技術(shù)詳解

    爬蟲技術(shù)詳解

    本文全面的介紹了爬蟲的原理、技術(shù)現(xiàn)狀、以及目前仍面臨的問題。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • 如何使用hutool做本地緩存的工具類

    如何使用hutool做本地緩存的工具類

    這篇文章主要介紹了如何使用hutool做本地緩存的工具類,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java核心技術(shù)之反射

    Java核心技術(shù)之反射

    本文非常詳細(xì)的講解了java反射的相關(guān)資料,java反射在現(xiàn)今的使用中很頻繁,希望此文可以幫大家解答疑惑,可以幫助大家理解
    2021-11-11
  • 兩萬字詳解Java Sring String的常見操作以及StringBuffer StringBuilder的區(qū)別

    兩萬字詳解Java Sring String的常見操作以及StringBuffer StringBuilder的區(qū)別

    本篇文章帶你認(rèn)識Sring、String的常見操作和StringBuffer 與StringBuilder的區(qū)別(字符串詳解),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評論