#1 Le 07/04/2016, à 10:49
- fralyon
Renommer un pdf en fonction de son contenu
Bonjour a tous,
Je vous fais part de mon problème, nous sommes 2 à la maison à ranger des papiers, c'est déjà assez chiant mais en plus puisque personne n'a le même système de classement c'est en plus compliqué.
Nom premier script m'a permis d'OCRiser tout mes PDF (ouf, on peut enfin retrouver un document "perdu")
Maintenant je veux allez plus loin en donnant automatiquement un nom significatif a chaque fichier (voir de le classer automatiquement)
l'idee serait donc la suivante :
For le premier i.pdf fichier trouvé dans le dossier,
Si Fichier i.pdf contient les mots Impots et habitation alors renomme le en TaxeHabitation_i.pdf
Si Fichier i.pdf contient les mots EDF et facture alors renomme le en FactureEDF_i.pdf
Si Fichier i.pdf contient les mots Orange et facture alors renomme le en FactureOrange_i.df
...
...
Sinon renomme le en ARenommerManuellement.pdf
Déplacer le fichier dans le repertoir FichierRenomme
Done
je penses qu'il faut lister manuelllement les cas de façon à "maitriser" le classement. Je ne vois pas bien comment faire pour rendre le script facilement modifiable (sans avoir une imbrication infernal de if). Si quelqu'un a déjà travaillé sur le sujet je suis preneur.
L'objectif final et d'avoir des fichiers bien classés pour maitirser ses archives dans les règles de l'art pour pouvoir les purger.
Hors ligne
#2 Le 07/04/2016, à 12:41
- J5012
Re : Renommer un pdf en fonction de son contenu
boucle type :
select condition 1 2 3 4 etc
case renomme 1 2 3 4 etc
tu peux faire la detection avant creation du pdf , à la sortie de la conversion ocr dans le fichier temporaire cree par tesseract ...
Hors ligne
#3 Le 07/04/2016, à 12:48
- serged
Re : Renommer un pdf en fonction de son contenu
- Pour extraire le texte du PDF, tu peux utiliser pdftotext. genre :
text=/tmp/document
pdftotext i.pdf>$text
- ensuite chercher les mots-clefs avec grep
- faire une suite de if / elif
if [ grep -i impots $text ] && [ grep -i habitation $text ] ; then
mv i.pdf TaxeHabitation_i.pdf
elif [ grep -i facture $text ] && [ grep -i edf $text ] ; then
...
fi
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
Hors ligne
#4 Le 07/04/2016, à 21:29
- fralyon
Re : Renommer un pdf en fonction de son contenu
j'imagine maintenant une autre approche avec l'utilisation d'un filtre bayésien
https://pypi.python.org/pypi/simplebayes/1.5.8
qui pourrait permettre un apprentissage du contenu des dossiers afin de classer au plus juste
Initialisation du filtre bayesien avec cache
import simplebayes
bayes = simplebayes.SimpleBayes(cache_path='/Archive/cache/')
# Cache file is '/my/cache/_simplebayes.pickle'
# Default cache_path is '/tmp/'
if not bayes.cache_train():
# pour chaque catégorie on initialise les principaux mots clefs attendus
bayes.train('103010', 'Impots taxe habitation ...')
bayes.train('301010', 'GMF Lyon .................')
bayes.train('901030', 'ELIPSO RSI ...............')
bayes.train('......', '..........................')
....
On répète pour tous les répertoires dans lesquels on va classer des documents
On appose la catégorie attendue sur le fichier
assert bayes.classify('... GMF ...Lyon...') == 301010
Je déplace le fichier catégorisé dans le dossier adhoc /30_Assurance/10_Appartement/10_Attestation
La catégorie est un code qui correspond
/10 Logement/10 Consommations/10 Telephone
/20 Electricite
/30 Gaz
..
/10 Travaux ..
.. ..
/20 Banque .. ..
/30 Assurances/10 Appartement/10 Attestation
/50 Impots .. ..
.. .. ..
Si vous avez des idées pour le code je suis preneur car je suis une grosse buse
Hors ligne