faustedition / faust-gen-html

Pipelines to generate HTML for the Faust edition's reading texts and prints.
1 stars 4 forks source link

Entstehungszeugnisse Nachdigitalisierung: xsl:template für Seitenzählung #513

Open gerritbruening opened 6 years ago

gerritbruening commented 6 years ago

@thvitt, vom Dienstleister bekomme ich (aufgeräumt) so was hier: <p>[18]</p> bedeutet <pb n="18"/> Jetzt suche ich nach einem Ausdruck für das Skript hier, mit dem ich aus dem ersten das zweite machen kann. Hast du da einen Rat?

thvitt commented 6 years ago

Probier mal:

<xsl:template match="p[matches(., '\[\d+\]')]">
  <pb n="{replace(., '\[(\d+)\]', '$1')}"/>
</xsl:template>
thvitt commented 6 years ago

Setzt voraus, dass die Seitenzahlen immer rein numerisch sind; für '1r' etc. ersetze die \d z.B. durch \w oder [0-9rv] oder so.

gerritbruening commented 6 years ago

Danke, das hilft bei dem gegebenen Fall sehr gut! Allerdings kommt \[d+\] auch mitten in Absätzen vor, z.B.

<p><hi style="font-size:10pt">Herr Salomon Maimon, den er wegen ſeines großen
    Scharfſinns außerordentlich ſchätzte, und ich waren faſt die einzigen, die
    [(208)]er gern bei ſich ſah, weil er ſich unſertwegen nicht zu genieren
    brauchte.</hi>

Da erwischt dann auch p/hi/text()[matches(., '\[\(\d+\)\]')] zu viel Dokumentinhalt.

thvitt commented 6 years ago

Hast Du schon regeln für text()?

Sonst:

<xsl:template match="text()">
  <xsl:analyze-string regex="\[\((\d+)\)\]" select=".">
    <xsl:matching-substring>
       <pb n="{regex-group(1)}"/>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
        <xsl:value-of select="."/>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>
gerritbruening commented 6 years ago

OK: https://github.com/faustedition/faust-gen-html/blob/master/tools/docx-cleanup.xsl#L37 Aber das hat nicht den Effekt, den ich erwartet hatte. Beispieldaten liegen jetzt hier: https://github.com/faustedition/xml/tree/master/testimony/docx2tei

thvitt commented 6 years ago

Zwei issues:

1) Ambiguous Rule Match → priority für die text()-Regel. Warnung sollte Dir Oxygen aber angezeigt haben. 2) Du hast die RE flasch abgeschrieben. Wenn die Seitenzahlen als [(42)] im Text liegen, ist der RE \[\((\d+)\)\]: \[/\] und \(/\) für die eckigen und runden Klammern, (·) um die innere Regular Expression (\d+) als regex-group(1) einzufangen

b623d7584d31b6c94aadf358c1bb1ef46d9c3e2d

gerritbruening commented 6 years ago

Warnung sollte Dir Oxygen aber angezeigt haben.

Ja, aber nur extrem kurz, und ich habe das nicht mehr aufrufen können. Ich habe dann geschaut, wo ich vielleicht doch noch auf text() matche, um die Ambiguität herauszufinden, aber ich habe keine Stelle gefunden.

Das mit den (...) war Absicht, denn manchmal steht auch [42] in den Daten.

gerritbruening commented 6 years ago

Schön wäre dann noch, wenn wir das darumherum liegende p samt hi beiseiteschaffen könnten, das jetzt ja nicht mehr gebraucht wird. Soll man das in einem nachgelagerten xsl machen und beide in ein xproc tun?

thvitt commented 6 years ago

Fehlermeldungen der Transformation

Man könnte ein XProc schreiben, solchen Kleinigkeiten tendiere ich aber eher dazu, das doch im Stylesheet mit Modi und Variablen fürs Zwischenergebnis zu machen.

gerritbruening commented 6 years ago

Ah, das war bei mir in einer langen Liste von Reitern ganz unten rechts versteckt, richtig.

gerritbruening commented 6 years ago

In Bezug auf das Ergebnis könnte man sagen: p[not(node()[not(self::pb)])] sollen mit apply-templates entfallen .

gerritbruening commented 5 years ago

Können sich @sandrakrause und @thvitt bei Gelegenheit anschauen. Wo sind die Daten? Schon auf Github?