forTEXT / catma

Computer Assisted Text Markup and Analysis
https://www.catma.de
GNU General Public License v3.0
88 stars 8 forks source link

Format Import/Export #240

Closed notesjor closed 2 years ago

notesjor commented 3 years ago

Die Dokumentation https://catma.de/documentation/tei-export-format/ ist leider nicht ausreichend. Wenn ich die beigefügte TXT hochladen und danach die XML als Collection anfügen/importieren möchte, dann erhalte ich eine NullPointerException. 06-12-_2020_13-00-34 f92559b6-fa06-4d85-9ac9-12cecf9aa893.txt f92559b6-fa06-4d85-9ac9-12cecf9aa893.xml.txt

mpetris commented 3 years ago

Hi @notesjor,

wenn ich mir die Beispiel-Collection genauer ansehe, dann fallen mir drei Dinge auf, die irgendwie unerwartet sind:

  1. Die IDs müssen im xml Namespace definiert sein. Da der default namespace hier der tei Namespace ist, muss der xml Namespace explizit angegeben werden, also statt id="CATMA_959... müsste es xml:id="CATMA_959... lauten. In den Beispielen in der Doku ist das immer mit angegeben, soweit ich sehen kann. Allerdings könnte man da sicherlich noch mal explizit auf die unterschiedlichen Namespaces eingehen.
  2. Die IDs der einzelnen Annotationen (<fs>) sind nicht eindeutig. Z. B. gibt es am Ende des Abschnitts mit den Annotationen ganz am Ende des XML-Dokuments zwei Annotationen mit der ID CATMA_539AD66C-5C1A-4A4C-9E24-B75F71639DD0. In der Doku heißt es dazu

Each Annotation has a uniqe identifier in @xml:id

  1. Die Tags sind im Verhältnis zu den Annotationen nicht richtig definiert. Im Tagset POS z. B. gibt es für die einzelnen Ausprägungen (PPER, VAFIN, ...) einzelne Tags, die jeweils nur die Standard-Properties für Author und Color haben, also keine zusätzlichen benutzerdefinierten Properties:
    <fsDecl n="2020-12-06T12:55:33.000+0000" type="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D" xml:id="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D">
    <fsDescr>PPER</fsDescr>
    <fDecl name="catma_markupauthor" xml:id="CATMA_890929A2-9ACC-4E78-B69B-12E217277CFE">
    <vRange>
    <vColl>
    <string>CorpusExplorer</string>
    </vColl>
    </vRange>
    </fDecl>
    <fDecl name="catma_displaycolor" xml:id="CATMA_F9C3B46E-20F4-48CA-A520-A8EFAAFB3B11">
    <vRange>
    <vColl>
    <string>-11381262</string>
    </vColl>
    </vRange>
    </fDecl>
    </fsDecl>

In einer zugehörigen Annotation taucht dann aber eine benutzerdefinierte Property POS auf:

<fs type="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D" xml:id="CATMA_85BAAFE8-DCED-406C-9D49-7A1BF28E2788">
  <f name="catma_markupauthor">
    <string>CorpusExplorer</string>
  </f>
  <f name="catma_displaycolor">
    <string>-11381262</string>
  </f>
  <f name="POS">
    <string>PPER</string>
  </f>
</fs>

Entweder die Property POS wird mit fDecl im Tag definiert oder sie muss und kann bei der Annotation weggelassen werden. Der Tag gibt ja hier auch schon an, dass es sich um PPER handelt.

Eine andere Möglichkeit der Kodierung wäre einen Tag POS mit einem benutzerdefinierten Property für die konkrete Ausprägung zu definieren:

<fsDecl n="2020-12-06T12:55:33.000+0000" type="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D" xml:id="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D">
  <fsDescr>POS</fsDescr>
  <fDecl name="catma_markupauthor" xml:id="CATMA_890929A2-9ACC-4E78-B69B-12E217277CFE">
    <vRange>
      <vColl>
        <string>CorpusExplorer</string>
      </vColl>
    </vRange>
  </fDecl>
  <fDecl name="catma_displaycolor" xml:id="CATMA_F9C3B46E-20F4-48CA-A520-A8EFAAFB3B11">
    <vRange>
      <vColl>
        <string>-11381262</string>
      </vColl>
    </vRange>
  </fDecl>
  <fDecl name="concrete_pos" xml:id="CATMA_4711">
    <vRange>
      <vColl>
            <string>PPER</string>
            <string>VAFIN</string>
            <string>ART</string>
            .....
           </vColl>
    </vRange>
  </fDecl>
</fsDecl>

Die Annotation dazu würde dann z. B. so aussehen:

<fs type="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D" xml:id="CATMA_85BAAFE8-DCED-406C-9D49-7A1BF28E2788">
  <f name="catma_markupauthor">
    <string>CorpusExplorer</string>
  </f>
  <f name="catma_displaycolor">
    <string>-11381262</string>
  </f>
  <f name="concrete_pos">
    <string>PPER</string>
  </f>
