citations

Conversion de txt / fichiers tesseract en html + extraction e citations

https://github.com/bigboss21x/citations

Science Score: 18.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (4.3%) to scientific vocabulary
Last synced: 7 months ago · JSON representation ·

Repository

Conversion de txt / fichiers tesseract en html + extraction e citations

Basic Info
  • Host: GitHub
  • Owner: BigBoss21X
  • Default Branch: master
  • Homepage:
  • Size: 1000 KB
Statistics
  • Stars: 0
  • Watchers: 2
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 11 years ago · Last pushed over 14 years ago
Metadata Files
Readme Citation

readme.md

Glossaire

  • Répertoire source: répertoire dans lequel se trouvent les images à numériser.

Installation

À un moment où un autre le projet utilise les dépendances suivantes:

Général

  • tesseract 3, pour l'OCR.
  • imagemagick, pour la conversion des images en format TIF (pour tesseract)

Il devrait être possible de les installer en utilisant le gestionnaire de paquets de votre distribution.

Python

  • jinja2, la librairie utilisée pour convertir les documents en HTML.
  • numpy, la librairie de calcul.
  • BeautifulSoup, le parser de xml qui est utilisé pour lire les résultats.

Il est conseillé d'installer ces librairies dans un environnement virtuel python.

# virtualenv env --no-site-packages

Pip est ensuite utilisé pour installer les librairies.

# pip install jinja2
# pip install numpy
# pip install BeautifulSoup

Ruby

Les citations sont analysées et converties en format BibTeX par le logiciel anystyle-parser. * anystyle-parser * latex-decode * wapiti-ruby

Pour avoir les dernières versions, celles-ci peuvent être clonées depuis github:

Dans le répertoire de votre choix:

# git clone https://github.com/inukshuk/anystyle-parser.git
# git clone https://github.com/inukshuk/latex-decode.git
# git clone https://github.com/inukshuk/wapiti-ruby.git

Elles peuvent ensuite êtres installées en invoquant de la manière suivante. Par exemple, pour anystyle-parser:

# gem build anystyle-parser.gemspec

Le gem résultant peut ensuite être installé:

# sudo gem install anystyle-parser-0.0.8.gem

Utilisation

: Si vous utilisez un environnement virtuel, vous devez l'activer au préalable. Si vous l'avez appellé "env", vous pouvez l'activer comme suit:

# . env/bin/activate

Les fichiers seront analysés dans l'ordre alphanumérique. Il est donc important que les noms de fichiers reflètent l'ordre des pages.

Initialiser un répertoire

Initialiser le répertoire consiste à exécuter tesseract pour produire les fichiers texte et les boxfiles à partir de toutes les images présentes dans le répertoire racine.

# python citations.py --initialiser-répertoire /chemin/vers/répertoire/racine

Les fichiers box et txt seront créés dans la répertoire spécifié. Les fichiers présents dans le répertoire racine doivent être en format tif. Si jamais il sont en format png peut être faite par le script:

# python citations.py --initialiser-repertoire /chemin/vers/répertoire/racine --conversion-tif

Si les fichiers sont dans un autre format, elle devra être faite «manuellement»

