[Kitodo] [OCR] Texterkennung mit Kitodo

Meyer, Sebastian Sebastian.Meyer at slub-dresden.de
Mo Nov 4 12:29:05 CET 2019


Lieber Armin,

auch an dich meine übliche Bitte: Wärst du bereit, das Perl-Skript und die kurze Dokumentation dazu auf GitHub zur Verfügung zu stellen? Das Repository „kitodo-contrib“ [1] ist genau dazu gedacht, Anwendungsbeispiele, kleine Skripte, Best Practices, etc. aus der Community zu sammeln, damit andere sich davon inspirieren lassen können.

Viele Grüße
Sebastian

[1] https://github.com/kitodo/kitodo-contrib
--
Sebastian Meyer
Stabsstelle Digitale Bibliothek
Sächsische Landesbibliothek –
Staats- und Universitätsbibliothek Dresden (SLUB)
Abteilung IT, Referat 2.1 Digitale Bibliothek
01054 Dresden
Besucheradresse: Zellescher Weg 18, 01069 Dresden
Telefon: +49 351 4677-206
Mobilfunk: +49 173 9615528

From: kitodo-community-bounces at kitodo.org <kitodo-community-bounces at kitodo.org> On Behalf Of Möller, Armin
Sent: Thursday, October 31, 2019 11:17 AM
To: kitodo-community at kitodo.org
Subject: Re: [Kitodo] [OCR] Texterkennung mit Kitodo


Liebe Community,

ich kann die Funktion bestätigen. Ich habe den OCR-Button bei uns auch implementiert. Dazu noch ein paar Anmerkungen.
Ich habe ein Script das ALTO in eine TXT-Datei wandelt und ausgibt. Dabei ist aufgefallen das allen Zeilenumbrüche in der Anzeige entfernt werden.
Also liefere ich HTML aus mit <pre>Datei</pre> das sieht dann deutlich besser aus. Da ich das ALTO-Verzeichnis benötige wäre es schön wenn der VariableReplacer auch ocraltopath liefern würde. Jetzt ändere ich einfach bei ocrplaintextpath  „_txt/$“ in „_alto/“ um und fertig.
Damit spare ich noch doppelte Datenhaltung von ALTO- und txt-Dateien.

Eintrag in goobi_config.properties

showOcrButton=true
ocrUrl=http://b-digiwf-1.sbb.spk-berlin.de/cgi-bin/pres/gib_ocr.pl?ocrtxtpath=(ocrplaintextpath)

Anbei noch das Perl-Script

#!/usr/bin/perl
# -*- coding: utf-8 -*-
#Programm einchecken


use feature ":5.10";
use strict;
use CGI qw/ :all -debug /;
use XML::LibXML;
use HTML::Entities;

if( !defined(param("ocrtxtpath")) or !defined(param("imgrange")) ){
                fehlerr( "falscher Aufruf " ) ;
}

my $ocrpath = param("ocrtxtpath");
my $bild = param("imgrange");

# Umwandeln von OCR-TXT nach OCR_ALTO
$ocrpath =~ s#_txt/$#_alto/#;

my $file = "$ocrpath".sprintf("%08d",$bild).".xml";
if( ! -f $file ) {
                fehlerr( "OCR $file ist nicht in der Präsentation");
}

# Umwaldenl von ALTO in TXT
my $tmp = alto2txt($file);

binmode( STDOUT,':utf8');
# ON the fly  TXT to HTML pre-formatet
print STDOUT "Content-Type: text/html; charset=UTF-8\n\n<pre>".encode_entities($tmp->{$file})."</pre>";

sub fehlerr {
                print STDOUT "Content-Type: text/html; charset=UTF-8\n\n<pre>Keine OCR gefunden</pre>";
                exit(0);
}

