Texterkennung mit OCR und VBA

Wer sich die Mühe macht, Dokumente wie etwa seine Geschäftskorrespondenz zu scannen, möchte möglicherweise auch auf die darin enthaltenen Texte zugreifen. Mit Access, VBA und der passenden Bibliothek ist das ein Kinderspiel: Access im Unternehmen zeigt, wie Benutzer von Access 2003 ihre Anwendung kostenlos um ein VBA-gesteuertes OCR-Tool zur Texterkennung erweitern.

Seit Office XP liefert Microsoft mit seinen Paketen ein Steuerelement namens Microsoft Office Document Imaging Viewer aus, das zusammen mit der Microsoft Office Document Imaging x.0 Type Library ein interessantes Gespann zur Anzeige und Verarbeitung von gescannten Dokumenten liefert. Damit kann man ins digitale Format überführte Dokumente erst richtig wertvoll machen: Die Methoden der genannten Bibliothek ermöglichen nämlich das Erkennen der in den Dokumenten enthaltenen Texte.

Interessant ist das für viele Anwendungen: In einer Vertragsverwaltung etwa kann man es sich sparen, Vertragsinhalte zusammengefasst in Text- oder Memofeldern einer Tabelle zu speichern, um später danach zu suchen – stattdessen liest man einfach den kompletten Vertragstext in ein Memofeld ein. Oder man erzeugt direkt eine Tabelle mit den enthaltenen Wörtern und verknüpft diese mit dem jeweiligen Vertragsdatensatz – so lässt sich gar eine Volltextsuche realisieren.

Hilfe herunterladen

Die Hilfe zur Bibliothek Microsoft Office Document Imaging 11.0 Type Library wird nicht standardmäßig mitinstalliert. Sie können diese aber unter [1] herunterladen und dann im Verzeichnis C:\Program Files\Microsoft Office 2003 Developer Resources\MODI speichern.

Die Hilfe ist leider nicht im VBA-Editor integriert; Sie müssen Informationen zu den Objekten, Methoden, Eigenschaften und Ereignissen also von Hand statt per F1 heraussuchen.

Dokumente anzeigen

Vor der Texterkennung sieht man immer gerne, ob man aktuell überhaupt das richtige Dokument beackert. Daher fügen Sie einem neuen Formular namens frmOCR zunächst den Microsoft Office Document Imaging Viewer hinzu (siehe Bild 1) und ändern seinen Namen auf ctlMODI. Legen Sie dann eine Schaltfläche namens cmdDokumentOeffnen hinzu, die folgende Ereignisprozedur auslöst. Die hier verwendete Funktion OpenFileName zum Anzeigen des Datei-Dialogs finden Sie im Modul mdlTools der Beispieldatenbank (s. Listing 1).

Listing 1: Dokument öffnen

Private Sub cmdDokumentOeffnen_Click()
     Me.ctlMODI.FileName = OpenFileName(CurrentProject.Path, _
"Dokument öffnen:", "Tagged Image File (*.tif)") End Sub
pic001.tif

Bild 1: Hinzufügen des Steuerelements zum Anzeigen von Dokumenten

Damit haben Sie auch schon die erste Methode des MODI-Steuerelements kennen gelernt – nämlich die zum Anzeigen eines im Dateisystem gespeicherten Dokuments.

Obige Routine greift direkt über Me!ctlMODI auf das Steuerelement zu, was nicht von IntelliSense unterstützt wird, aber letztendlich zuverlässiger ist. Möchten Sie IntelliSense bei der Programmierung einsetzen, legen Sie eine passende Objektvariable für den Verweis auf das Steuerelement an und weisen Sie der Variablen in der Ereignisprozedur Beim öffnen des Formulars das Steuerelement über dessen Object-Eigenschaft zu. In der Folge verwenden Sie dann die Objektvariable objMODI für den Zugriff auf das Steuerelement (siehe Bild 2).

pic002.tif

Bild 2: Original und Fälschung

Das Laden eines Dokuments funktioniert nun, doch leider nur einmal: Das öffnen eines weiteren Dokuments ist nicht möglich; erst nach Beenden und Neustarten der Anwendung geht dies wieder. Allerdings hilft ein kleiner Umweg, der gleichzeitig weitere Elemente der Bibliothek offenbart. Die folgende Routine erzeugt zunächst ein Document-Objekt und füllt es über die Create-Methode mit der gewählten Datei. Schließlich weist sie die so geladene Datei dem Steuerelement ctlMODI zu.

Nun funktioniert das Laden von Dokumenten, aber die Ansicht weiß noch nicht zu gefallen, denn sie zeigt lediglich einen Ausschnitt des Dokuments. Zum Anpassen der Ansicht verwenden Sie die FitMode-Eigenschaft, die fünf Werte akzeptiert:

  • 0: Free
  • 1: By Width
  • 2: By Height
  • 3: By Window
  • 4: By Textwidth

Listing 2: Dokument öffnen mit Objektvariable

Dim objMODI As MODI.MiDocView
Private Sub Form_Open(Cancel As Integer)
     Set objMODI = Me!ctlMODI.Object
End Sub
Private Sub cmdDokumentOeffnen_Click()
     objMODI.FileName = OpenFileName(CurrentProject.Path, _
         "Dokument öffnen:", "Tagged Image File (*.tif)")
End Sub

Listing 3: Diese Variante arbeitet auch mit mehreren nacheinander angezeigten Bilddateien.

Private Sub cmdDokumentOeffnen_Click()
     Dim objDocument As MODI.Document
     Set objDocument = New MODI.Document
     objDocument.Create OpenFileName(CurrentProject.Path, _
         "Dokument auswählen", "Tagged Image File (*.tif)")
     Me!ctlMODI.Document = objDocument
End Sub

Listing 4: Texterkennung per Mausklick

Private Sub cmdTexterkennung_Click()
     Dim objImage As MODI.Image
     DoCmd.Hourglass True
     objDocument.OCR
     For Each objImage In objDocument.Images
         Me!txtOCR = objImage.Layout.Text
     Next objImage
     DoCmd.Hourglass False
End Sub

Da das Steuerelement kein passendes Kontextmenü mitliefert, müssen Sie für die Auswahl der Ansicht ein eigenes Steuerelement anlegen – in diesem Fall ein Kombinationsfeld.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar