Letztes Mal habe ich pdfminer verwendet, um von pdf nach txt zu konvertieren. Es funktionierte jedoch aufgrund des Problems des Ziel-PDF nicht. Dieses Mal werden wir daran arbeiten, das Problem mit Pyocr zu lösen.
Vorheriger Artikel https://qiita.com/ptxyasu/items/4180035bd0ccd789c858
Text aus pdf extrahieren.
Dieses Mal dachte ich darüber nach, Text mit Pyocr zu extrahieren. Pyocr konvertierte jedoch auch mit pdf2image von PDF zu Bild, um Text aus dem Bild zu extrahieren.
[pyocr] https://gitlab.gnome.org/World/OpenPaperwork/pyocr [pdf2image]https://github.com/Belval/pdf2image
Die Einführung von Tesseract und Pyocr erfolgte unter Bezugnahme auf die folgenden Artikel. https://qiita.com/nabechi6011/items/3a367ca94dbd208efcc7 https://github.com/tesseract-ocr/tesseract/wiki
Ist. Das Programm wird am Ende des Artikels gezeigt.
Eingabe: object1.pdf
Ausgabe
object1.txt
8 CLASSES AND OBJECT-ORIENTED PROGRAMMING
We now turn our attention to our last major topic related to writing programs in
Python: using classes to organize programs around modules and data
abstractions.
Classes can be used in many different ways. In this book we emphasize using
them in the context of object-oriented programming. The key to object-
oriented programming is thinking about objects as collections of both data and
the methods that operate on that data.
The ideas underlying object-oriented programming are about forty years old, and
have been widely accepted and practiced over the last twenty years or so, In the
mid-1970s people began to write articles explaining the benefits of this approach
to programming. About the same time, the programming languages SmallTalk
(at Xerox PARC) and CLU (at MIT) provided linguistic support for the ideas. But
it wasn’t until the arrival of C++ and Java that it really took off in practice.
We have been implicitly relying on object-oriented programming throughout
most of this book. Back in Section 2.1.1 we said “Objects are the core things
that Python programs manipulate. Every object has a type that defines the
kinds of things that programs can do with objects of that type.” Since Chapter
5, we have relied heavily upon built-in types such as list and dict and the
methods associated with those types. But just as the designers of a
programming language can build in only a small fraction of the useful functions,
they can only build in only a small fraction of the useful types. We have already
looked at a mechanism that allows programmers to define new functions; we
now look at a mechanism that allows programmers to define new types.
8.1
Abstract Data Types and Classes
The notion of an abstract data type is quite simple. An abstract data type is a
set of objects and the operations on those objects. These are bound together so
that one can pass an object from one part of a program to another, and in doing
so provide access not only to the data attributes of the object but also to
operations that make it easy to manipulate that data.
The specifications of those operations define an interface between the abstract
data type and the rest of the program. The interface defines the behavior of the
operations—what they do, but not how they do it. The interface thus provides
an abstraction barrier that isolates the rest of the program from the data
structures, algorithms, and code involved in providing a realization of the type
abstraction.
Programming is about managing complexity in a way that facilitates change.
There are two powerful mechanisms available for accomplishing this:
decomposition and abstraction. Decomposition creates structure in a program,
and abstraction suppresses detail. The key is to suppress the appropriate
In der 10. Zeile wurden Jahre oder so, In der,. Aber anders als das war es richtig. Nun, es ist perfekt.
Was ich mit dem vorherigen pdfminer nicht machen konnte, kann mit pyocr (tesseract) gemacht werden!
Da es diesmal mit dem Eingabebild erstellt wurde, denke ich, dass Text aus dem PDF extrahiert werden kann, das durch Scannen der Drucksachen erstellt wurde. Auch dieses Mal habe ich vor, diesen extrahierten Text in die Google-Übersetzung einzufügen. Das nächste Mal möchte ich Googletrans verwenden, um es programmgesteuert auf Japanisch umzustellen.
Das Programm wurde auf github https://github.com/ptxyasu/pdf2text veröffentlicht
Der folgende pdf2text_pyocr.py wird ausgeführt. Ändern Sie die eingegebene PDF-Datei mit convert_from_path in image. Übergeben Sie dann die Bilder nacheinander an pyocr_read.
pdf2text_pyocr.py
from pdf2image import convert_from_path
from pyocr_read import pyocr_read
path = input("Please input pdf name\n")
images = convert_from_path(path)
i = 0
path,e = path.split(".")
pdf2read = pyocr_read(path)
for image in images:
pdf2read.oneshot_read(image)
i += 1
Die folgende Datei pyocr_read.py wird aus dem obigen pdf2text_pyocr aufgerufen. Init () bestimmt das Pyocr-Tool und erstellt ein Verzeichnis zum Speichern der Ergebnisse. Es bestimmt auch die zu erkennende Sprache. Die unter "Verfügbare Sprachen" angezeigten Sprachen können ausgewählt werden. Zum Beispiel ist Englisch eng und Japanisch jpn Extrahieren Sie dann den Text aus dem von pdf2text_pyocr empfangenen Bild mit pyocr und schreiben Sie die Ausgabe in eine Datei.
pyocr_read.py
import pyocr
import pyocr.builders
import os
class pyocr_read(object):
def __init__(self,path):
self.path = path
tools = pyocr.get_available_tools()
if len(tools) == 0:
print("No OCR tool found")
sys.exit(1)
self.tool = tools[0]
langs = self.tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
self.lang = input("Please input language you want to recognize : ")
if os.path.exists("./result") != True:
os.mkdir("./result")
return
def oneshot_read(self,img):
txt = self.tool.image_to_string(img, lang=self.lang, builder=pyocr.builders.TextBuilder())
print(txt)
file = open("./result/"+ self.path + ".txt",mode = "a",encoding = "utf-8")
file.write(txt+"\n")
Recommended Posts