imgindex.pl


Übersicht

imgindex.pl --help | --version

imgindex.pl [ --verbose ... | --no_verbose ]
[ --in IN ] [ --out OUT ] [ --xslt XSLT ]

imgindex.pl [ --verbose ... | --no_verbose ]
[ --xslt XSLT ] [ --ptn_in PTN_IN ] [ --ptn_out PTN_OUT ]
[ --overwrite | --no_overwrite ] STORYID ...

Optionen

--help

Gibt eine kurze Hilfe aus.

--version

Gibt kurze Hinweise zum Programm und die Version aus.

--verbose

Die Namen verarbeiteter Dateien und Ausnahmen werden nach STDERR ausgegeben. In der Voreinstellung ist diese Option nicht gesetzt.

--no_verbose

Diese Option hebt die Wirkung der Option --verbose auf.

--in IN

Diese Option wirkt nur, wenn die Befehlszeile keine Kennung einer Bildergeschichte (STORYID) enthält. IN ist der Pfad der Bildergeschichte (Eingabedatei) oder eines Verzeichnisses. Wenn IN ein Verzeichnispfad ist, wird IN/story.xml als Pfad der Bildergeschichte angenommen.

Voreingestellt ist story.xml.

--out OUT

OUT ist der Pfad der Bildrang-Datei (Ausgabedatei), wenn die Befehlszeile keine Kennung einer Bildergeschichte (STORYID) enthält. Andernfalls wirkt diese Option nicht. Wenn OUT nicht angegeben ist, werden vom Pfad der Bildergeschichte (IN) das Suffix .xml und Punkte am Ende entfernt und .imgix.xml angehängt. Eine existierende Datei wird überschrieben.

--xslt XSLT

"none" oder die URL eines XSLT-Dokuments relativ zu den Bildrang-Dateien.

Wenn XSLT nicht "none" ist, wird in die Bildrang-Dateien eine xml-stylesheet-Verarbeitungsanweisung geschrieben, die auf XSLT verweist. Ein absoluter Pfad wird in einen relativen Pfad umgeformt.

imgindex.pl --help zeigt den voreingestellten Wert.

--ptn_in PTN_IN

Diese Option wirkt, wenn die Befehlszeile eine odere mehrere Kennungen von Bildergeschichten (STORYID) enthält. Der Wert ist eine Zeichenkette, die den Platzhalter ${storyid} enthält. Der Platzhalter wird durch die Kennung einer Bildergeschichte ersetzt. Das Ergebnis der Ersetzung ist der Pfad der Bildergeschichte (Eingabedatei).

imgindex.pl --help zeigt den voreingestellten Wert.

--ptn_out PTN_OUT

Diese Option wirkt, wenn die Befehlszeile eine odere mehrere Kennungen von Bildergeschichten (STORYID) enthält. Der Wert ist eine Zeichenkette, die den Platzhalter ${storyid} enthält. Der Platzhalter wird durch die Kennung einer Bildergeschichte ersetzt. Das Ergebnis der Ersetzung ist der Dateipfad der Bildbewertung (Ausgabedatei).

imgindex.pl --help zeigt den voreingestellten Wert.

--overwrite

Diese Option wirkt, wenn die Befehlszeile eine odere mehrere Kennungen von Bildergeschichten (STORYID) enthält. Die Kennung einer Bildergeschichte wird in das Muster PTN_OUT engesetzt. Wenn sich so der Pfad einer existierenden Datei ergibt, bleibt diese Datei normalerweise erhalten. Die Option --overwrite bewirkt, dass die existierende Datei gelöscht wird und eine neue Ausgabedatei erstellt wird.

--no_overwrite

Diese Option hebt die Wirkung der Option --overwrite auf.

STORYID

Die Kennung einer Bildergeschichte.

Wenn die Befehlszeile wenigstens eine Kennung einer Bildergeschichte enthält, werden die Pfade der Bildergeschichten (Eingabedateien) und der Bildrang-Dateien (Ausgabedateien) aus den Mustern PTN_IN und PTN_OUT gebildet. Existierende Bildrang-Dateien werden nach Maßgabe der Option --overwrite ersetzt.

Beschreibung

Bilder der Website http://kleider.herbaer.de sollen von Web-Suchmaschinen gefunden werden. Dazu will ich sie in einer Sitemap-Datei auflisten. Die Website umfasst zu viele Bilder, um sie alle aufzulisten. Deshalb sollen von jeder Bildergeschichte nur einige "repräsentative" Bilder ausgewählt werden. Dieses Programm liest eine Bildergeschichte, ordnet jedem Bild einen "Rang" zu und schreibt die Bilddaten mit den zugeordneten "Rängen" in eine "Bildrang"-Datei, eine XML-Datei des Namensraums http://herbaer.de/xmlns/20110902/imgindex (s. imgindex.rng)

Aus den Bildern mit dem kleinsten Rang (beste Bewertung) werden in einem weiteren Schritt Bilder ausgewählt, die als Vorschaubild oder Teil des Vorschaubildes für die Bildergeschichte geeignet sind. In einem ersten Durchlauf werden Bilder von Kleidern, deren Titel nicht auf Schuhe hinweist, gewählt. Wenn kein geeignetes Bild gefunden wird, werden im zweiten Durchlauf Bilder gewählt, deren Titel nicht auf Schuhe hinweist. Wenn im zweiten Durchlauf kein geeignetes Bild gefunden wird, werden Bilder gewählt, deren Titel auf ein Kleid hinweist.

In der Befehlszeile können die Kennungen (STORYID) einer oder mehrere Bildergeschichten angegeben werden. Die Dateipfade der Bildergeschichten werden gebildet, indem in der Vorlage PTN_IN der Platzhalter ${storyid} durch die Kennung der Bildergeschichte ersetzt wird.

Zu jeder Bildergeschichte erstellt dieses Programm eine Bildrang-Datei. Die Dateipfade der Bildrang-Dateien werden aus der Vorlage PTN_OUT gebildet. Existierende Bildrang-Dateien bleiben erhalten, wenn nicht die Option --overwrite festlegt, dass sie ersetzt werden.

Wenn keine Kennung einer Bildgeschichte angegeben ist, dann ist IN der Pfad der Bildergeschichte, deren Bilder bewertet werden, und OUT der Pfad der erstellten Bildrang-Datei.

Der Rang eines Bildes

Der Rang eines Bildes ist eine natürliche Zahl. Eine kleine Zahl bezeichnet ein bevorzugtes Bild, große Zahlen bezeichnen weniger wichtige Bilder.

Aus dem Bildtitel (Attribut jpg/@alt) bestimmt das Programm einen vorläufigen Rang gemäß den folgenden Regeln:

Auswahlkriteriumvorl. Rang
Der Bildtitel enthält eines der Wörter Profil, Hüfte, Gesäß oder Schulterblätter.7
Der Bildtitel enthält das Wort Brust, aber unmittelbar davor nicht die Zeichenfolge der und unmittelbar danach nicht das Zeichen -.6
Der Bildtitel enthält das Wort Rücken, aber unmittelbar davor nicht die Zeichenfolge dem und unmittelbar danach nicht das Zeichen -.6
Der Bildtitel enthält das Wort Schultern, aber unmittelbar davor nicht die Zeichenfolge den und unmittelbar danach nicht das Zeichen -.6
Der Bildtitel enthält eines der Wörter Oberkörper oder Beine, dem nicht das Zeichen - folgt.6
Der Bildtitel enthält die Wörte Rock, von und das Wortende Kleid oder kleid in dieser Reihenfolge.5
Der Bildtitel enthält das Wort total3
Der Bildtitel enthält eines der Wörter Porträt, Hüften, Passbild oder wttl (das Bild zeigt eine Puppe in einer weiteren Umgebung)5
Der Bildtitel enthält das Wort im, gefolgt von einem der Wörter Body, Badeanzug, Gymnastikanzug oder Bikini2
Der Bildtitel enthält eines der Wörter Body, Badeanzug, Gymnastikanzug oder Bikini3