sub alto2txt {
# Umwandeln mit ein bisschen Layout
my ( $file ) = @_;
                my $parser = XML::LibXML->new();
                my %xmls;
                my $ret;
                if( ref ( $file )  ) {
                               $xmls{'unkown'}=$file;
                } elsif ( -f $file ) {
                               $xmls{$file}=$parser->parse_file($file) || die "parse";
                } elsif ( -d $file ) {
                               opendir my $DIR,$file || die "parse";
                               while ( my $f = readdir($DIR) ) {
                                               next unless $f =~ /xml$/;
                                               #~ say $file;
                                               $xmls{$f}=$parser->parse_file("$file/$f") || die "parse";
                               }
                               close $DIR;
                }
                for my $k ( sort keys %xmls ) {
                               my $obj = $xmls{$k};
                               my %text;
                               for my $line ( $obj->findnodes('//*[name()="TextLine"]')) {
                                               my $vp = $line->getAttribute("VPOS");
                                               ($vp) = grep { abs($_-$vp)<10  } (keys %text,$vp);
                                               $text{$vp} .=  ($text{$vp} ? "\t" : "");
                                               for my $string ( $line->findnodes('.//*[name()="String"]')) {
                                                               if ( $string->getAttribute("SUBS_TYPE") eq "HypPart1" ) {
                                                                               $text{$vp} .= ($text{$vp} ? " " : "").$string->getAttribute("SUBS_CONTENT");
                                                               } else {
                                                                               $text{$vp} .= ($text{$vp} ? " " : "").$string->getAttribute("CONTENT") unless $string->getAttribute("SUBS_TYPE") eq "HypPart2"
                                                               }
                                               }
                               }
                               for my $key ( sort { $a <=> $b } keys %text ) {
                                               $ret->{$k} .= "$text{$key}\n";
                               }
                }
                return $ret;
}



Mfg


Armin Möller
--
******************************************************************
Armin Möller,                     Administrator
Abt. IDM Ref. 2                 Tel +49 30 266 432231
Staatsbibliothek zu Berlin PK
Potsdamer Str. 33
10772 Berlin                         armin.moeller at sbb.spk-berlin.de<mailto:armin.moeller at sbb.spk-berlin.de>

Von: kitodo-community-bounces at kitodo.org<mailto:kitodo-community-bounces at kitodo.org> <kitodo-community-bounces at kitodo.org<mailto:kitodo-community-bounces at kitodo.org>> Im Auftrag von Weber, Frank-Ulrich
Gesendet: Mittwoch, 30. Oktober 2019 14:13
An: kitodo-community at kitodo.org<mailto:kitodo-community at kitodo.org>
Betreff: Re: [Kitodo] [OCR] Texterkennung mit Kitodo

Hallo Herr Hartwig,

der OCR-Button ruft schlicht die unter ocrUrl konfigurierte URL auf und füllt das OCR Fenster mit deren Ausgabe.
(tifpath) ist ein Platzhalter und wird zur Laufzeit passen ersetzt (siehe VariableReplacer.pdf). Zusätzlich wird die Seitennummer(imgrange) angehängt.

An dieser Stelle (ocr.php) könnten natürlich auch andere Formate eingelesen und passend ausgegeben werden.

Beste Grüße

Frank Ulrich Weber

________________________________

Frank-Ulrich Weber
Product Manager Software Solutions

[cid:image001.png at 01D5930B.730505D0]<http://www.zeutschel.de>


[cid:image002.png at 01D5930B.730505D0]<https://twitter.com/zeutschelgmbh>


[cid:image003.png at 01D5930B.730505D0]<http://www.youtube.com/user/zeutschelbookscanner>


[cid:image004.png at 01D5930B.730505D0]<https://www.facebook.com/pages/Zeutschel-GmbH/193873073980288?fref=ts>

Zeutschel GmbH | Heerweg 2 | 72070 Tübingen | Deutschland
p: +49 (7071) 9706-56 | m: | f: +49 (7071) 9706-44
e: Frank-Ulrich.Weber at zeutschel.de<mailto:Frank-Ulrich.Weber at zeutschel.de> | w: http://www.zeutschel.de

Geschäftsführer/President: Joerg Vogler | Registergericht Stuttgart: HRB 380917