</fs>

Welche Variante man hier wählt hängt ein bisschen davon ab, wie man die Daten innerhalb von CATMA im Annotate- bzw. Analyze-Module benutzen möchte.

Lemma würde man auf jeden Fall als Property eines Tags ohne Vorschlagswerte (<vColl/>) definieren, vielleicht zusammen mit einer POS-Property innerhalb eines Tags Token:

<fsDecl n="2020-12-06T12:55:33.000+0000" type="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D" xml:id="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D">
  <fsDescr>Token</fsDescr>
  <fDecl name="catma_markupauthor" xml:id="CATMA_890929A2-9ACC-4E78-B69B-12E217277CFE">
    <vRange>
      <vColl>
        <string>CorpusExplorer</string>
      </vColl>
    </vRange>
  </fDecl>
  <fDecl name="catma_displaycolor" xml:id="CATMA_F9C3B46E-20F4-48CA-A520-A8EFAAFB3B11">
    <vRange>
      <vColl>
        <string>-11381262</string>
      </vColl>
    </vRange>
  </fDecl>
  <fDecl name="POS" xml:id="CATMA_4711">
    <vRange>
      <vColl>
            <string>PPER</string>
            <string>VAFIN</string>
            <string>ART</string>
            .....
           </vColl>
    </vRange>
  </fDecl>
  <fDecl name="Lemma" xml:id="CATMA_4712">
    <vRange>
      <vColl/>
    </vRange>
  </fDecl>
</fsDecl>

Eine zugehörige Annotation des zweiten Wortes 'ist' könnte dann so aussehen:

<fs type="CATMA_59BF0259-3894-411A-A0C7-64ED4494899D" xml:id="CATMA_85BAAFE8-DCED-406C-9D49-7A1BF28E2788">
  <f name="catma_markupauthor">
    <string>CorpusExplorer</string>
  </f>
  <f name="catma_displaycolor">
    <string>-11381262</string>
  </f>
  <f name="POS">
    <string>VAFIN</string>
  </f>
  <f name="Lemma">
    <string>sein</string>
  </f>
</fs>
notesjor commented 3 years ago

Danke für die hilfreichen Hinweise - so langsam irre ich mich nach oben. Mittlerweile erhalte ich eine String OutOfRange Exception. Können Sie mir sagen woran es liegen könnte?

Außerdem: Muss eigentlich ein catma_markupauthor und eine catma_displaycolor angegeben werden? Oder könnte ich das auch weglassen? - Dies würde die Redundanz wesentlich reduzieren

img 64d7d1ab-5343-4c02-9b15-1937e14f9aeb.txt 64d7d1ab-5343-4c02-9b15-1937e14f9aeb.xml.txt

mpetris commented 3 years ago

Danke für die hilfreichen Hinweise

Gerne, ich freue mich, wenn es eine Austauschmöglichkeit zwischen CorpusExplorer und CATMA gibt.

Im <fsdDecl> beinhaltet das Attribut n sowohl den Namen des Tagsets als auch einen Versionszeitstempel:

The @n propery contains the name and a version timestamp of the Tagset

In der Beispielcollection gibt es bisher nur den Versionszeitstempel, daher die StringIndexOutOfBoundsException. Der Name und der Zeitstempel müssen durch ein Leerzeichen getrennt werden, also etwa so:

<fsdDecl n="CorpusExplorerTags 2020-12-07T14:44:52.000+0000" xml:id="CATMA_2DE32629-D02C-447D-B1FB-58B37D927773">

Muss eigentlich ein catma_markupauthor und eine catma_displaycolor angegeben werden?

Ja, die müssen sowohl auf der Ebene der Tag Definitionen als Properties mit <fDecl> deklariert werden (fehlt in Ihrem Beispiel noch), als auch auf der Ebene der Annotationen jeweils mit einem <f>. Die catma_display_color ist tatsächlich redundant, muss aber mit angegeben werden, das hat historische Gründe, sag ich mal. Der Autor (catma_markupauthor) einer Annotation kann sich ja tatsächlich vom Autor einer Tag Definition unterscheiden. Gleiches gilt auch für den catma_markuptimestamp (fehlt auf beiden Ebenen).

notesjor commented 3 years ago

Es funktioniert - vielen Dank. Trotzdem: das Format ist nahe an GRAUSAM - aber ich denke, das ist bekannt ("[...] das hat historische Gründe [...]"). Ich werde noch etwas probieren müssen, damit das rauskommt, was ich eigentlich erwarte und sehr gut dokumentieren müssen, wie Nutzer*innen einen 'Round-Trip' (CATMA > CorpusExplorer > CATMA > CorpusExplorer > ...) realisieren können. Trotzdem schonmal vielen Dank für die geduldige Hilfe. Sobald ich fertig bin, melde ich mich.

maltem-za commented 2 years ago

Ich schließe dieses Issue weil sich länger nichts getan hat. Falls es ein Update oder weitere Fragen gibt gerne wieder öffnen.