Die Auswahlkriterien werden der Reihe nach geprüft. Das erste zutreffende Auswahlkriterium bestimmt den vorläufigen Rang eines Bildes.

Der vorläufige Rang wird um 10 erhöht, wenn

Wenn der Bildtitel nicht "Kleid" enthält, wird der vorläufige Rang um 20 erhöht.

In jedem Abschnitt (section - Element) einer Bildergeschichte wird der kleinste vorkommende vorläufige Rang ermittelt. Von mehreren Bildern mit dem gleichen vorläufigen Rang werden Bilder im Hochformat bevorzugt. Von den verbleibenden Bilder bekommt das erste vorkommende Bild den Rang 1. Die anderen Bilder behalten den vorläufigen Rang.

Wesentliche Funktionen und Programmteile

package HB_ImageRank

Das Package HB_ImageRank kapselt die Verarbeitung einer Bildgeschichte. Es implementiert einen SAX-Handler. Eine typische Anwendung ist:

my $imgrank = new HB_ImageRank ({"[cnt]verbose" => 1}) ;
$imgrank -> add_story ("bildgeschichte.xml") ;
$imgrank -> write_xml ("bildrang.xml", {}) ;

$imgrank -> clear ();
$imgrank -> add_story ("bildgeschichte_2.xml") ;
$imgrank -> write_xml ("bildrang_2.xml", {}) ;
HB_ImageRank::new ($args)

$args ist vom Typ HASHREF. Ein logisch wahrer Wert des Eintrags $args -> {"[cnt]verbose"} bedeutet, dass die Methoden add_story und write_xml die Pfade der geöffneten Dateien und Fehlermeldungen nach STDERR ausgeben.

$imgrank -> clear ()

Ein HB_ImageRank-Objekt kann die Bilder mehrere Bildergeschichte sammeln und bewerten und sie zusammen in einer Bildbewertungs-Datei ausgeben. Die Methode clear löscht alle gespeicherten Daten zu Bildern.

$imgrank -> add_story ($fnstory)

$fnstory ist der Dateipfad einer Bildergeschichte. Die Methode add_story speichert die Kennungen (Attribut jpg/@src) und die Titel (Attribut jpg/@alt) aller Bilder der Bildergeschichte und bestimmt den Rang.

$imgrank -> write_xml ($fn, $args, $meta)

Gibt die gespeicherten Daten zu Bildern in einer Bildrang-Datei aus.

$fn

Der Dateipfad der Bildrang-Datei, in die die gespeicherten Daten geschrieben werden.

$args

$args ist vom Typ HASHREF. Der Eintrag $args -> {"xslt"} bestimmt das Verweisziel der XSLT-Dateien in den Bildrang-Dateien.

$meta

$meta ist vom Typ HASHREF. Sie enthält Daten, die zusätzlich im meta-Element der Bildrang-Datei ausgegeben werden. Die Schlüssel sind die Namen der Kindelemente des meta-Elements.

loop_storyids ($imgrank, $args, $sids)

Erstellt zu jeder Bildergeschichte, deren Kennung in der Liste $sids enthalten ist, eine Bildrang-Datei.

$imgrank

Das verwendete HB_ImageRank-Objekt.

$args

Die HASHREF der Befehlszeilen-Argumente.

$sids

Die ARRAYREF enthält die Kennungen der zu verarbeitenden Bildergeschichten.

Software-Voraussetzungen

Das Programm ist mit 5.10 entwickelt. Es benutzt die Standard-Module encoding, Fcntl, File::Spec::Functions und POSIX, das CPAN-Modul XML::SAX::ParserFactory und das Modul Herbaer::Readargs. Es muss auch ein SAX-Parser eingerichtet sein, den XML::SAX::ParserFactory findet.