[cid:image005.png at 01D5930B.730505D0]<https://www.zeutschel.de/>
Von: kitodo-community-bounces at kitodo.org<mailto:kitodo-community-bounces at kitodo.org> <kitodo-community-bounces at kitodo.org<mailto:kitodo-community-bounces at kitodo.org>> Im Auftrag von Wendt, Kerstin
Gesendet: Mittwoch, 30. Oktober 2019 13:49
An: 'kitodo-community at kitodo.org' <kitodo-community at kitodo.org<mailto:kitodo-community at kitodo.org>>
Betreff: Re: [Kitodo] [OCR] Texterkennung mit Kitodo

Hallo Herr Hartwig,
auf die Schnelle ein Bild vom „Verschollenen“ aus unserem Kitodo:

[cid:image001.png at 01D58F28.9146AE90]

Technische Voraussetzung ist, dass im Vorgangsverzeichnis (neben den ALTO-Files)  ein Verzeichnis mit reinen .txt-Dateien der OCR-Ergebnisse existiert. Wir lassen diese Textdatei zusätzlich und ohne Mehrkosten vom OCR-Dienstleister erzeugen. Dann kommt noch ein kl. Stück Konfiguration in goobi_config.properties dazu:
showOcrButton=true
ocrUrl=https://kitodo.sub.uni-hamburg.de/tools/ocr.php?path=(tifpath)

Ich hoffe, ich habe jetzt keinen Baustein vergessen.
Viele Grüße von Kerstin Wendt
--
Kerstin Wendt
Stabsstelle Digitalisierung
Staats- und Universitaetsbibliothek Hamburg Carl von Ossietzky
Von-Melle-Park 3, 20146 Hamburg
Telefon 040/42838-5817 | Fax : 040/41345070
Mail: kerstin.wendt at sub.uni-hamburg.de<mailto:kerstin.wendt at sub.uni-hamburg.de>
www.sub.uni-hamburg.de<http://www.sub.uni-hamburg.de>

Von: kitodo-community-bounces at kitodo.org<mailto:kitodo-community-bounces at kitodo.org> <kitodo-community-bounces at kitodo.org<mailto:kitodo-community-bounces at kitodo.org>> Im Auftrag von Uwe Hartwig
Gesendet: Mittwoch, 30. Oktober 2019 13:16
An: kitodo-community at kitodo.org<mailto:kitodo-community at kitodo.org>
Betreff: Re: [Kitodo] [OCR] Texterkennung mit Kitodo


Liebe Community, lieber Herr Gerhardt,

ich hatte die Hoffnung, dass die Einbindung der erstellten OCR-Daten (im Format HOCR-xhtml) im Prinzip in Kitodo 2.x möglich ist und es einen Fehler in unserer Kitodo-Konfiguration gibt, die dazu führt, dass keine Daten angezeigt werden. Nun klingt das für mich leider so, als sei diese Funktionalität schon länger verschollen.

Bei unserem derzeitigen Workflow haben die Mitarbeiter im VL-Manager die Möglichkeit, anhand der OC-Resultate zusätzliche Qualitätssicherungsmaßnahme einzuleiten, z.B. einen Nachscan anzufordern. Das wäre also in dieser Form nach derzeitigem Kenntnisstand mit Kitodo 2.x nicht möglich, weil keine OCR-Daten im Metadateneditor angezeigt werden?



Danke und Grüße!


On 30.10.19 13:02, Henning Gerhardt wrote:

Liebe Community, lieber Herr Hartwig,



Kitodo.Production 2.x bringt selbst keine Werkzeuge mit, um eine

Texterkennung direkt durchzuführen und ist auf externe Dienste

angewiesen. Ein solcher Dienst versteckt sich hinter dem "OCR" Button,

der eine nicht näher spezifizierte Schnittstelle anspricht und von

dieser nicht näher spezifizierte Daten zurück bekommt. Damit soll man

dann wohl die Ergebnisse im Metadateneditor von Kitodo.Production sehen

können. Ich selbst habe in den vielen Jahren der Nutzung von

Kitodo.Production 1.x und 2.x niemals eine solche Einbindung gesehen und

/ oder erlebt.



An der SLUB wird die OCR selbst als eigenständiger Schritt / Aufgabe

nach der Metadaten-Bearbeitung ausgeführt. Über unseren externen OCR

Dienstleister werden die Ergebnisse als ALTO-XML zurückgeliefert und im

jeweiligen Vorgangsverzeichnis abgelegt. Beim Export werden neben den

Bild- und Metadaten auch die vorhandenen OCR Daten exportiert und an die

Präsentation auf Basis von Kitodo.Presentation übergeben.

Kitodo.Presentation stellt dann die OCR Ergebnisse dar.





Viele Grüße



    Henning Gerhardt



On 10/30/19 11:10 AM, Uwe Hartwig wrote:

Liebe Community,



mal allgemein in die Runde gefragt: Wer hat Erfahrungen mit den

Texterkennungsfunktionalitäten mit Kitodo gesammelt?

Und wenn ja, mit welcher Kitodo-Version?



Da wir bei der ULB Sachsen-Anhalt auf ALTO-XML setzen, interessiert uns

natürlich, ob Kitodo mit diesem Format etwas anfangen kann. Dazu zählt,

z.B. ob der "OCR"-Button in der Strukturierungsansicht diese Daten

entsprechend darstellen kann und ob dieses Format auch von

nachgelagerten Prozessen Richtung DMS-Export (zedExporter) verarbeitet

werden kann.



Danke!








_______________________________________________

Kitodo-Community mailing list

Kitodo-Community at kitodo.org<mailto:Kitodo-Community at kitodo.org>

https://maillist.slub-dresden.de/cgi-bin/mailman/listinfo/kitodo-community

--

Uwe Hartwig

Anwendungsentwickler IT / Digitale Dienste



Universitäts- und Landesbibliothek Sachsen-Anhalt

August-Bebel-Straße 13

D - 06108 Halle (Saale)



Fon: + 49 345 55 22 183

Mail: uwe.hartwig at bibliothek.uni-halle.de<mailto:uwe.hartwig at bibliothek.uni-halle.de>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://bibservices.biblio.etc.tu-bs.de/pipermail/kitodo/attachments/20191104/c83ad799/attachment-0001.html>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : image001.png
Dateityp    : image/png
Dateigröße  : 4047 bytes
Beschreibung: image001.png
URL         : <http://bibservices.biblio.etc.tu-bs.de/pipermail/kitodo/attachments/20191104/c83ad799/attachment-0006.png>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : image002.png
Dateityp    : image/png
Dateigröße  : 4594 bytes
Beschreibung: image002.png
URL         : <http://bibservices.biblio.etc.tu-bs.de/pipermail/kitodo/attachments/20191104/c83ad799/attachment-0007.png>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : image003.png
Dateityp    : image/png
Dateigröße  : 4355 bytes
Beschreibung: image003.png
URL         : <http://bibservices.biblio.etc.tu-bs.de/pipermail/kitodo/attachments/20191104/c83ad799/attachment-0008.png>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : image004.png
Dateityp    : image/png
Dateigröße  : 4533 bytes
Beschreibung: image004.png
URL         : <http://bibservices.biblio.etc.tu-bs.de/pipermail/kitodo/attachments/20191104/c83ad799/attachment-0009.png>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : image005.png
Dateityp    : image/png
Dateigröße  : 40523 bytes
Beschreibung: image005.png
URL         : <http://bibservices.biblio.etc.tu-bs.de/pipermail/kitodo/attachments/20191104/c83ad799/attachment-0010.png>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : image006.png
Dateityp    : image/png
Dateigröße  : 86012 bytes
Beschreibung: image006.png
URL         : <http://bibservices.biblio.etc.tu-bs.de/pipermail/kitodo/attachments/20191104/c83ad799/attachment-0011.png>
-------------- nächster Teil --------------
_______________________________________________
Kitodo-Community mailing list
Kitodo-Community at kitodo.org
https://maillist.slub-dresden.de/cgi-bin/mailman/listinfo/kitodo-community


Mehr Informationen über die Mailingliste Kitodo