Y a-t-il un problème avec le contenu d'un grand nombre de PDF (10 000 ou plus!)? Je voulais faire une recherche rapide (si le nom du fichier correspond au contenu, etc.).
Python 2.7 Windows7 64bit
Utilisez PDFMiner. Bien que le site Web officiel dispose d'un exemple lors de l'utilisation de l'invite de commande, Pour une raison quelconque, il n'y avait aucune information sur la façon d'importer et d'utiliser la bibliothèque, donc je suis un peu confus.
Extrayez le fichier téléchargé depuis le site officiel Dans le dossier pdfminer-20140328, cette fois c'est Windows, alors exécutez la commande suivante.
mkdir pdfminer\cmap
python tools\conv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8 pdfminer\cmap Adobe-CNS1 cmaprsrc\cid2code_Adobe_CNS1.txt
python tools\conv_cmap.py -c GBK-EUC=cp936 -c UniGB-UTF8=utf-8 pdfminer\cmap Adobe-GB1 cmaprsrc\cid2code_Adobe_GB1.txt
python tools\conv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c UniJIS-UTF8=utf-8 pdfminer\cmap Adobe-Japan1 cmaprsrc\cid2code_Adobe_Japan1.txt
python tools\conv_cmap.py -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 pdfminer\cmap Adobe-Korea1 cmaprsrc\cid2code_Adobe_Korea1.txt
python setup.py install
Si vous n'installez pas avec cette procédure, tous les japonais seront affichés comme (cid: 0000).
pdf2txt.py
# -*- coding: utf-8 -*-
import re
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
space = re.compile(ur"[ ]+")
def convert_pdf_to_txt(path, txtname, buf=True):
rsrcmgr = PDFResourceManager()
if buf:
outfp = StringIO()
else:
outfp = file(txtname, 'w')
codec = 'utf-8'
laparams = LAParams()
laparams.detect_vertical = True
device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams)
fp = file(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.get_pages(fp):
interpreter.process_page(page)
fp.close()
device.close()
if buf:
text = re.sub(space, "", outfp.getvalue())
print text
outfp.close()
convert_pdf_to_txt("TEST.pdf", "test.txt")
** PDF préparé **
résultat
ancien étang
Saute dans la grenouille
Le bruit de l'eau
Cocoa*Chocolate
Le cacao est un contenu solide obtenu en séparant un certain pourcentage de beurre de cacao de la masse de cacao.
Ou c'est une abréviation pour la poudre de cacao en poudre. Faites également fondre la poudre de cacao
Il est également utilisé comme abréviation pour les boissons salées. Comme le montre l'historique ci-dessous
Jusqu'à ce que nous commencions à séparer Coco Avatar de Khao Mass, le mot cacao
Il n'y a que du chocolat pâteux qui n'est ni solide ni liquide
Était là.
laparams.detect_vertical
semble être un paramètre important.
Pour un texte PDF vertical ou un PDF avec une structure complexe
Si ce n'est pas défini sur True, le japonais sera cassé pour chaque caractère et la structure sera sortie dans un désordre.
De plus, re.sub '' supprime l'espace obstructif. Ensuite, pour la chaîne de caractères dans la mémoire, vérifiez simplement le contenu avec l'opérateur in! Au fait, si vous passez
buf = False`` comme argument, il sera affiché sous forme de texte.
Les caractères affichés dans des caractères variantes tels que Tsuji et 逗 n'ont pas pu être correctement convertis en japonais. Il sera affiché comme (cid: 7711). Je ne connais pas encore la police cid, alors étudiez-la.
À propos, dans l'extraction de texte GhostScript, lorsque j'ai essayé d'extraire du texte de données de police qui ne sont pas sous Windows, le code de caractère de Shift_JIS avec & #; a été émis de force, donc les caractères ont été déformés (à partir de Shift_JIS - Table de correspondance Unicode). Convertissez et répondez de force). PyPDF2 ne pouvait pas bien convertir le japonais. (Officiellement dit que cela sera affiné à l'avenir.)
http://stackoverflow.com/questions/26748788/extraction-of-text-from-pdf-with-pdfminer-gives-multiple-copies
Recommended Posts