2020.06
2021.06
Metadaten aus Dateien extrahieren
Funktionsprinzipien und Implementierungen von Kernkomponenten
Allgemein
Die Klassen des Paketes
org.mycore.datamodel.ifs.extractors
extrahieren beim Importieren oder Aktualisieren einer
gespeicherten Derivatdatei Metadaten aus dem Inhalt. Derzeit sind
die folgenden Implementierungen verfügbar:
-
MCRDataExtractorJPEG
extrahiert EXIF- und IPTC-Daten aus JPEG-Bilddateien
-
MCRDataExtractorMP3
extrahiert ID3- und Lyrics-Daten aus MP3-Audiodateien
-
MCRDataExtractorPDF
extrahiert Metadaten aus PDF-Dokumenten
Um die Datenextraktion zu nutzen, müssen die Klassen als Event
Handler in der
mycore.properties
konfiguriert werden. Damit die extrahierten Daten auch durchsucht
werden können, müssen diese der Event Handler vor dem Event
Handler laufen, der die Suchdaten indiziert. Alle anderen Event
Handler rücken entsprechend eine Nummer nach hinten:
1
2
3
4
5
6
7
|
MCR.EventHandler.MCRFile.1.Class=org.mycore.datamodel.ifs.extractors.MCRDataExtractorJPEG
MCR.EventHandler.MCRFile.1.Class=org.mycore.datamodel.ifs.extractors.MCRDataExtractorMP3
MCR.EventHandler.MCRFile.1.Class=org.mycore.datamodel.ifs.extractors.MCRDataExtractorPDF
MCR.EventHandler.MCRFile.4.Indexer=lucene-content
MCR.EventHandler.MCRFile.5.Class=org.mycore.services.imaging.MCRImgCacheEventHandler
MCR.EventHandler.MCRFile.6.Class=org.mycore.frontend.iview.MCRIViewEventHandler
|
Bei jedem Laden oder Aktualisieren einer Datei werden die
Metadaten nun automatisch extrahiert und intern im XML-Format
gespeichert. Nach Erweiterung der
searchfields.xml
um entsprechende Suchfelder können diese Metadaten auch durchsucht
werden. Um die Daten auch im Directory Listing des Derivates
auszugeben, muss das Stylesheet
mcr_directory.xsl
in Ihrer Anwendung erweitert werden.
Metadaten aus JPEG-Grafikdateien extrahieren
Die Klasse
MCRDataExtractorJPEG
ist in der Lage, EXIF- und IPTC-Metadaten aus JPEG-Dateien zu
extrahieren. Abhängig von der Eingabedatei sehen diese Daten z.
B. wie folgt aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<MCRDataExtractorJPEG>
<directory name="Exif">
...
<tag name="Model">Canon PowerShot A40</tag>
...
<tag name="Date/Time Original">2008:07:24 09:30:36</tag>
<tag name="Date/Time Digitized">2008:07:24 09:30:36</tag>
...
</directory>
<directory name="Canon Makernote">
...
<tag name="Owner Name">Frank Lützenkirchen</tag>
</directory>
<directory name="Jpeg">
...
<tag name="Image Height">1600 pixels</tag>
<tag name="Image Width">1200 pixels</tag>
...
</directory>
</MCRDataExtractorJPEG>
|
Um die Daten auch durchsuchbar zu machen, muss die
searchfields.xml um entsprechende Felddefinitionen erweitert
werden, z. B.
1
2
3
4
5
6
7
8
9
10
11
12
|
<index id="content">
...
<field name="exifOwnerName" type="name" source="fileAdditionalData" objects="jpeg"
xpath="/additionalData/MCRDataExtractorJPEG/directory/tag[@name='Owner Name']"
value="text()" />
<field name="exifWidth" type="integer" source="fileAdditionalData" objects="jpeg"
xpath="/additionalData/MCRDataExtractorJPEG/directory/tag[@name='Image Width']"
value="substring-before(text(),' pixels')" />
<field name="exifDate" type="date" source="fileAdditionalData" objects="jpeg"
xpath="/additionalData/MCRDataExtractorJPEG/directory/tag[@name='Date/Time Original']"
value="translate(text(),': ','-T')" />
</index>
|
Metadaten aus MP3-Audiodateien extrahieren
Die Klasse
MCRDataExtractorMP3
extrahiert ID3v1, ID3v1.1, Lyrics3v1, Lyrics3v2, ID3v2.2, ID3v2.3 und ID3v2.4 Metadaten
aus MP3-Dateien. Abhängig von der Eingabedatei sehen diese Daten z.B. wie folgt aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<MCRDataExtractorMP3>
<ID3v1>
<album>Viva Club Rotation 37</album>
<artist>Cosmic Gate feat. Denise River</artist>
<yearReleased>2007</yearReleased>
<albumTitle>Viva Club Rotation 37</albumTitle>
<songGenre>18</songGenre>
<leadArtist>Cosmic Gate feat. Denise River</leadArtist>
<trackNumberOnAlbum>7</trackNumberOnAlbum>
<year>2007</year>
<songTitle>Body Of Conflict (Radio Edit)</songTitle>
<title>Body Of Conflict (Radio Edit)</title>
</ID3v1>
<ID3v2>
<trackNumberOnAlbum>7</trackNumberOnAlbum>
</ID3v2>
</MCRDataExtractorMP3>
|
Um die Daten auch durchsuchbar zu machen, muss die
searchfields.xml um entsprechende Felddefinitionen erweitert
werden, z. B.
1
2
3
4
5
6
7
8
9
|
<index id="content">
...
<field name="mp3AlbumTitle" type="text" source="fileAdditionalData" objects="mp3"
xpath="/additionalData/MCRDataExtractorMP3/**/albumTitle" value="text()" />
<field name="mp3Artist" type="name" source="fileAdditionalData" objects="mp3"
xpath="/additionalData/MCRDataExtractorMP3/**/artist" value="text()" />
<field name="mp3SongTitle" type="text" source="fileAdditionalData" objects="mp3"
xpath="/additionalData/MCRDataExtractorMP3/**/songTitle" value="text()" />
</index>
|
Metadaten aus PDF-Dokumenten extrahieren
Die Klasse
MCRDataExtractorPDF
extrahiert Seitenzahl, Autor, Titel etc. und das Inhaltsverzeichnis aus PDF-Dokumenten.
Abhängig von der Eingabedatei sehen diese Daten z.B. wie folgt aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<MCRDataExtractorPDF>
<numPages>370</numPages>
<producer>FOP 0.20.5</producer>
<author>Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato</author>
<outline>
<item title="Version Control with Subversion" />
<item title="Table of Contents" />
<item title="Foreword" />
<item title="Preface">
<item title="Audience" />
<item title="How to Read this Book" />
...
</MCRDataExtractorPDF>
|
Um die Daten auch durchsuchbar zu machen, muss die
searchfields.xml um entsprechende Felddefinitionen erweitert
werden, z. B. wie folgend. Sie können dann z. B. nach Dokumenten mit einer Mindestanzahl von
Seiten suchen, oder gezielt nur im Inhaltsverzeichnis von PDF-Dateien suchen.
1
2
3
4
5
6
7
8
9
|
<index id="content">
...
<field name="pdfNumPages" type="integer" source="fileAdditionalData" objects="pdf"
xpath="/additionalData/MCRDataExtractorPDF/numPages" value="text()" />
<field name="pdfAuthor" type="name" source="fileAdditionalData" objects="pdf"
xpath="/additionalData/MCRDataExtractorPDF/author" value="text()" />
<field name="pdfTOC" type="name" source="fileAdditionalData" objects="pdf"
xpath="/additionalData/MCRDataExtractorPDF/**/item" value="title" />
</index>
|