Apache Tika

Apache Tika est une librairie permettant d'extraire le contenu texte de nombreux type de fichiers (PDF, documents Office, documents iWorks, ...).
Il permet d'extraire leur METADATA mais aussi d'en déterminer le type, est-ce réellement un PDF ou un docx renommé ?

Récupération avec Maven

Il y a 2 artifacts possibles, tika-core et tika-parser.
Le 1er contient toutes les interfaces et sert principalement à faire la détection de type de fichier, alors que le 2ème sert pour l'extraction de texte et va récupérer tous les parsers possibles.
A titre d'exemple, si l'on tente d'extraire du texte d'un PDF juste en ayant tika-core, nous aurons une chaine vide.

  <dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>1.15</version>
  </dependency>
 <dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>1.15</version>
  </dependency>

Détection de type

Apache Tika expose plusieurs façons de détecter un type:

  • Mime Magic Detection : détermine le type en fonction des premiers octets du fichier
  • Resource Name Based Detection : basé sur le nom du fichier
  • Container Aware Detection : parfois le Mime Magic n'est pas suffisant (comme pour les fichiers iWorks qui sont en fait un ZIP contenant des fichiers XML). Il est, dans ce cas, nécessaire de récupérer les parsers afin de faire une analyse plus poussée mais du coup plus couteuse.

Si seule la librairie tika-core est disponible, les détecteurs par défaut seront Mime Magic et Resource Name Based. Si c'est tika-parsers, alors d'autres détecteurs seront ajoutés pour s'assurer des types (cf exemple iWorks ci-dessus).

Apache Tika fournit différentes méthodes et interface pour la détection, on peut, par exemple pour le guider, lui fournir le type Mime déterminé par le navigateur (dans le cas d'un fichier importé).
Mais il y a aussi une façade très simple d'utilisation qui fait tout pour nous :

Path path = Paths.get(args[0]); // Récupération chemin fichier
Tika tika = new Tika(); // Création façade
System.out.println(path.getFileName());
System.out.println(tika.detect(path)); // Détection de type

Exemples :

  • Sortie console d'un fichier PDF :

    fichierpdf.pdf
    application/pdf

  • Sortie console d'un fichier PDF renommé en .jpg :

    fichierpdf.jpg
    application/pdf

  • Sortie console d'un fichier doc :

    test.doc
    application/msword

  • Sortie console d'un fichier doc renommé en .pdf (librairie tika-core) :

    test.pdf
    application/x-tika-msoffice

  • Sortie console d'un fichier doc renommé en .pdf (librairie tika-parsers) :

    test.pdf
    application/msword

Extraction de texte

Pour rappel, la librairie tika-parsers est nécessaire.

Comme pour la détection de type, Apache Tika fournit plusieurs manières d'extraire du texte, mais nous pouvons aussi utiliser la même façade.

 Path path = Paths.get(args[0]); // Récupération chemin fichier
 Tika tika = new Tika(); // Création façade
 System.out.println(path.getFileName());
 System.out.println(tika.parseToString(path)); // Extraction du texte

Exemples :

  • Sortie console de notre fichier doc :

    test.doc
    Un fichier qui contient du texte

  • Sortie console de notre fichier doc renommé en .pdf :

    test.pdf
    Un fichier qui contient du texte

De plus

Apache Tika permet de gérer les détecteurs à utiliser ou encore des types Mime personnalisés.
Il permet aussi de faire de la détection de langue et de la traduction.
Un JAR exécutable est disponible à télécharger sur le site. Ses différentes fonctionnalités sont ainsi utilisables en ligne de commande.

Source : https://tika.apache.org/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *