自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

環(huán)境:SpringBoot3.2.5


一、簡介

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

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

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

1. 廣泛的格式支持

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

2. 易于集成

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

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

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

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

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

5. 批處理和自動化

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

6. 跨平臺兼容性

Tika 是純 Java 編寫的,因此可以在任何支持 Java 的平臺上運行,具有很好的跨平臺兼容性。

7. 社區(qū)支持

作為 Apache 基金會的一個項目,Tika 擁有一個活躍的社區(qū)支持。

8. 安全性

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

9. 擴展性和插件化

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

10. 輕量級

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

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

2. 實戰(zhàn)案例

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

環(huá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>

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

2.1 使用 Tika 門面進行解析

Tika Facade 提供了許多快速、簡便的方法,讓 Tika 對內(nèi)容進行解析,并返回結(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)容按照格式解析出來。

2.2 解析文本文件

不管你要解析什么文檔格式,你都可以通過AutoDetectParser來完成解析動作,不過這里我們使用具體的文本解析器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 使用自動檢測解析器進行解析

為了獲得更多控制權(quán),你可以直接調(diào)用 Tika 解析器。大多數(shù)情況下,你會希望從自動檢測解析器開始使用,它會自動找出你的內(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自動的監(jiān)測。

2.5 將文檔解析為HTML

在解析時,我們可以通過使用 ToXMLContentHandler,可以以字符串形式獲取整個文檔的 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,可以對使用哪些解析器以及它們的優(yōu)先級順序等進行高度控制。如下示例配置(tika-config.xml)

<?xml versinotallow="1.0" encoding="UTF-8"?>
<properties>
  <parsers>
    <!-- 配置了默認解析器,同時設(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) ;
// ...

當你解析PDF文檔時將輸出如下提示:

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文檔將會使用PackPDFParser進行解析。

2.7 與Spring Boot結(jié)合

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

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

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

接下來,定義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進行接口調(diào)用

圖片圖片

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

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

2022-07-07 08:38:15

Springflowable引擎

2025-01-02 11:01:13

Apache文件類型部署

2009-06-04 10:44:34

StrutsHibernate配合

2011-03-07 16:10:41

FireFTPFirefoxFTP

2022-05-17 09:19:17

XebianLinuxLinux 發(fā)行版

2021-05-25 09:10:54

工具代碼開發(fā)

2010-04-29 10:32:14

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

2022-04-19 20:39:03

協(xié)程多進程

2009-07-03 13:54:38

Java Servle

2025-02-27 08:00:00

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

2025-02-17 09:32:18

2025-02-25 08:00:00

SpringBootLua開發(fā)

2024-05-28 09:30:13

2013-10-31 13:19:06

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

華為

2009-08-02 17:26:11

以太網(wǎng)電源以太網(wǎng)供電

2021-03-17 11:29:24

物聯(lián)網(wǎng)環(huán)境數(shù)據(jù)環(huán)境風險
點贊
收藏

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