FunstaffTikaBundle: Wrapper pour Tika

Aujourd’hui, je vous propose un petit bundle Symfony2 de ma création. Celui-ci permet d’extraire du contenu et des metadatas sur vos fichiers. Vous avez la liste des fichiers supportés à cette adresse.

Installation

Clone:

git clone https://github.com/Funstaff/FunstaffTikaBundle vendor/bundles/Funstaff/TikaBundle

Ajout en submodule:

git submodule add https://github.com/Funstaff/FunstaffTikaBundle vendor/bundles/Funstaff/TikaBundle

Télécharger le binaire Tika (runnable jar) à cette adresse et déplacer le dans le path de votre choix que vous renseignerez dans votre configuration.

Nous allons ajouter le namespace « Funstaff » dans le fichier autoload.php

$loader->registerNamespaces(array(
    ...
    'Funstaff' => __DIR__.'/../vendor/bundles',
));

Activons maintenant le bundle:

public function registerBundles()
{
    $bundles = array(
        ...
        new Funstaff\TikaBundle\FunstaffTikaBundle(),
    );
}

Sa configuration est très simple. Il vous suffit de déclarer ces éléments dans votre fichier config.yml:

funstaff_tika:
    tika_path:      /path/to/tika-app-1.0.jar
    output_format:  ~
    logging:        ~

Options possibles pour ces paramètres:
tika_path: Chemin sur le binaire Tika
output_format: xml, html ou text (défaut: xml)
jogging: true ou false (si non défini, utilise le paramètres jogging du Symfony2)

Utilisation

Dès maintenant, vous avez accès au service « funstaff.tika ». Voici comment l’utiliser.

$tika = $this->get('funstaff.tika')
        ->setOutputFormat('text')
        ->addDocument('foo', '/path/to/foo')
        ->extractContent();

Dans l’exemple ci-dessus, nous avons fixé le format de sortie au format texte, ajouté le document foo et lancer l’extraction. Nous allons maintenant pouvoir récupérer les informations:

foreach ($tika->getDocuments() as $document) {
    $content = $document->getContent();
}

Vous pouvez ajouter plusieurs documents en rajoutant plusieurs lignes « addDocument ».

Fonctions existantes pour l’extraction:
extractContent: Uniquement le texte
extractMetadata: Uniquement les metadata
extractAll: Texte et métadata

Exemple avec la récupération du texte et des metadatas:

foreach ($tika->getDocuments() as $document) {
    $content = $document->getContent();
    $metadata = $document->getMetadata();
    $author = $metadata->get('Author');
}

Voilà, nous avons effectué le tour du propriétaire. Si ce bundle vous intéresse, vous le trouverez sur github à l’adresse suivante: FunstaffTikaBundle

Si vous désirez me laisser votre feedback: Github issue

Share