Gibt es ein Problem mit dem Inhalt einer großen Anzahl von PDFs (10.000 oder mehr!)? Ich wollte eine schnelle Suche durchführen (ob der Dateiname mit dem Inhalt übereinstimmt usw.).
Python 2.7 Windows7 64bit
Verwenden Sie PDFMiner. Obwohl die offizielle Website ein Beispiel für die Verwendung der Eingabeaufforderung enthält, Aus irgendeinem Grund gab es keine Informationen zum Importieren und Verwenden der Bibliothek, daher bin ich etwas verwirrt.
Extrahieren Sie die vom Beamten heruntergeladene Datei Im Ordner pdfminer-20140328 ist diesmal Windows. Führen Sie daher den folgenden Befehl aus.
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
Wenn Sie mit diesem Verfahren nicht installieren, werden alle Japaner wie folgt angezeigt (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")
** Vorbereitetes PDF **
Ergebnis
alter Teich
Spring in den Frosch
Das Geräusch von Wasser
Cocoa*Chocolate
Kakao ist ein Feststoffgehalt, der durch Abtrennen eines bestimmten Prozentsatzes von Kakaobutter von der Kakaomasse erhalten wird.
Oder es ist eine Abkürzung für das pulverisierte Kakaopulver. Schmelzen Sie auch das Kakaopulver
Es wird auch als Abkürzung für herzhafte Getränke verwendet. Wie in der Geschichte unten gezeigt
Bis wir anfingen, Coco Avatar von Khao Mass, dem Wort Kakao, zu trennen
Es gibt nur pastöse Schokolade, die weder fest noch flüssig ist
War dort.
laparams.detect_vertical
scheint ein wichtiger Parameter zu sein.
Für vertikalen PDF-Text oder PDF mit einer komplizierten Struktur
Wenn dies nicht auf True gesetzt ist, wird Japanisch für jedes Zeichen unterbrochen und die Struktur wird in einem Durcheinander ausgegeben.
Außerdem entfernt "re" den störenden Raum.
Überprüfen Sie dann für die Zeichenfolge im Speicher einfach den Inhalt mit dem Operator in!
Übrigens, wenn Sie "buf = False" als Argument übergeben, wird es als Text ausgegeben.
Zeichen, die in verschiedenen Zeichen wie Tsuji und 逗 angezeigt werden, konnten nicht gut in Japanisch konvertiert werden. Es wird wie folgt angezeigt (cid: 7711). Ich kenne die CID-Schrift noch nicht, also studiere sie.
Übrigens, bei der GhostScript-Textextraktion wurde beim Versuch, Text von Schriftdaten zu extrahieren, die nicht in Windows enthalten sind, der Zeichencode von Shift_JIS mit & #; zwangsweise ausgegeben, sodass die Zeichen verstümmelt wurden (aus der Shift_JIS - Unnicode-Korrespondenztabelle). Zwangskonvertieren und reagieren). PyPDF2 konnte Japanisch nicht gut konvertieren. (Offizieller sagt auch, dass dies in Zukunft verfeinert wird.)
http://stackoverflow.com/questions/26748788/extraction-of-text-from-pdf-with-pdfminer-gives-multiple-copies
Recommended Posts