citations
Conversion de txt / fichiers tesseract en html + extraction e 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
Repository
Conversion de txt / fichiers tesseract en html + extraction e citations
Statistics
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
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
- Repositories: 146
- Profile: https://github.com/BigBoss21X
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))