$ mogrify -format tif /chemin/vers/répertoire/racine/*.png

Analyser les fichiers produits par tesseract

L'analyse de répertoire est l'action par défaut qui est faite par le script. Un seul paramètre est requis: la racine du document

$ python citations.py --racine-document /chemin/vers/répertoire

Les résultats de l'analyse seront enregistrés dans /chemin/vers/répertoire/resultats.xml

Spécifier des configurations pour les evaluateurs d'appel

$ python citations.py --racine-document /chemin/vers/répertoire --config-evaluateurs /chemin/vers/configuration.ini

Où configuration.ini est le fichier ini contenant les configurations des évaluateurs d'appel. Pour plus d'inforamtion, voir evaluateurs_appel.ini fourni dans la racine de ce dépôt.

Créer le document HTML correspondant

$ python citations.py --racine-document /chemin/vers/répertoire --creer-html

Le document HTML sera disponible dans /chemin/vers/répertoire.

Créer un correctif

Pour comparer les résultats obtenus par l'évaluateur d'appel, il faut d'abord créer un correctif:

$ python citations.py --racine-document /chemin/vers/répertoire --creer-correctif

Un fichier nommé correctif.xml sera créé dans le répertoire. Un appel est présent par page. Cette balise peut être enlevée ou dupliquée dépendemment du nombre d'appel dans la page.

Comparer les résultats obtenus à ceux du correctif

Une fois le correctif complété, on souhaitera évaluer les résultats obtenus:

$ python citations.py --comparaison-resultats /chemin/vers/correctif.xml /chemin/vers/resultats.xml /chemin/vers/comparatif.xml

Où: * correctif.xml est le fichier correctif créé manuellement * resultats.xml contient les résultats de l'évaluateur d'appels de notes de bas de page * comparatif.xml sera créé et contiendra les résultats de comparaison.

L'ordre des fichiers est important: les citations manquantes ou superflues seront évaluées en fonction du premier fichier. Si les fichiers sont inversés, les résultats seront aussi inversés.

Extraire les références

Le module d'extraction de références peut être testé de la manière suivante:

$ python bibliographie/bibliographie.py /chemin/vers/fichier/BibTeX

Un fichier BibTeX de test est fourni et est disponible à:

$ python bibliographie/bibliographie.py bibliographie/biblio.bib

Étiquettage des ressources bibliographiques

Un lanceur pour la librairie anystyle-wrapper a été écrit en ruby. Il peut être lancé avec la commande suivante:

$ ruby lib/anystyle-wrapper.rb "référence"

Où référence est une référence bibliographique extraite du texte, par exemple

$ ruby lib/anystyle-wrapper.rb "Karl Marx, l\'idéologie allemande, Paris, La Pléiade, 1982, p. 1085."

Owner

  • Login: BigBoss21X
  • Kind: user

Citation (citations.py)

#-*- coding:utf-8 -*-
#!/usr/bin/python

import os
import sys
import argparse
import logging
import subprocess, shlex
import shutil
from datetime import datetime

from document import modele
from time import time
if __name__ == '__main__':
    #Configure le logger
    now = datetime.now()
    filename = "log/session-%02d%02d%02d-%02d%02d%02d.log" \
            % (now.day, now.month, now.year, now.hour, now.minute, now.second)
    logging.basicConfig(filename=filename, level=logging.DEBUG)

    parser = argparse.ArgumentParser(description=\
                                        "Numérise un ensemble d'images")
    parser.add_argument('--conversion-tif', action='store_true',
      help="Convertit les images contenues dans les répertoires en format tif")
    parser.add_argument('--initialiser_repertoire', action='store',
      help="Crée les fichiers tesseract et boxfiles à partir des \
images d'un répertoire")
    parser.add_argument('--creer-correctif', action='store_true',
        help="Crée les fichiers de correctifs")
    parser.add_argument('--racine-document', action='store',
        help="Crée le document résidant à la racine")
    parser.add_argument('--creer-html', action='store_true',
        help='Crée le document HTML correspondant')
    parser.add_argument('--comparaison', nargs=3,
        help='Compare les deux fichiers')
    parser.add_argument('--config-evaluateurs', action='store',
        help='Permet de spécifier la configuration des évaluateurs d\'appel')
    

    parametres = parser.parse_args(sys.argv[1:len(sys.argv)])

    if parametres.comparaison:
        from resultats.analyse import FichierResultats, ComparateurResultats
        ref_markup = "".join(open(parametres.comparaison[0]).readlines())
        cmp_markup = "".join(open(parametres.comparaison[1]).readlines())

        ref = FichierResultats(ref_markup)
        cmp = FichierResultats(cmp_markup)

        res = ComparateurResultats(ref, cmp)
        res.output(parametres.comparaison[2])

    if parametres.creer_correctif:
        if not parametres.racine_document:
            print "Vous devez spécifier la racine du document pour pouvoir\
 créer le fichier de correctif"
            sys.exit(1)
        logging.info("Création du correctif")
        racine = parametres.racine_document
        fichiers = sorted(set([os.path.splitext(f)[0] for f in os.listdir(racine)]))
        with open('%s/correctif.xml' % racine, 'w') as f:
            f.write("<document>");
            for fichier in fichiers:
                f.write("\t<page>\n")
                f.write("\t\t<titre>%s%s</titre>\n" % (racine, fichier))
                f.write("\t\t<appel>\n")
                f.write("\t\t\t<indice></indice>\n")
                f.write("\t\t\t<terme></terme>\n")
                f.write("\t\t</appel>\n")
                f.write("\t</page>\n")
            f.write("</document>\n")
        print "création du correctif"

    if parametres.racine_document:
        print "Initialisation du document"
        logging.info("Initialisation du document")
        config = None
        if parametres.config_evaluateurs:
            config = parametres.config_evaluateurs

        t1 = time()
        d = modele.Document(parametres.racine_document, config=config)
        t2 = time()
        print "Document créé en %s" % (t2 - t1)
        #d.debug()
        d.output_resultats()
        if parametres.creer_html:
            d.as_html()
            try:
                os.mkdir("%s/css" % parametres.racine_document)
            except OSError, e:
                """Le dossier existe"""
                logging.warn("Le dossier [%s] existe" %\
                        parametres.racine_document)
            shutil.copy('document/templates/page.css',\
                    "%s/css" % parametres.racine_document)

    if parametres.initialiser_repertoire:
        repertoire = parametres.initialiser_repertoire
        logging.info("Initialisation du répertoire %s" % repertoire)
        ## Fichiers initialement présents dans la racine.
        fichiers_racine = [f for f in os.listdir(repertoire)]

        tess_line = '/usr/bin/tesseract "%s/%s.tif" "%s/%s" -l fra'
        tess_box = "%s makebox" % tess_line

        #Crée une liste de tuples contenant, pour chacun des fichiers du
        #répertoire, la commande tesseract pour numériser et la commandes
        #tesseract pour créer le boxfile.
        commandes = [(tess_line % (repertoire, os.path.splitext(f)[0],
                                   repertoire, os.path.splitext(f)[0]),
                      tess_box % (repertoire, os.path.splitext(f)[0],
                                  repertoire, os.path.splitext(f)[0]))
                                     for f in os.listdir(repertoire)]

        #Les fichiers numérisés sont souvent en format png, mais tesseract
        #exige le format tif
        if parametres.conversion_tif:
            cmd_mogrify = "mogrify -format tif %s/*.png" % parametres.initialiser_repertoire
            logging.info(cmd_mogrify)
            print cmd_mogrify
            args_mogrify = shlex.split(cmd_mogrify)
            print args_mogrify
            p = subprocess.call(args_mogrify)
    
        for tess_cmd, box_cmd in commandes:
            logging.info(tess_cmd)
            subprocess.call(shlex.split(tess_cmd))
            logging.info(box_cmd)
            subprocess.call(shlex.split(box_cmd))

GitHub Events

Total
Last Year