偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Tika 與 Spring Boot 的完美結(jié)合:支持任意文檔解析的神器

開發(fā) 前端
隨著數(shù)字化轉(zhuǎn)型的加速,企業(yè)和組織越來(lái)越依賴自動(dòng)化工具來(lái)處理大量的文檔數(shù)據(jù)。Apache Tika 是一個(gè)強(qiáng)大的開源工具,專門用于從各種文件格式中提取文本和元數(shù)據(jù)。Spring AI也自動(dòng)集成了Tika作為文檔解析器。

環(huán)境:SpringBoot3.2.5


一、簡(jiǎn)介

文檔解析在現(xiàn)代企業(yè)和開發(fā)領(lǐng)域中應(yīng)用還是非常廣泛的,尤其是在需要從多種格式的文檔中提取有價(jià)值信息的情況下。隨著數(shù)字化轉(zhuǎn)型的加速,企業(yè)和組織越來(lái)越依賴自動(dòng)化工具來(lái)處理大量的文檔數(shù)據(jù)。Apache Tika 是一個(gè)強(qiáng)大的開源工具,專門用于從各種文件格式中提取文本和元數(shù)據(jù)。Spring AI也自動(dòng)集成了Tika作為文檔解析器。

通過使用 Tika,企業(yè)不僅可以簡(jiǎn)化文檔處理流程,還能提高數(shù)據(jù)處理的準(zhǔn)確性和效率。

Tika有哪些優(yōu)勢(shì)呢?

1. 廣泛的格式支持

Tika 支持超過 1000 種文檔格式,包括常見的 Office 文檔(如 DOCX、XLSX、PPTX)、PDF、HTML、音頻、視頻和圖像文件。

2. 易于集成

Tika 提供了一個(gè)簡(jiǎn)單易用的 Java API,可以輕松地集成到任何 Java 應(yīng)用程序中,包括 Spring Boot 應(yīng)用。

3. 內(nèi)容和元數(shù)據(jù)提取

Tika 不僅能夠提取文檔的內(nèi)容,還能提取文檔的元數(shù)據(jù),如標(biāo)題、作者、創(chuàng)建日期等。

4. 自然語(yǔ)言處理(NLP)功能

Tika 內(nèi)置了一些自然語(yǔ)言處理功能,如語(yǔ)言檢測(cè)、詞頻統(tǒng)計(jì)等。這使得 Tika 成為一個(gè)多功能工具,不僅限于文檔解析,還可以用于文本分析。

5. 批處理和自動(dòng)化

Tika 支持批處理模式,可以高效地處理大量文檔。這對(duì)于需要自動(dòng)化文檔處理流程的應(yīng)用非常有用,可以節(jié)省時(shí)間和人力資源。

6. 跨平臺(tái)兼容性

Tika 是純 Java 編寫的,因此可以在任何支持 Java 的平臺(tái)上運(yùn)行,具有很好的跨平臺(tái)兼容性。

7. 社區(qū)支持

作為 Apache 基金會(huì)的一個(gè)項(xiàng)目,Tika 擁有一個(gè)活躍的社區(qū)支持。

8. 安全性

Tika 在處理文檔時(shí)支持安全功能,如防止惡意內(nèi)容(如 XSS 攻擊)和處理加密文檔。

9. 擴(kuò)展性和插件化

Tika 設(shè)計(jì)為可擴(kuò)展的,支持通過插件來(lái)增加新的解析器和功能。

10. 輕量級(jí)

盡管功能強(qiáng)大,Tika 卻是一個(gè)相對(duì)輕量級(jí)的工具,不需要安裝復(fù)雜的依賴環(huán)境即可運(yùn)行。

接下來(lái),我們將通過幾個(gè)示例詳細(xì)介紹有關(guān)Tika的使用。

2. 實(shí)戰(zhàn)案例

Tika 提供了多種解析文件的方法。這些方法提供了不同程度的控制、靈活性和復(fù)雜性。

環(huán)境準(zhǔn)備

<properties>
  <tika.version>2.9.2</tika.version>
</properties>
<dependency>
  <groupId>org.apache.tika</groupId>
  <artifactId>tika-core</artifactId>
  <version>${tika.version}</version>
</dependency>
<dependency>
  <groupId>org.apache.tika</groupId>
  <artifactId>tika-parsers-standard-package</artifactId>
  <version>${tika.version}</version>
</dependency>
<dependency>
  <groupId>org.apache.tika</groupId>
  <artifactId>tika-parser-scientific-package</artifactId>
  <version>${tika.version}</version>
</dependency>

注意你使用的版本,可能會(huì)有些差異。

2.1 使用 Tika 門面進(jìn)行解析

Tika Facade 提供了許多快速、簡(jiǎn)便的方法,讓 Tika 對(duì)內(nèi)容進(jìn)行解析,并返回結(jié)果純文本。

public static String parseToString() throws Exception {
  Tika tika = new Tika();
  try (InputStream stream = new FileInputStream(new File("e:\\technology.docx"))) {
    return tika.parseToString(stream);
  }
}

輸出結(jié)果

圖片圖片

完整的將word文檔中的內(nèi)容按照格式解析出來(lái)。

2.2 解析文本文件

不管你要解析什么文檔格式,你都可以通過AutoDetectParser來(lái)完成解析動(dòng)作,不過這里我們使用具體的文本解析器TXTParser。

TXTParser parser = new TXTParser() ;
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata() ;
ParseContext context = new ParseContext() ;
try (InputStream stream = new FileInputStream(new File("C:\\execute script.txt"))) {
  parser.parse(stream, handler, metadata, context) ;
}
System.out.println(handler.toString()) ;
System.out.println(metadata.toString()) ;

輸出結(jié)果

圖片圖片

2.3 解析PDF文檔

與上面解析文本文檔一樣,我們只需要切換不同的解析器即可,如下示例:

PDFParser parser = new PDFParser() ;
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata() ;
ParseContext context = new ParseContext() ;
try (InputStream stream = new FileInputStream(new File("D:\\setups\\ReferenceCard.pdf"))) {
  parser.parse(stream, handler, metadata, context) ;
}
System.out.println(handler.toString()) ;
System.out.println(metadata.toString()) ;

這里僅僅是切換了解析器而已,輸出結(jié)果:

圖片圖片

2.4 使用自動(dòng)檢測(cè)解析器進(jìn)行解析

為了獲得更多控制權(quán),你可以直接調(diào)用 Tika 解析器。大多數(shù)情況下,你會(huì)希望從自動(dòng)檢測(cè)解析器開始使用,它會(huì)自動(dòng)找出你的內(nèi)容類型,然后為你調(diào)用相應(yīng)的解析器。

public static String parseAutoDetect() throws Exception {
  AutoDetectParser parser = new AutoDetectParser() ;
  BodyContentHandler handler = new BodyContentHandler() ;
  Metadata metadata = new Metadata();
  try (InputStream stream = new FileInputStream(new File("e:\\technology.docx"))) {
    parser.parse(stream, handler, metadata);
    return handler.toString();
  }
}

這同樣能正確的解析文檔內(nèi)容,在這里我們不需要使用具體文檔的解析器,而是由Tika自動(dòng)的監(jiān)測(cè)。

2.5 將文檔解析為HTML

在解析時(shí),我們可以通過使用 ToXMLContentHandler,可以以字符串形式獲取整個(gè)文檔的 XHTML 內(nèi)容。

public static String parserToXHTML() throws Exception {
  ToXMLContentHandler handler = new ToXMLContentHandler();
  
  AutoDetectParser parser = new AutoDetectParser();
  Metadata metadata = new Metadata();
  try (InputStream stream = new FileInputStream(new File("e:\\technology.docx"))) {
      parser.parse(stream, handler, metadata);
      return handler.toString();
  }
}

輸出結(jié)果

圖片圖片

保存為html后,通過瀏覽器瀏覽

圖片圖片

完美的生成HTML文檔。

2.6 定制化Tika

通過 Tika 的配置 XML,可以對(duì)使用哪些解析器以及它們的優(yōu)先級(jí)順序等進(jìn)行高度控制。如下示例配置(tika-config.xml)

<?xml versinotallow="1.0" encoding="UTF-8"?>
<properties>
  <parsers>
    <!-- 配置了默認(rèn)解析器,同時(shí)設(shè)置了不解析n哪些類型的文檔 -->
    <parser class="org.apache.tika.parser.DefaultParser">
      <!-- 這將不解析PDF文檔-->
      <mime-exclude>application/pdf</mime-exclude>
    </parser>
  </parsers>
</properties>

使用方式

TikaConfig config = new TikaConfig(new ClassPathResource("tika-config.xml").getFile());
AutoDetectParser parser = new AutoDetectParser(config) ;
// ...

當(dāng)你解析PDF文檔時(shí)將輸出如下提示:

X-TIKA:Parsed-By=org.apache.tika.parser.EmptyParser X-TIKA:Parsed-By-Full-Set=org.apache.tika.parser.EmptyParser Content-Type=application/pdf

你也可以為具體的文檔類型,自定義解析器,可如下配置:

<?xml versinotallow="1.0" encoding="UTF-8"?>
<properties>
  <parsers>
    <parser class="com.pak.PackPDFParser">
      <mime>application/pdf</mime>
    </parser>
  </parsers>
</properties>

這里定義了pdf文檔將會(huì)使用PackPDFParser進(jìn)行解析。

2.7 與Spring Boot結(jié)合

我們這里通過文件上傳的方式,將上傳的文件解析為文本數(shù)據(jù),然后輸出。

首先,配置自動(dòng)關(guān)聯(lián)文檔的解析器

@Bean
Parser parser() {
  AutoDetectParser parser = new AutoDetectParser() ;
  parser.setFallback(new TXTParser()) ;
  return parser ;
}

接下來(lái),定義Controller接口

@RestController
@RequestMapping("/tika")
public class TikaController {


  private final Parser parser ;
  public TikaController(Parser parser) {
    this.parser = parser ;
  }
  
  @PostMapping("/upload")
  public String upload(MultipartFile file) throws Exception {
    InputStream stream = file.getInputStream() ;
    BodyContentHandler handler = new BodyContentHandler();
    this.parser.parse(stream, handler, new Metadata(), new ParseContext()) ;
    return handler.toString() ;
  }
}

通過postman進(jìn)行接口調(diào)用

圖片圖片

與Spring Boot結(jié)合非常的簡(jiǎn)單也就是簡(jiǎn)單的調(diào)用相應(yīng)的API接口。

責(zé)任編輯:武曉燕 來(lái)源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2022-07-07 08:38:15

Springflowable引擎

2009-06-04 10:44:34

StrutsHibernate配合

2011-03-07 16:10:41

FireFTPFirefoxFTP

2022-05-17 09:19:17

XebianLinuxLinux 發(fā)行版

2025-01-02 11:01:13

Apache文件類型部署

2010-04-29 10:32:14

虛擬技術(shù)上海世博會(huì)

2022-04-19 20:39:03

協(xié)程多進(jìn)程

2009-07-03 13:54:38

Java Servle

2021-05-25 09:10:54

工具代碼開發(fā)

2025-02-27 08:00:00

熔斷機(jī)制微服務(wù)Spring

2025-02-17 09:32:18

2024-05-28 09:30:13

2025-02-25 08:00:00

SpringBootLua開發(fā)

2010-03-04 09:16:05

Opera版本發(fā)布

2024-05-15 08:54:04

C++類型限定符代碼

2010-07-27 09:11:38

FlexBuilder

2015-11-04 15:13:56

華為

2013-10-31 13:19:06

2021-03-17 11:29:24

物聯(lián)網(wǎng)環(huán)境數(shù)據(jù)環(huán)境風(fēng)險(xiǎn)

2009-08-02 17:26:11

以太網(wǎng)電源以太網(wǎng)供電
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)