<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linked Data | FDMLab@LABW</title><link>https://fdmlab.landesarchiv-bw.de/tag/linked-data/</link><atom:link href="https://fdmlab.landesarchiv-bw.de/tag/linked-data/index.xml" rel="self" type="application/rss+xml"/><description>Linked Data</description><generator>Wowchemy (https://wowchemy.com)</generator><language>de-de</language><lastBuildDate>Tue, 07 Mar 2023 00:00:00 +0000</lastBuildDate><image><url>https://fdmlab.landesarchiv-bw.de/media/sharing.jpg</url><title>Linked Data</title><link>https://fdmlab.landesarchiv-bw.de/tag/linked-data/</link></image><item><title>GND Hierarchieinformationen zur Verbesserung der Erschließung</title><link>https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/</link><pubDate>Tue, 07 Mar 2023 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/</guid><description>&lt;p>In der Gemeinsamen Normdatei (GND) sind für Sachbegriffe Hierarchieinformationen enthalten.
In diesem Blogbeitrag berichten wir, wie wir diese Informationen verwenden, um die Verschlagwortung von relevanten Akten für die Provenienzforschung zu verbessern.&lt;/p>
&lt;p>Wir berichteten bereits, wie wir ein &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/">Named-entity Recognition Modell mit Starthilfe durch die Gemeinsame Normdatei trainieren&lt;/a> und wie wir die dadurch extrahierten &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2023-02-ner-und-gnd-zur-verbesserung-der-erschliessung/">Sachbegriffe normalisieren und mit der GND Sachbegriffen verknüpfen&lt;/a>.&lt;/p>
&lt;p>In diesem Blogbeitrag geht es um den letzten Workflowschritt, nämlich die Anreicherung von Oberbegriffen aus der GND zur Verbesserung der Verschlagwortung. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="mermaid">---
title: Workflow
config:
look: handDrawn
theme: neutral
---
flowchart LR
filtern["1. Filtern"]
ner["2. NER"]
normalisieren["3. Normalisieren"]
gnd_abgleich["4. GND Abgleich"]
begriffe_nachladen["5. Oberbegriffe"]
filtern --> ner --> normalisieren --> gnd_abgleich --> begriffe_nachladen
style begriffe_nachladen stroke:#000,stroke-width:4px
&lt;/div>
&lt;h2 id="schritt-5-oberbegriffe-nachladen">Schritt 5: Oberbegriffe nachladen&lt;/h2>
&lt;p>Wir haben 1.753 Begriffe aus der GND verlinkt. Aus diesen wollen wir basierend auf den Hierarchieinformationen in der GND ein hierarchisches Netzwerk aufbauen. Dafür müssen für die 1.753 Begriffe alle verknüpften Oberbegriffe sowie deren Oberbegriffe usw., nachgeladen werden.
Da das potentiell ein recht großes Netzwerk werden könnte, haben wir das Netzwerk mit einer lokalen Kopie der &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/">GND in ihrer LOD-Form in Oxigraph&lt;/a> berechnet.
Dafür wurden mit SPARQL die relevanten Knoten und Verbindungen extrahiert, anschließend mit &lt;a href="https://networkx.org/" target="_blank" rel="noopener">NetworkX&lt;/a> zu einem Netzwerk zusammengefügt, und mit &lt;a href="https://pyvis.readthedocs.io/en/latest/" target="_blank" rel="noopener">PyVis&lt;/a> visualisiert.&lt;/p>
&lt;p>Konkret haben wir alle Knoten vom Typ &lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeading" target="_blank" rel="noopener">SubjectHeading&lt;/a> und den entsprechenden Subtypen geladen.
Als Verbindungen haben wir
&lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTerm" target="_blank" rel="noopener">broaderTerm&lt;/a>,
&lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermGeneral" target="_blank" rel="noopener">broaderTermGeneral&lt;/a>,
&lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermGeneric" target="_blank" rel="noopener">broaderTermGeneric&lt;/a>,
&lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermInstantial" target="_blank" rel="noopener">broaderTermInstantial&lt;/a>,
&lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermPartitive" target="_blank" rel="noopener">broaderTermPartitive&lt;/a>,
&lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermWithMoreThanOneElement" target="_blank" rel="noopener">broaderTermWithMoreThanOneElement&lt;/a> und
&lt;a href="https://d-nb.info/standards/elementset/gnd#complexSeeReferenceSubject" target="_blank" rel="noopener">complexSeeReferenceSubject&lt;/a>
verwendet.&lt;/p>
&lt;p>Dieses Netzwerk verwendeten wir zum einen für unsere Analysen.
Zum anderen extrahierten wir daraus einen &lt;strong>Teilgraphen&lt;/strong> mit den für uns relevanten Begriffen.&lt;/p>
&lt;div class="alert alert-warning">
&lt;div>
Die folgenden Analysen basieren auf der Linked Open Data Variante der GND.
Abweichungen von den tatsächlichen Daten in der GND sind daher möglich.
&lt;/div>
&lt;/div>
&lt;figure id="figure-bildschirmfoto-der-ersten-version-unseres-gnd-teilgraphen">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der ersten Version unseres GND Teilgraphen." srcset="
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-netzwerk_huea75dcb3b215d90b33a4ae6210b59eec_315371_8dbe8506096f42cf7689d17d81fc6728.webp 400w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-netzwerk_huea75dcb3b215d90b33a4ae6210b59eec_315371_e16305a7289db35e1e65ca37485bcef5.webp 760w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-netzwerk_huea75dcb3b215d90b33a4ae6210b59eec_315371_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-netzwerk_huea75dcb3b215d90b33a4ae6210b59eec_315371_8dbe8506096f42cf7689d17d81fc6728.webp"
width="760"
height="711"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der ersten Version unseres GND Teilgraphen.
&lt;/figcaption>&lt;/figure>
&lt;p>In dem von uns in Abbildung 1 gezeigten, extrahierten Teilgraphen sind zwar hierarchische Strukturen zu erkennen.
Insgesamt sind jedoch sehr viele Einzelknoten um den Wurzelknoten herum zu sehen, und die üblichen Algorithmen zur Darstellung von Hierarchien weigerten sich das vermeintlich hierarchische Netzwerk verständlich darzustellen.&lt;/p>
&lt;p>Im Folgenden besprechen wir die Probleme, über die wir gestolpert sind und prüfen, ob einige (problematische) Eigenschaften unseres extrahierten Teilgraphen auch im Gesamtnetzwerkes aller Sachbegriffe zu finden sind.&lt;/p>
&lt;h3 id="typen-von-oberbegriffen">Typen von Oberbegriffen&lt;/h3>
&lt;figure id="figure-bildschirmfoto-der-unterklassen-von-authority-resources-in-der-gnd-ontologie">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Unterklassen von *Authority Resources* in der GND Ontologie." srcset="
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-ontology-authority-resources_huc2fd5ef60259cb939e2f1be69042268b_197325_07d793a52872355986c9a4a128a6d207.webp 400w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-ontology-authority-resources_huc2fd5ef60259cb939e2f1be69042268b_197325_58d747c9bc3d31060d41f13fc7ff2d8f.webp 760w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-ontology-authority-resources_huc2fd5ef60259cb939e2f1be69042268b_197325_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-ontology-authority-resources_huc2fd5ef60259cb939e2f1be69042268b_197325_07d793a52872355986c9a4a128a6d207.webp"
width="760"
height="578"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der Unterklassen von &lt;em>Authority Resources&lt;/em> in der GND Ontologie.
&lt;/figcaption>&lt;/figure>
&lt;p>In Abbildung 2 sind noch einmal die Unterklassen (Typen) von Normdatenressourcen (&lt;em>Authority Resource&lt;/em>) in der GND Ontologie gezeigt.
Wir arbeiten mit Schlagworten (&lt;em>SubjectHeading&lt;/em>) und den zugehörigen Unterklassen.&lt;/p>
&lt;blockquote>
&lt;p>Die Diagramme wurden mit unserer experimentellen &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">Webanwendung zur GND Hierarchie Visualisierung von Sachbegriffen&lt;/a> erstellt. Hier die Legende:&lt;/p>
&lt;/blockquote>
&lt;div class="mermaid">flowchart LR
initial(["Fokussierter Begriff"]):::initial
broader["Oberbegriff"]
initial --> broader
broaderMarked["Oberbegriff mit anderem Typ"]:::nonHeading
initial --> broaderMarked
narrower["Unterbegriff"]
narrower --> initial
similar["#Auml;hnlicher Begriff"]
initial &lt;-.-> similar
broader &lt;-.-> similar
broaderMarked &lt;-.-> similar
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
classDef nonHeading fill:#FFF,stroke:#F04D0E,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Wir hatten im &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2023-02-ner-und-gnd-zur-verbesserung-der-erschliessung/">letzten Blogbeitrag&lt;/a> schon den &lt;em>Perserteppich&lt;/em> erwähnt, der über &lt;code>complexSeeReferenceSubject&lt;/code> mit den Begriffen &lt;em>Teppich&lt;/em> und &lt;em>Iran&lt;/em> verknüpft ist.
Im folgenden Diagramm haben wir einige weitere Beispiele für Begriffe, die über Komposita definiert sind.
Darüber werden als Oberbegriffe auch GND Konzepte nachgeladen, die &lt;strong>nicht&lt;/strong> vom Typ &lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeading" target="_blank" rel="noopener">Subject heading&lt;/a> oder einem Untertypen davon sind.
Diese können zum Beispiel vom Typ oder einem Untertypen von
&lt;a href="https://d-nb.info/standards/elementset/gnd#ConferenceOrEvent" target="_blank" rel="noopener">Conference or Event&lt;/a>,
&lt;a href="https://d-nb.info/standards/elementset/gnd#CorporateBody" target="_blank" rel="noopener">Corporate Body&lt;/a>,
&lt;a href="https://d-nb.info/standards/elementset/gnd#Person" target="_blank" rel="noopener">Person&lt;/a>,
&lt;a href="https://d-nb.info/standards/elementset/gnd#PlaceOrGeographicName" target="_blank" rel="noopener">Place or geographic name&lt;/a> oder
&lt;a href="https://d-nb.info/standards/elementset/gnd#Work" target="_blank" rel="noopener">Work&lt;/a> sein.&lt;/p>
&lt;div class="mermaid">flowchart LR
7505070-5(["Perserteppich"]):::initial
click 7505070-5 href "https://lobid.org/gnd/7505070-5" "7505070-5" _blank
4059482-8["Teppich"]
click 4059482-8 href "https://lobid.org/gnd/4059482-8" "4059482-8" _blank
4027653-3["Iran"]:::nonHeading
click 4027653-3 href "https://lobid.org/gnd/4027653-3" "4027653-3" _blank
7608344-5(["Venustempel"]):::initial
click 7608344-5 href "https://lobid.org/gnd/7608344-5" "7608344-5" _blank
11876800X["Venus, Göttin"]:::nonHeading
click 11876800X href "https://lobid.org/gnd/11876800X" "11876800X" _blank
4059416-6["Tempel"]
click 4059416-6 href "https://lobid.org/gnd/4059416-6" "4059416-6" _blank
7509659-6(["Osterweiterung / Europäische Union"]):::initial
click 7509659-6 href "https://lobid.org/gnd/7509659-6" "7509659-6" _blank
4128080-5["Erweiterung"]
click 4128080-5 href "https://lobid.org/gnd/4128080-5" "4128080-5" _blank
4075739-0["Osteuropa"]:::nonHeading
click 4075739-0 href "https://lobid.org/gnd/4075739-0" "4075739-0" _blank
5098525-5["Europäische Union"]:::nonHeading
click 5098525-5 href "https://lobid.org/gnd/5098525-5" "5098525-5" _blank
7505070-5 -->|complexSeeReferenceSubject| 4059482-8
7505070-5 -->|complexSeeReferenceSubject| 4027653-3
7608344-5 -->|complexSeeReferenceSubject| 11876800X
7608344-5 -->|complexSeeReferenceSubject| 4059416-6
7509659-6 -->|complexSeeReferenceSubject| 4128080-5
7509659-6 -->|complexSeeReferenceSubject| 4075739-0
7509659-6 -->|complexSeeReferenceSubject| 5098525-5
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
classDef nonHeading fill:#FFF,stroke:#F04D0E,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Dies betrifft jedoch nicht nur die Verbindungen vom Typ &lt;code>complexSeeReferenceSubject&lt;/code>.
In den folgenden Diagrammen ist das Beispiel der &lt;em>Thora&lt;/em> und des islamische Feiertags &lt;em>Maulid an-Nabi&lt;/em> gezeigt.
Hier werden jeweils Sachbegriffe mit &lt;em>Werken&lt;/em> über Verbindungen vom Typ &lt;code>broaderTermGeneral&lt;/code> verknüpft.&lt;/p>
&lt;div class="mermaid">flowchart LR
4226122-3(["Thora"]):::nonHeading
click 4226122-3 href "https://lobid.org/gnd/4226122-3" "4226122-3" _blank
7849405-9["Thorakrone"]
click 7849405-9 href "https://lobid.org/gnd/7849405-9" "7849405-9" _blank
4590779-1["Thorakapsel"]
click 4590779-1 href "https://lobid.org/gnd/4590779-1" "4590779-1" _blank
4457982-2["Thorawimpel"]
click 4457982-2 href "https://lobid.org/gnd/4457982-2" "4457982-2" _blank
4617346-8["Thoramantel"]
click 4617346-8 href "https://lobid.org/gnd/4617346-8" "4617346-8" _blank
7526823-1["Thorazeiger"]
click 7526823-1 href "https://lobid.org/gnd/7526823-1" "7526823-1" _blank
4232170-0["Thoraschrein"]
click 4232170-0 href "https://lobid.org/gnd/4232170-0" "4232170-0" _blank
4185330-1["Thorarolle"]
click 4185330-1 href "https://lobid.org/gnd/4185330-1" "4185330-1" _blank
7849405-9 -->|broaderTermGeneral| 4226122-3
4590779-1 -->|broaderTermGeneral| 4226122-3
4457982-2 -->|broaderTermGeneral| 4226122-3
4617346-8 -->|broaderTermGeneral| 4226122-3
7526823-1 -->|broaderTermGeneral| 4226122-3
4232170-0 -->|broaderTermGeneral| 4226122-3
4185330-1 -->|broaderTermGeneral| 4226122-3
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
classDef nonHeading fill:#FFF,stroke:#F04D0E,stroke-width:3px,color:#000;
&lt;/div>
&lt;div class="mermaid">flowchart LR
7566591-8(["Maulid an-Nabi"]):::initial
click 7566591-8 href "https://lobid.org/gnd/7566591-8" "7566591-8" _blank
4310274-8["Maulid"]:::nonHeading
click 4310274-8 href "https://lobid.org/gnd/4310274-8" "4310274-8" _blank
4121583-7["Religiöses Fest"]
click 4121583-7 href "https://lobid.org/gnd/4121583-7" "4121583-7" _blank
7566591-8 -->|broaderTermGeneral| 4310274-8
7566591-8 -->|broaderTermInstantial| 4121583-7
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
classDef nonHeading fill:#FFF,stroke:#F04D0E,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Nach unseren Analysen kommen wir auf 558 Knoten mit mindestens einem Oberbegriff, der &lt;strong>nicht&lt;/strong> vom Typ &lt;em>SubjectHeading&lt;/em> ist.
Das ist bei 204.560 Sachbegriffen ein recht kleiner Anteil von circa 0,27 Prozent.
Die entsprechenden Oberbegriffe mit anderem Typ müssen beim Netzwerkaufbau und der anschließenden Analyse jedoch mit berücksichtigt werden.&lt;/p>
&lt;h3 id="mehrere-oberbegriffe">Mehrere Oberbegriffe&lt;/h3>
&lt;p>Die Verknüpfung von mehreren Oberbegriffen sorgt für Probleme bei der Berechnung von Hierarchielayouts.
Wir haben zur Visualisierung unseres Teilgraphen die Anzahl an Oberbegriffen pro Knoten auf einen Oberbegriff begrenzt.
Dadurch verlieren wir zwar Informationen &lt;strong>in der Visualisierung&lt;/strong>, können den Teilgraphen jedoch besser visuell inspizieren.&lt;/p>
&lt;h3 id="keine-oberbegriffe">Keine Oberbegriffe&lt;/h3>
&lt;p>In unserem Teilgraphen haben etwa 25 Prozent der Begriffe &lt;strong>keinen&lt;/strong> Oberbegriff.
Das hat unter anderem damit zu tun, dass die GND in vielen Bereichen entweder gar keine Hierarchieinformationen beinhaltet, oder sie inkonsequent gepflegt werden.&lt;/p>
&lt;p>Zu den in unserem Projekt verwendeten Begriffen &lt;strong>ohne&lt;/strong> Hierarchieinformationen gehören zum Beispiel &lt;a href="https://lobid.org/gnd/4000925-7" target="_blank" rel="noopener">Akte&lt;/a>, &lt;a href="https://lobid.org/gnd/4142968-0" target="_blank" rel="noopener">Archivalie&lt;/a>, &lt;a href="https://lobid.org/gnd/4002325-4" target="_blank" rel="noopener">Antiquität&lt;/a>, &lt;a href="https://lobid.org/gnd/4154290-3" target="_blank" rel="noopener">Feuerzeug&lt;/a>, &lt;a href="https://lobid.org/gnd/4029423-7" target="_blank" rel="noopener">Kamm&lt;/a>, &lt;a href="https://lobid.org/gnd/4154290-3" target="_blank" rel="noopener">Nähzeug&lt;/a>, &lt;a href="https://lobid.org/gnd/4051230-7" target="_blank" rel="noopener">Säge&lt;/a>, &amp;hellip;&lt;/p>
&lt;h3 id="ähnliche-begriffe">Ähnliche Begriffe&lt;/h3>
&lt;p>Manchmal lassen sich für verwandte Begriffe Hierarchieinformationen ermitteln.
Beispielsweise ist der Begriff &lt;a href="https://lobid.org/gnd/4181725-4" target="_blank" rel="noopener">Sofa&lt;/a> unter den &lt;a href="https://lobid.org/gnd/4055183-0" target="_blank" rel="noopener">Sitzmöbeln&lt;/a> einsortiert.
Der Begriff &lt;a href="https://lobid.org/gnd/4197693-9" target="_blank" rel="noopener">Couch&lt;/a> hingegen ist ohne jede Hierarchieinformation als verwandter Begriff zu &lt;a href="https://lobid.org/gnd/4181725-4" target="_blank" rel="noopener">Sofa&lt;/a> erfasst. Verknüpft man eine Couch mit der GND, so erhält man keine Hierarchieinformationen, verknüpft man hingegen ein Sofa, dann erhält man umfangreiche Hierarchieinformationen.
Es liegt also nahe, die Couch ebenfalls unter den Sitzmöbeln einzuordnen.&lt;/p>
&lt;p>Nach unseren Beobachtungen ist es jedoch &lt;strong>keine&lt;/strong> allgemeine Regel, dass die Hierarchieinformationen bei verwandten Begriffen weggelassen werden.
Im folgenden Diagramm ist ein (reduziertes) Beispiel zu den Begriffen &lt;a href="https://lobid.org/gnd/4184488-9" target="_blank" rel="noopener">Tasse&lt;/a> und &lt;a href="https://lobid.org/gnd/4697377-1" target="_blank" rel="noopener">Untertasse&lt;/a> gezeigt.&lt;/p>
&lt;div class="mermaid">flowchart LR
4197693-9(["Couch"]):::initial
click 4197693-9 href "https://lobid.org/gnd/4197693-9" "4197693-9" _blank
4181725-4(["Sofa"]):::initial
click 4181725-4 href "https://lobid.org/gnd/4181725-4" "4181725-4" _blank
4055183-0["Sitzmöbel"]
click 4055183-0 href "https://lobid.org/gnd/4055183-0" "4055183-0" _blank
4039860-2["Möbel"]
click 4039860-2 href "https://lobid.org/gnd/4039860-2" "4039860-2" _blank
4190181-2["Wohnungseinrichtung"]
click 4190181-2 href "https://lobid.org/gnd/4190181-2" "4190181-2" _blank
4132060-8["Hausrat"]
click 4132060-8 href "https://lobid.org/gnd/4132060-8" "4132060-8" _blank
4181725-4 --> 4055183-0
4055183-0 --> 4039860-2
4039860-2 --> 4190181-2
4190181-2 --> 4132060-8
4181725-4 &lt;-.-> 4197693-9
4184488-9(["Tasse"]):::initial
click 4184488-9 href "https://lobid.org/gnd/4184488-9" "4184488-9" _blank
4124863-6["Essgeschirr"]
click 4124863-6 href "https://lobid.org/gnd/4124863-6" "4124863-6" _blank
4697377-1(["Untertasse"]):::initial
click 4697377-1 href "https://lobid.org/gnd/4697377-1" "4697377-1" _blank
4184660-6["Teller"]
click 4184660-6 href "https://lobid.org/gnd/4184660-6" "4184660-6" _blank
4140542-0["Geschirr #lt;Hausrat#gt;"]
click 4140542-0 href "https://lobid.org/gnd/4140542-0" "4140542-0" _blank
4132060-8["Hausrat"]
click 4132060-8 href "https://lobid.org/gnd/4132060-8" "4132060-8" _blank
4184488-9 --> 4124863-6
4697377-1 --> 4184660-6
4124863-6 --> 4140542-0
4184660-6 --> 4124863-6
4140542-0 --> 4132060-8
4184488-9 &lt;-.-> 4697377-1
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Wir konnten in dem GND Graphen 3.907 Knoten identifizieren, die ggf. auf diese Art mit weiteren Hierarchieinformationen versehen werden könnten.
In unseren Daten waren es 105 Knoten, die wir mit dieser Strategie in die Hierarchie einbinden konnten.
Dabei ist jedoch zu beachten, dass durch die Einbindung über &lt;code>relatedTerm&lt;/code> Zyklen entstehen können.
Im folgenden Diagramm wird dies am Beispiel der Begriffe Körper und Leib dargestellt, wo Leib sowohl ein Oberbegriff, als auch ein verwandter Begriff zu Körper ist.&lt;/p>
&lt;div class="mermaid">flowchart LR
4031575-7(["Körper"])
click 4031575-7 href "https://lobid.org/gnd/4031575-7" "4031575-7" _blank
4132852-8(["Leib"])
click 4132852-8 href "https://lobid.org/gnd/4132852-8" "4132852-8" _blank
4031575-7 -->|broaderTermGeneral| 4132852-8
4132852-8 -.->|relatedTerm| 4031575-7
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
&lt;/div>
&lt;h2 id="analyse-subgraph">Analyse Subgraph&lt;/h2>
&lt;p>Mit den oben beschriebenen Erfahrungen und Anpassungen konnten wir aus dem Netzwerk eine darstellbare Hierarchie erzeugen, die wir visuell inspizieren können.
Dabei ist uns aufgefallen, dass die Hierarchie in vielen Bereichen ziemlich flach ausfällt.
Abbildung 3 zeigt einen &lt;strong>kleinen&lt;/strong> Ausschnitt der Hierarchie.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-zweiten-version-unseres-gnd-teilgraphen-als-hierarchie">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der zweiten Version unseres GND Teilgraphen als Hierarchie." srcset="
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-hierarchie-detail_hu37bdd6cfb39b08386bdc91a9763660b7_36461_8d1a0f9a817fab14e47de01b07bf8976.webp 400w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-hierarchie-detail_hu37bdd6cfb39b08386bdc91a9763660b7_36461_cf951e0e3f897b2d39ab6a4f32910b26.webp 760w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-hierarchie-detail_hu37bdd6cfb39b08386bdc91a9763660b7_36461_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-hierarchie-detail_hu37bdd6cfb39b08386bdc91a9763660b7_36461_8d1a0f9a817fab14e47de01b07bf8976.webp"
width="85"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der zweiten Version unseres GND Teilgraphen als Hierarchie.
&lt;/figcaption>&lt;/figure>
&lt;p>Der Radius der grauen Knoten gibt ungefähr an, wie viele Akten mit diesem Begriff direkt gefunden werden würden.
Die Skalierung musste jedoch nach unten auf 5 Treffer und oben auf 50 Treffer begrenzt werden.
Ansonsten wären Kreise mit einem kleineren Durchmesser nicht mehr sichtbar, und einzelne Begriffe mit mehr als 1.000 betroffenen Akten würden große Teile des Graphen überdecken.&lt;/p>
&lt;p>Die roten Knoten zeigen Begriffe, für die wir keine direkten Treffer in den Akten haben. Diese wurden über die Hierarchieinformationen der GND als zusätzliche Begriffe nachgeladen. Diese zusätzlichen Begriffe machen in manchen Bereichen Sinn.&lt;/p>
&lt;p>In den Bereichen Biologie und Chemie, die sehr ausführliche und tiefe Hierarchieinformationen haben, sollten die Begriffe in unserem Teilgraphen jedoch reduziert werden. So ist es fachlich zwar korrekt, dass Messing eine Kupferlegierung ist, die zu den Buntmetalllegierungen gehört, welche zu den Schwermetallegierungen gehört, welches eine Legierung ist&amp;hellip; diese Informationen bieten in unserem Kontext jedoch keinen Mehrwert.&lt;/p>
&lt;p>Hier werden wir in Nachfolgearbeiten versuchen, mit verschiedenen Algorithmen aus der Netzwerkanalyse &amp;ldquo;überflüssige&amp;rdquo; Knoten wieder aus der Hierarchie zu entfernen.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-dritten-version-unseres-gnd-teilgraphen-als-hierarchie-mit-einfärbungen">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der dritten Version unseres GND Teilgraphen als Hierarchie mit Einfärbungen." srcset="
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-hierarchie-detail-farbig_huc6ad8d76e162113c75a855bf90cd30f4_77111_241104071964809e5afef24ed0721a2d.webp 400w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-hierarchie-detail-farbig_huc6ad8d76e162113c75a855bf90cd30f4_77111_9f79c6fe332babf1213f3723179ad7c9.webp 760w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-hierarchie-detail-farbig_huc6ad8d76e162113c75a855bf90cd30f4_77111_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/screenshot-hierarchie-detail-farbig_huc6ad8d76e162113c75a855bf90cd30f4_77111_241104071964809e5afef24ed0721a2d.webp"
width="760"
height="569"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der dritten Version unseres GND Teilgraphen als Hierarchie mit Einfärbungen.
&lt;/figcaption>&lt;/figure>
&lt;p>In einer weiteren Verbesserung der Visualisierung der Hierarchie in unserem GND Teilgraphen in Abbildung 4 haben wir einzelne Knoten zusätzlich eingefärbt.&lt;/p>
&lt;ul>
&lt;li>Orange: Gegenstand&lt;/li>
&lt;li>Grün: Material&lt;/li>
&lt;li>Blau: Marke/Herkunft&lt;/li>
&lt;li>Lila: Stil&lt;/li>
&lt;li>Gemischt Rot: mehrere Kategorien&lt;/li>
&lt;/ul>
&lt;p>So konnten bei der visuellen Prüfung schon einige Probleme und fehlerhafte GND Abgleiche identifiziert werden, die in der Liste der mehr als 67.500 Einzelbegriffe untergegangen waren.
In Abbildung 4 ist zum Beispiel das Glas in einem gemischten Rot markiert, weil der Begriff sowohl für den &lt;strong>Gegenstand&lt;/strong> Glas, als auch für das &lt;strong>Material&lt;/strong> Glas verwendet wurde. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;h2 id="analyse-gnd-subjectheading-graph">Analyse GND &lt;em>SubjectHeading&lt;/em> Graph&lt;/h2>
&lt;p>Wir haben uns gefragt, ob wir bei der Extraktion unseres GND Teilgraphen Fehler gemacht haben, oder einfach Pech mit unseren Daten hatten, oder ob sich manche Eigenschaften unseres GND Teilgraphen auch im großen Graphen der GND &lt;em>SubjectHeadings&lt;/em> wiederfinden.&lt;/p>
&lt;p>Daher haben wir eine oberflächliche Analyse des &lt;em>SubjectHeadings&lt;/em> Graphen durchgeführt.&lt;/p>
&lt;h3 id="komponenten-und-größen">Komponenten und Größen&lt;/h3>
&lt;figure id="figure-streudiagramm-zur-darstellung-der-eigenschaften-von-komponenten-im-gnd-subjectheading-graph">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Streudiagramm zur Darstellung der Eigenschaften von Komponenten im GND *SubjectHeading* Graph." srcset="
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze_hu52002487e9390097dde4028970c89462_29818_c75bd9213a447cac0c6c98aeb7873746.webp 400w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze_hu52002487e9390097dde4028970c89462_29818_9686bbdae67d69fdf5d40ed2f08b37f1.webp 760w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze_hu52002487e9390097dde4028970c89462_29818_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze_hu52002487e9390097dde4028970c89462_29818_c75bd9213a447cac0c6c98aeb7873746.webp"
width="640"
height="480"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Streudiagramm zur Darstellung der Eigenschaften von Komponenten im GND &lt;em>SubjectHeading&lt;/em> Graph.
&lt;/figcaption>&lt;/figure>
&lt;p>Unsere erste Feststellung war, dass der Gesamtgraph der GND &lt;em>SubjectHeadings&lt;/em> mit 204.560 Knoten in 47.388 Teilgraphen (Komponenten) zerfällt, die nicht miteinander verbunden sind.&lt;/p>
&lt;p>In Abbildung 5 ist ein Streudiagramm gezeigt, wo auf der X-Achse die Größe der Komponente und auf der Y-Achse die Anzahl an Komponenten dieser Größe dargestellt ist. Die Größe des Symbols zeigt, wie viele unterschiedliche (Sub)Typen von &lt;em>SubjectHeading&lt;/em> betroffen sind.&lt;/p>
&lt;p>Auf Grund der enormen Größenunterschiede ist das Diagram logarithmisch skaliert, so dass die Interpretation schwierig(er) ist.&lt;/p>
&lt;p>Der Stern ganz links oben stellt 41.465 Komponenten dar, die jeweils nur aus &lt;strong>einem&lt;/strong> Knoten bestehen.
Dies umfasst die Typen &lt;em>CharactersOrMorphemes&lt;/em> (2.912), &lt;em>EthnographicName&lt;/em> (1.257), &lt;em>GroupOfPersons&lt;/em> (158), &lt;em>HistoricSingleEventOrEra&lt;/em> (635), &lt;em>Language&lt;/em> (5), &lt;em>MeansOfTransportWithIndividualName&lt;/em> (8), &lt;em>NomenclatureInBiologyOrChemistry&lt;/em> (15.132), &lt;em>ProductNameOrBrandName&lt;/em> (422), &lt;em>SoftwareProduct&lt;/em> (134), &lt;em>SubjectHeading&lt;/em> (12), &lt;em>SubjectHeadingSensoStricto&lt;/em> (20.900).&lt;/p>
&lt;p>Der Stern ganz rechts unten stellt &lt;strong>eine&lt;/strong> Komponente mit einer Größe von 140.105 Knoten dar, welche die Typen &lt;em>CharactersOrMorphemes&lt;/em> (261), &lt;em>EthnographicName&lt;/em> (2.510), &lt;em>GroupOfPersons&lt;/em> (589), &lt;em>HistoricSingleEventOrEra&lt;/em> (4.031), &lt;em>Language&lt;/em> (5.942), &lt;em>MeansOfTransportWithIndividualName&lt;/em> (1.479), &lt;em>NomenclatureInBiologyOrChemistry&lt;/em> (11.428), &lt;em>ProductNameOrBrandName&lt;/em> (6.994), &lt;em>SoftwareProduct&lt;/em> (8.056), &lt;em>SubjectHeading&lt;/em> (8.220) und &lt;em>SubjectHeadingSensoStricto&lt;/em> (91.381) umfasst.&lt;/p>
&lt;h3 id="anteil-von-komponenten-bestimmter-größen">Anteil von Komponenten bestimmter Größen&lt;/h3>
&lt;p>Aus dem Diagramm in Abbildung 5 lässt sich ablesen, dass der Graph nicht vollständig verbunden ist und sich in zwei Extreme verteilt.
Viele Knoten sind gar nicht, oder nur wenig in Hierarchien eingebunden, andere sind in einem Netzwerk mit 140.105 Knoten zusammengefasst.
In dem Diagramm in Abbildung 6 ist dies noch einmal visuell dargestellt. Der letzte große Teilgraph mit den 140.105 Knoten ist im Diagramm abgeschnitten.&lt;/p>
&lt;figure id="figure-diagramm-zur-kumulierten-darstellung-des-prozentualen-anteils-von-komponenten-bestimmter-größen">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Diagramm zur kumulierten Darstellung des prozentualen Anteils von Komponenten bestimmter Größen." srcset="
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-cum_hu9e16205d3fa40412855eeee4ec8222cb_26124_992b7fe053cfe79ac10d998663d75edf.webp 400w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-cum_hu9e16205d3fa40412855eeee4ec8222cb_26124_9386aab1ea96c0401f2501861cf14e84.webp 760w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-cum_hu9e16205d3fa40412855eeee4ec8222cb_26124_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-cum_hu9e16205d3fa40412855eeee4ec8222cb_26124_992b7fe053cfe79ac10d998663d75edf.webp"
width="640"
height="480"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Diagramm zur kumulierten Darstellung des prozentualen Anteils von Komponenten bestimmter Größen.
&lt;/figcaption>&lt;/figure>
&lt;p>Auf der X-Achse ist wieder die Größe der Komponenten abgebildet und auf der Y-Achse der prozentuale Anteil an Knoten, den Komponenten dieser Größe im Gesamtgraphen innehaben.&lt;/p>
&lt;ul>
&lt;li>Etwa 20 Prozent der Knoten haben &lt;strong>keine&lt;/strong> Hierarchieinformationen.&lt;/li>
&lt;li>Etwa 30 Prozent der Knoten sind in Teilgraphen mit weniger als 20 Knoten verbunden.&lt;/li>
&lt;li>Etwa 68 Prozent der Knoten sind in einem Teilgraphen mit 140.105 Knoten zu finden.&lt;/li>
&lt;/ul>
&lt;h3 id="tiefe-der-hierarchie">Tiefe der Hierarchie&lt;/h3>
&lt;p>Es wäre zu erwarten, dass mit Zunahme der Größe der Komponenten auch die Tiefe der Hierarchie steigt.
Daher haben wir in einem &lt;a href="https://de.wikipedia.org/wiki/Box-Plot" target="_blank" rel="noopener">Boxplot&lt;/a> in Abbildung 7 die maximale Tiefe der Hierarchie jeder Komponente analysiert und sortiert nach Komponentengröße ausgewertet.&lt;/p>
&lt;figure id="figure-boxplot-zur-darstellung-der-verteilung-der-max-tiefe-pro-komponentengröße">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Boxplot zur Darstellung der Verteilung der max. Tiefe pro Komponentengröße." srcset="
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-boxplot-diameter_hu8c955f372abddff8a20ef0a87f275672_43565_0885eb5468d6ef19ed004307f96ef654.webp 400w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-boxplot-diameter_hu8c955f372abddff8a20ef0a87f275672_43565_9ae06120c79035c34862a9f3a9a6dad5.webp 760w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-boxplot-diameter_hu8c955f372abddff8a20ef0a87f275672_43565_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-boxplot-diameter_hu8c955f372abddff8a20ef0a87f275672_43565_0885eb5468d6ef19ed004307f96ef654.webp"
width="760"
height="507"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Boxplot zur Darstellung der Verteilung der max. Tiefe pro Komponentengröße.
&lt;/figcaption>&lt;/figure>
&lt;p>Prinzpiell steigt die Tiefe der Hierarchie mit steigender Komponentengröße etwas.
Jedoch wäre bei einer Komponente mit 114 Knoten mehr als 2 Hierarchiestufen zu erwarten.
Oder bei einer Komponente mit 140.105 Knoten mehr als 13 Hierarchiestufen.&lt;/p>
&lt;h3 id="kindknoten-pro-knoten">Kindknoten pro Knoten&lt;/h3>
&lt;p>Wenn es relativ wenig Hierachiestufen gibt, liegt die Vermutung nahe, dass es in den einzelnen Komponenten Knoten gibt, die sehr viele direkte Unterknoten haben. Daher haben wir noch einmal die Anzahl an Kindknoten pro Knoten analysiert und sortiert nach Komponentengröße in einem Boxplot in Abbildung 8 ausgewertet.&lt;/p>
&lt;figure id="figure-boxplot-zur-darstellung-der-verteilung-der-anzahl-von-kindknoten-pro-komponentengröße">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Boxplot zur Darstellung der Verteilung der Anzahl von Kindknoten pro Komponentengröße." srcset="
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-boxplot-degree_hu87aeaab33c49bee17e43933941fdaea1_99270_f3f65ead298de022d683cbda529f81c3.webp 400w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-boxplot-degree_hu87aeaab33c49bee17e43933941fdaea1_99270_7d4d0a7e2424787f62b2d02185cce7b4.webp 760w,
/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-boxplot-degree_hu87aeaab33c49bee17e43933941fdaea1_99270_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2023-03-gnd-hierarchie-zur-verbesserung-der-erschliessung/gnd-hierarchy-analyze-boxplot-degree_hu87aeaab33c49bee17e43933941fdaea1_99270_f3f65ead298de022d683cbda529f81c3.webp"
width="760"
height="507"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Boxplot zur Darstellung der Verteilung der Anzahl von Kindknoten pro Komponentengröße.
&lt;/figcaption>&lt;/figure>
&lt;p>Die graue Linie markiert die maximale Anzahl an Kindknoten, die ein Knoten in einer Komponente einer bestimmten Größe haben kann.
Auffällig ist, dass es bei vielen Komponenten Knoten gibt, die nahe an dieser Grenze liegen.
Die Komponente besteht dann aus einem Oberknoten mit dem (fast) alle restlichen Knoten der Komponente verbunden sind.&lt;/p>
&lt;p>Interessant sind auch die drei Knoten in der größten Komponente, die mehr als 1.000 direkte Kindknoten haben.
Hierbei handelt es sich um eine große Anzahl an Verbindungen des Typs &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermInstantial" target="_blank" rel="noopener">Broader term (instantial)&lt;/a>, die im &lt;a href="https://explore.gnd.network/" target="_blank" rel="noopener">GND Explorer&lt;/a> als &amp;ldquo;Ist ein Beispiel für andere Entität&amp;rdquo; angezeigt werden.&lt;/p>
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;p>Nach anfänglichen Schwierigkeiten konnten wir eine für uns in großen Teilen brauchbare Hierarchie aus der GND extrahieren, die wir für unser Projekt weiter bearbeiten können.&lt;/p>
&lt;p>Wir waren in unserem Teilgraphen verwundert über die doch vielen Begriffe, die ohne Hierarchieinformationen in der GND liegen.
Mit unserer Analyse des Gesamtgraphen konnten wir bestätigen, dass dies wohl ein generelles Problem bei GND Sachbegriffen ist.&lt;/p>
&lt;p>Auch sind die Hierarchien in unserem Teilgraphen selbst relativ flach, was sich bei der Analyse des Gesamtgraphen ebenfalls als Eigenschaft der GND bestätigte.&lt;/p>
&lt;p>Alternativ könnte es sich auch um ein systematisches Problem in unserer LOD Variante der GND oder unserer Auswahl von Verbindungsarten zwischen GND Sachbegriffen liegen. Wir konnten in unseren Stichproben jedoch keine Hinweise auf solche Fehler finden.&lt;/p>
&lt;p>Es würde sich jetzt anbieten die Analyse ausführlicher zu gestalten und dabei zum Beispiel zusätzlich GND Sachgruppen, die einzelnen Subtypen von &lt;em>SubjectHeading&lt;/em>, sowie die unterschiedlichen Verbindungsarten weiter zu analysieren. Dies würde jedoch den Rahmen unseres aktuellen Projektes übersteigen.&lt;/p>
&lt;p>Prinzipiell kommt es nach unseren Beobachtungen darauf an, in welchem (Fach-)Bereich man sich innerhalb der GND Sachbegriffen bewegt.
So fanden wir für unseren Anwendungsfall die Hierarchieinformationen für Haushaltsgegenstände unzureichend, die zu Musikinstrumenten passend und hilfreich, und die für Begriffe aus der Biologie und Chemie zu ausführlich.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Details zur Motivation und unserem generellen Vorgehen haben wir schon unter &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2023-02-ner-und-gnd-zur-verbesserung-der-erschliessung/">NER und GND zur Verbesserung der Erschließung&lt;/a> berichtet.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Details zum Glas als Material und Gegenstand, sowie zu den Kategorien, finden sich im Artikel &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2023-02-ner-und-gnd-zur-verbesserung-der-erschliessung/">NER und GND zur Verbesserung der Erschließung&lt;/a>.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Named-entity Recognition und Gemeinsame Normdatei zur Verbesserung der Erschließung</title><link>https://fdmlab.landesarchiv-bw.de/post/2023-02-ner-und-gnd-zur-verbesserung-der-erschliessung/</link><pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2023-02-ner-und-gnd-zur-verbesserung-der-erschliessung/</guid><description>&lt;p>Das FDMLab unterstützt das Projekt &lt;a href="https://landesarchiv-bw.de/de/landesarchiv/projekte/provenienzforschung-im-landesarchiv/projektueberblick-/61576" target="_blank" rel="noopener">Provenienzforschung im Landesarchiv&lt;/a> bei der Verbesserung der Auffindbarkeit von relevanten Akten.
In diesem Blogbeitrag fassen wir unsere Erfahrungen beim Einsatz von Named-entity Recognition (NER) zur Extraktion von spezifischen Sachbegriffen und der Verknüpfung dieser Sachbegriffe mit der Gemeinsamen Normdatei (GND) zusammen.&lt;/p>
&lt;p>Wir berichteten bereits in &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/">NER Modell mit GND Starthilfe trainieren&lt;/a>, wie wir ein Experiment zum Trainieren eines NER Modells zur Erkennung von Objekten, Kunst-, Kultur- und Alltagsgegenständen in den Erschließungsdaten bestimmter Bestände durchführten. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;p>Diese Vorarbeiten für das Projekt Provenienzforschung wurden im Januar produktiv umgesetzt, so dass wir über unsere ersten Ergebnisse und Erfahrungen berichten können.&lt;/p>
&lt;h2 id="motivation-volltextsuche-vs-verschlagwortung">Motivation: Volltextsuche vs Verschlagwortung&lt;/h2>
&lt;p>In den Findmitteln des Landesarchives gibt es in bestimmten Beständen umfangreiche Erschließungsdaten zu Objekten, Kunst-, Kultur- und Alltagsgegenständen, die im Kontext der Provenienzforschung interessant sein könnten. Diese Bestände sind aktuell nur mit einer Volltextsuche zu durchsuchen.&lt;/p>
&lt;p>Sucht man zum Beispiel nach einer &amp;ldquo;Porzellantasse&amp;rdquo;, so ergeben sich Probleme mit der deutschen Sprache und der unterschiedlichen Tiefe der Erschließung einzelner Akten oder Bestände.
Hier sind einige konstruierte Beispiele, wie die gesuchte &amp;ldquo;Porzellantasse&amp;rdquo; in unseren Erschließungsdaten gelistet sein könnte:&lt;/p>
&lt;ol>
&lt;li>&lt;code>Anzeige des Verlustes der Wohnungseinrichtung der Freiburger Wohnung.&lt;/code>&lt;/li>
&lt;li>&lt;code>... darunter ein Porzellanservice ...&lt;/code>&lt;/li>
&lt;li>&lt;code>... ein Porzellanservice bestehend aus 4 Tassen, 4 Tellern, ...&lt;/code>&lt;/li>
&lt;li>&lt;code>Im Hausrat befanden sich..., Ludwigsburger Porzellantassen, ...&lt;/code>&lt;/li>
&lt;li>&lt;code>... 4 Tassen (Ludwigsburger Porzellan, Empire Stil) ...&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>Mit dem Suchwort &amp;ldquo;Porzellantasse&amp;rdquo; in einer einfachen Volltextsuche, würde man von diesen fünf Beispielen lediglich das vierte Beispiel in den Suchergebnissen finden.&lt;/p>
&lt;p>Um die Auffindbarkeit von Objekten zu erhöhen, wollen wir solche Erschließungsdaten daher zusätzlich mit Schlagworten versehen. Da (neue) Schlagworte im LABW mit einer GND-ID versehen sind, &lt;strong>könnte&lt;/strong> eine semantische Suche bei der Suche nach Findbucheinträgen mit dem Schlagwort &amp;ldquo;Tasse&amp;rdquo; auch die &amp;ldquo;Porzellantasse&amp;rdquo; berücksichtigen.
Wie in dem folgenden Diagramm dargestellt, ist in der GND die Information gespeichert, dass die Porzellantasse ein Spezialfall einer Tasse ist, welches zum Essgeschirr dazugehört, usw.&lt;/p>
&lt;div class="mermaid">flowchart LR
4175414-1(["Porzellantasse"]):::initial
click 4175414-1 href "https://lobid.org/gnd/4175414-1" "4175414-1" _blank
4184488-9["Tasse"]
click 4184488-9 href "https://lobid.org/gnd/4184488-9" "4184488-9" _blank
4124863-6["Essgeschirr"]
click 4124863-6 href "https://lobid.org/gnd/4124863-6" "4124863-6" _blank
4186181-4["Trinkgefäß"]
click 4186181-4 href "https://lobid.org/gnd/4186181-4" "4186181-4" _blank
4140542-0["Geschirr #lt;Hausrat#gt;"]
click 4140542-0 href "https://lobid.org/gnd/4140542-0" "4140542-0" _blank
4128003-9["Gefäß"]
click 4128003-9 href "https://lobid.org/gnd/4128003-9" "4128003-9" _blank
4132060-8["Hausrat"]
click 4132060-8 href "https://lobid.org/gnd/4132060-8" "4132060-8" _blank
4020299-9["Gerät"]
click 4020299-9 href "https://lobid.org/gnd/4020299-9" "4020299-9" _blank
4175414-1 --> 4184488-9
4184488-9 --> 4124863-6
4184488-9 --> 4186181-4
4124863-6 --> 4140542-0
4186181-4 --> 4128003-9
4140542-0 --> 4132060-8
4128003-9 --> 4020299-9
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Da wir aktuell keine semantische Suche anbieten, müssen wir die zusätzlichen Schlagworte selbst ergänzen.
Also zum Beispiel den Begriff Tasse für Porzellantasse ergänzen.&lt;/p>
&lt;blockquote>
&lt;p>Die Diagramme wurden mit unserer experimentellen &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">Webanwendung zur GND Hierarchie Visualisierung von Sachbegriffen&lt;/a> erstellt. Hier die Legende:&lt;/p>
&lt;/blockquote>
&lt;div class="mermaid">flowchart LR
initial(["Fokussierter Begriff"]):::initial
broader["Oberbegriff"]
initial --> broader
narrower["Unterbegriff"]
narrower --> initial
missing["Erwartete Verknüpfung"]
initial x-.-x missing
category[["GND Sachgruppe"]]:::category
initial --> category
broader --> category
narrower --> category
similar["#Auml;hnlicher Begriff"]
initial &lt;-.-> similar
broader &lt;-.-> similar
narrower &lt;-.-> similar
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;h2 id="workflow">Workflow&lt;/h2>
&lt;p>Unser technischer Workflow besteht aus den folgenden fünf Schritten:&lt;/p>
&lt;div class="mermaid">---
title: Workflow
config:
look: handDrawn
theme: neutral
---
flowchart LR
filtern["1. Filtern"]
ner["2. NER"]
normalisieren["3. Normalisieren"]
gnd_abgleich["4. GND Abgleich"]
begriffe_nachladen["5. Oberbegriffe"]
filtern --> ner --> normalisieren --> gnd_abgleich --> begriffe_nachladen
&lt;/div>
&lt;ol>
&lt;li>Das &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-einsteiger/02-filtern-und-sortieren/">Filtern&lt;/a> der relevanten Findbücher und Findbucheinträge erfolgte mit OpenRefine auf einem CSV-Abzug der Daten in unserem Archivischen Fachinformationssystem (AFIS).&lt;/li>
&lt;li>Das &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/">Named-entity Recognition&lt;/a> wurde mit einem über &lt;a href="https://prodi.gy/" target="_blank" rel="noopener">Prodigy&lt;/a> selbst trainierten &lt;a href="https://spacy.io/" target="_blank" rel="noopener">spaCy&lt;/a> Modell durchgeführt.&lt;/li>
&lt;li>Die Normalisierung der via NER gefundenen Begriffe erfolgte unter anderem mit &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-einsteiger/05-clustering/">Clustering-Methoden in OpenRefine&lt;/a>.&lt;/li>
&lt;li>Der &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-einsteiger/06-reconciling-mit-gnd/">GND Abgleich&lt;/a> erfolgte ebenfalls mit OpenRefine über die &lt;a href="https://lobid.org/gnd/api#openrefine" target="_blank" rel="noopener">lobid-gnd OpenRefine Reconciliation Schnittstelle&lt;/a>.&lt;/li>
&lt;li>Das Nachladen der Oberbegriffe erfolgte auf Grund der Größe des resultierenden Netzwerkes auf einer lokalen Kopie der &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/">GND in ihrer LOD-Form in Oxigraph&lt;/a>. Dort wurden mit SPARQL die relevanten Knoten und Verbindungen extrahiert, anschließend mit &lt;a href="https://networkx.org/" target="_blank" rel="noopener">NetworkX&lt;/a> zu einem Netzwerk zusammengefügt und mit &lt;a href="https://pyvis.readthedocs.io/en/latest/" target="_blank" rel="noopener">PyVis&lt;/a> visualisiert.&lt;/li>
&lt;/ol>
&lt;h2 id="ner-ergebnisse-und-normalisierung-workflow-schritte-2--3">NER Ergebnisse und Normalisierung (Workflow Schritte 2 + 3)&lt;/h2>
&lt;p>Wir haben mit unserem NER Modell 66.206 Begriffe extrahiert (Schritt 2), wovon 1.468 wieder verworfen wurden (Schritt 3+4).
Das entspricht einer Genauigkeit von etwa 97,8%. Damit sind wir etwas besser, als die laut Modellevaluation erwarteten 95% Genauigkeit.
Nach der Normalisierung (Schritt 3) hatten wir 67.561 Begriffe, die wir mit 1.753 Begriffen in der GND verlinken konnten (Schritt 4).&lt;/p>
&lt;p>Die Steigerung der Anzahl der Begriffe kommt daher, dass wir beim Modelltraining gemeinsame Begriffe z.B. aus Aufzählungen auch gemeinsam erfasst und später in OpenRefine getrennt haben. Prinzipiell wird das umgekehrte Verfahren empfohlen, also die Begriffe getrennt zu markieren/extrahieren und in einem nachgelagerten Arbeitsschritt zu verknüpfen. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup> Dies war uns für dieses einmal durchgeführte Projekt jedoch zu aufwendig.&lt;/p>
&lt;p>Hier an konkreten Beispielen erklärt:&lt;/p>
&lt;ul>
&lt;li>Aus dem zusammengesetzten Begriff &lt;code>China- und Perserteppiche&lt;/code> werden in Schritt 3 die zwei Begriffe &lt;code>Teppich aus China&lt;/code> und &lt;code>Perserteppich&lt;/code>.&lt;/li>
&lt;li>Aus &lt;code>Porzellantassen, -teller und -kannen&lt;/code> werden in Schritt 3 die drei Begriffe &lt;code>Tasse aus Porzellan&lt;/code>, &lt;code>Teller aus Porzellan&lt;/code> und &lt;code>Kanne aus Porzellan&lt;/code>.&lt;/li>
&lt;li>Aus &lt;code>Gabeln, Messer und Löffel aus Silber&lt;/code> werden in Schritt 3 die drei Begriffe &lt;code>Gabel aus Silber&lt;/code>, &lt;code>Messer aus Silber&lt;/code> und &lt;code>Löffel aus Silber&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Ein weiteres Problem, welches uns beim Normalisieren der Begriffe aufgefallen ist, ist dass wir zusammengesetzte Begriffe haben, die sich in diesem Detailgrad nicht mit der GND abgleichen lassen.
Daher haben wir jeden Begriff in die vier Bestandteile Gegenstand, Material, Herkunft/Marke und Stil zerlegt. &lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>&lt;/p>
&lt;p>In der folgenden Tabelle wird gezeigt, wie die &lt;code>Ludwigsburger Empire-Porzellantasse&lt;/code> in die vier Bestandteile zerlegt (1) und anschließend mit dem möglichst spezifischsten Begriff in der GND abgeglichen wurde (2).&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>Gegenstand&lt;/th>
&lt;th>Material&lt;/th>
&lt;th>Herkunft/Marke&lt;/th>
&lt;th>Stil&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>(1)&lt;/td>
&lt;td>Tasse&lt;/td>
&lt;td>Porzellan&lt;/td>
&lt;td>Ludwigsburger Porzellan&lt;/td>
&lt;td>Empire&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>(2)&lt;/td>
&lt;td>&lt;a href="https://lobid.org/gnd/4175414-1" target="_blank" rel="noopener">Porzellantasse&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://lobid.org/gnd/4046851-3" target="_blank" rel="noopener">Porzellan&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://lobid.org/gnd/4168206-3" target="_blank" rel="noopener">Ludwigsburger Porzellan&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://lobid.org/gnd/4152103-1" target="_blank" rel="noopener">Empire&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="probleme-beim-abgleich-mit-der-gnd-workflow-schritt-4">Probleme beim Abgleich mit der GND (Workflow Schritt 4)&lt;/h2>
&lt;p>Beim Finden von passenden Konzepten und Begriffen in der GND haben sich mit unseren Daten mehrere Probleme ergeben.&lt;/p>
&lt;div class="alert alert-note">
&lt;div>
&lt;ol>
&lt;li>Dieser Artikel zeigt eine Momentaufnahme der GND zum Zeitpunkt unserer Projektumsetzung.
Im Zuge der kontinuierlichen Verbesserung der Datenqualität der GND haben sich einige der im Folgenden beschriebenen Probleme eventuell schon erledigt.&lt;/li>
&lt;li>Prinzipiell wäre ein auf Objekte ausgelegter Thesaurus, wie zum Beispiel der &lt;a href="https://www.getty.edu/research/tools/vocabularies/aat" target="_blank" rel="noopener">Art &amp;amp; Architecture Thesaurus von Getty&lt;/a>, für unsere Daten geeigneter. Jedoch ist im LABW aktuell lediglich die GND als Normdatenvokabular freigegeben.&lt;/li>
&lt;li>In der GND wird zwischen Begriffen unterschieden, die für die Sacherschließung, für die Formalerschließung oder beide gemeinsam genutzt werden sollten. Die lobid-gnd OpenRefine Reconciliation API, als auch unsere im FDMLab genutzten Werkzeuge, arbeiten jedoch mit der Linked-Open-Data Form der GND. In dieser Variante wird die Information zur Verwendung nicht veröffentlicht, weshalb wir sie (meistens) ignorieren.&lt;/li>
&lt;/ol>
&lt;/div>
&lt;/div>
&lt;h3 id="teppiche">Teppiche&lt;/h3>
&lt;p>Teppiche sind häufig nach ihrer Herkunft benannt.
Bekannt ist hier zum Beispiel der &lt;a href="https://lobid.org/gnd/7505070-5" target="_blank" rel="noopener">Perserteppich&lt;/a>, welcher in der GND als &lt;a href="https://d-nb.info/standards/elementset/gnd#complexSeeReferenceSubject" target="_blank" rel="noopener">Kompositum&lt;/a> aus den Begriffen &lt;a href="https://lobid.org/gnd/4059482-8" target="_blank" rel="noopener">Teppich&lt;/a> und &lt;a href="https://lobid.org/gnd/4027653-3" target="_blank" rel="noopener">Iran&lt;/a> zusammengesetzt wurde.
Leider war das auch der einzige Teppich in unseren Daten, für den wir ein entsprechendes Konstrukt in der GND finden konnten. &lt;sup id="fnref:4">&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref">4&lt;/a>&lt;/sup>&lt;/p>
&lt;h3 id="porzellan">Porzellan&lt;/h3>
&lt;p>Porzellan wird ähnlich wie Teppiche nach seiner Herkunft bezeichnet.
In der GND finden sich unter dem Sachbegriff &lt;a href="https://lobid.org/gnd/4046851-3" target="_blank" rel="noopener">Porzellan&lt;/a> einige bekannte Bezeichnungen wie &lt;a href="https://lobid.org/gnd/4192819-2" target="_blank" rel="noopener">Berliner Porzellan&lt;/a>, &lt;a href="https://lobid.org/gnd/4168206-3" target="_blank" rel="noopener">Ludwigsburger Porzellan&lt;/a> und &lt;a href="https://lobid.org/gnd/4114559-8" target="_blank" rel="noopener">Meißener Porzellan&lt;/a>. Diese sind anders als Teppiche jedoch nicht als Kompositum mit relationierten Beziehungen angelegt, sondern es ist eine direkte Beziehung zu dem Normdateneintrag des Herstellers und/oder des Geografikums hinterlegt.&lt;/p>
&lt;p>Für die in unseren Daten verzeichneten Allacher, Bavaria, Capodimonte, Delfter, Fraureuther, Hanauer, Hörter, Hutschenreuther, Karlsbader, Königszelter, Langenthaler, Limoges, Niederweiler, Nürnberger, Schierholz, Schorndorfer, Schramberger, Selb und Straßburger Porzellane mussten wir uns jedoch eine eigene Lösung überlegen.&lt;/p>
&lt;h3 id="musikinstrumente">Musikinstrumente&lt;/h3>
&lt;p>Musikinstrumente werden häufig nach dem Namen des Erbauers bzw. als Erweiterung davon nach der Firma benannt.
So hatten wir in unseren Daten Geigen von Reményi und Stradivari, sowie Flügel von Bechstein, Blüthner, Duysen, Förster, Gotrian, Kreutzbach, Pfeiffer, Schiedmayer, Steingräber, Steinway und Steinweg.&lt;/p>
&lt;p>Hier ergibt sich das Problem, dass es in der GND keine &amp;ldquo;Stradivari-Geige&amp;rdquo; gibt.
Selbst wenn die Erbauer in der GND als Person angelegt sind, so widerstrebt es uns Personen als Ergänzung zu Sachbegriffen zu verknüpfen.&lt;/p>
&lt;h3 id="fehlende-begriffe">Fehlende Begriffe&lt;/h3>
&lt;p>Gerade im Bereich Haushaltsgegenstände fehlten uns in der GND einige Begriffe, für die es bisher wohl keine Verwendung gab.
Beispielsweise konnten wir keine passenden Begriffe für Kaminbesteck (Schürhaken, &amp;hellip;), Garderobe, oder Kleiderständer finden.
Auch ein Bügelbrett, Einkochtopf, Vorlegebesteck oder Servicebesteck suchten wir vergebens.&lt;/p>
&lt;p>Manchmal ist der unterschiedliche Detailgrad ähnlicher Begriffe auch verwirrend:&lt;/p>
&lt;ul>
&lt;li>Es gibt einen &lt;a href="https://lobid.org/gnd/4507258-9" target="_blank" rel="noopener">Salzstreuer&lt;/a> aber keinen Pfefferstreuer.&lt;/li>
&lt;li>Es gibt eine &lt;a href="https://lobid.org/gnd/4577571-0" target="_blank" rel="noopener">Kaffeekanne&lt;/a> und eine &lt;a href="https://lobid.org/gnd/4226545-9" target="_blank" rel="noopener">Teekanne&lt;/a>, aber keine Mokkakanne.&lt;/li>
&lt;li>Es gibt eine &lt;a href="https://lobid.org/gnd/4732915-4" target="_blank" rel="noopener">Kaffeetasse&lt;/a> und eine &lt;a href="https://lobid.org/gnd/4741995-7" target="_blank" rel="noopener">Mokkatasse&lt;/a>, aber keine Teetasse.&lt;/li>
&lt;li>Es gibt einen &lt;a href="https://lobid.org/gnd/4201303-3" target="_blank" rel="noopener">Teelöffel&lt;/a> aber keinen Kaffeelöffel oder Mokkalöffel.&lt;/li>
&lt;/ul>
&lt;h3 id="mehrdeutige-begriffe-bei-materialangaben">Mehrdeutige Begriffe bei Materialangaben&lt;/h3>
&lt;p>Manche Begriffe werden in der Deutschen Sprache mehrdeutig verwendet.
Dies wird in der GND manchmal berücksichtigt, manchmal auch nicht.
So können zum Beispiel Glas, Keramik und Terrakotta sowohl für das Material als auch für den Gegenstand verwendet werden.&lt;/p>
&lt;div class="mermaid">flowchart LR
4184790-8(["Terrakotta"]):::initial
click 4184790-8 href "https://lobid.org/gnd/4184790-8" "4184790-8" _blank
cat0[["Kunsthandwerk"]]:::category
click cat0 href "https://lobid.org/gnd/search?q=type%3ASubjectHeading%20AND%20gndSubjectCategory.label%3A%22Kunsthandwerk%22" "cat0" _blank
cat1[["Glas, Keramik, Steine und Erden"]]:::category
click cat1 href "https://lobid.org/gnd/search?q=type%3ASubjectHeading%20AND%20gndSubjectCategory.label%3A%22Glas%2C%20Keramik%2C%20Steine%20und%20Erden%22" "cat1" _blank
cat2[["Plastik"]]:::category
click cat2 href "https://lobid.org/gnd/search?q=type%3ASubjectHeading%20AND%20gndSubjectCategory.label%3A%22Plastik%22" "cat2" _blank
4030270-2(["Keramik"]):::initial
click 4030270-2 href "https://lobid.org/gnd/4030270-2" "4030270-2" _blank
4021142-3(["Glas"]):::initial
click 4021142-3 href "https://lobid.org/gnd/4021142-3" "4021142-3" _blank
4184790-8 --> cat0
4184790-8 --> cat1
4184790-8 --> cat2
4030270-2 --> cat1
4030270-2 --> cat0
4030270-2 --> cat2
4021142-3 --> cat1
4021142-3 --> cat0
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Komplizierter ist es bei anderen Materialien, die im nachfolgenden Diagramm gelistet sind.
So gibt es für einen &amp;ldquo;Gegenstand aus Bronze&amp;rdquo; in der GND einen spezifischen Begriff &amp;ldquo;Bronzegegenstand&amp;rdquo;, der mit dem Material Bronze verknüpft ist.
Einen Messing-, Silber- oder Zinngegenstand gibt es nicht.
Bei dem Eisen-, Gold-, Holz-, Kupfer- und Metallgegenstand fehlt die Verknüpfung zu dem Material, weshalb wir sie zuerst übersehen haben.
Der Bleigegenstand ist dem Metallgegenstand untergeordnet, die anderen Metallgegenstände jedoch nicht.&lt;/p>
&lt;p>Als Unikat ist der Holzgegenstand in die Hierarchie der Agrarprodukte eingebunden.
Die restlichen Gegenstände im Diagramm schweben &amp;ldquo;haltlos&amp;rdquo; außerhalb einer Hierarchie.&lt;/p>
&lt;div class="mermaid">flowchart TD
1042935793(["Bleigegenstand"]):::initial
click 1042935793 href "https://lobid.org/gnd/1042935793" "1042935793" _blank
4285971-2(["Eisengegenstand"]):::initial
click 4285971-2 href "https://lobid.org/gnd/4285971-2" "4285971-2" _blank
4146676-7(["Bronzegegenstand"]):::initial
click 4146676-7 href "https://lobid.org/gnd/4146676-7" "4146676-7" _blank
4166111-4(["Kupfergegenstand"]):::initial
click 4166111-4 href "https://lobid.org/gnd/4166111-4" "4166111-4" _blank
4157843-0(["Goldgegenstand"]):::initial
click 4157843-0 href "https://lobid.org/gnd/4157843-0" "4157843-0" _blank
4169585-9(["Metallgegenstand"]):::initial
click 4169585-9 href "https://lobid.org/gnd/4169585-9" "4169585-9" _blank
4160516-0(["Holzgegenstand"]):::initial
click 4160516-0 href "https://lobid.org/gnd/4160516-0" "4160516-0" _blank
4387668-7["Holzprodukt"]
click 4387668-7 href "https://lobid.org/gnd/4387668-7" "4387668-7" _blank
4272528-8["Forstprodukt"]
click 4272528-8 href "https://lobid.org/gnd/4272528-8" "4272528-8" _blank
4068470-2["Agrarprodukt"]
click 4068470-2 href "https://lobid.org/gnd/4068470-2" "4068470-2" _blank
4145879-5["Blei"]
click 4145879-5 href "https://lobid.org/gnd/4145879-5" "4145879-5" _blank
4146667-6["Bronze"]
click 4146667-6 href "https://lobid.org/gnd/4146667-6" "4146667-6" _blank
4157819-3["Gold"]
click 4157819-3 href "https://lobid.org/gnd/4157819-3" "4157819-3" _blank
4133759-1["Silber"]
click 4133759-1 href "https://lobid.org/gnd/4133759-1" "4133759-1" _blank
4014002-7["Eisen"]
click 4014002-7 href "https://lobid.org/gnd/4014002-7" "4014002-7" _blank
4033734-0["Kupfer"]
click 4033734-0 href "https://lobid.org/gnd/4014002-7" "4033734-0" _blank
4190888-0["Zinn"]
click 4190888-0 href "https://lobid.org/gnd/4190888-0" "4190888-0" _blank
4169517-3["Messing"]
click 4169517-3 href "https://lobid.org/gnd/4169517-3" "4169517-3" _blank
4038860-8["Metall"]
click 4038860-8 href "https://lobid.org/gnd/4038860-8" "4038860-8" _blank
4025668-6["Holz"]
click 4025668-6 href "https://lobid.org/gnd/4146667-6" "4025668-6" _blank
subgraph material["Material"]
4145879-5
4146667-6
4157819-3
4133759-1
4014002-7
4033734-0
4190888-0
4169517-3
4038860-8
4025668-6
end
1042935793 --> 4169585-9
1042935793 &lt;-.-> 4145879-5
4285971-2 x-.-x 4014002-7
4157843-0 x-.-x 4157819-3
4169585-9 x-.-x 4038860-8
4160516-0 x-.-x 4025668-6
4146676-7 &lt;-.-> 4146667-6
4166111-4 x-.-x 4033734-0
4160516-0 &lt;-.-> 4387668-7
4160516-0 --> 4387668-7 --> 4272528-8 --> 4068470-2
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;p>Die Extraktion spezifischer Sachbegriffe aus unseren Erschließungsdaten mit einem selbst trainierten Modell für Named-entity Recognition funktionierte besser als erwartet.&lt;/p>
&lt;p>Die anschließenden Schritte zur Normalisierung und dem Abgleich der Daten zeigten auch hier Potential für noch mehr Automatisierung. Gleichzeitig gestaltete sich der Abgleich unserer Sachbegriffe mit den Normdaten der GND als intellektuell herausfordernd.
Hier holten wir uns häufig zusätzliche Unterstützung von unserer &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">Webanwendung zur Visualisierung von Sachbegriffen in der GND&lt;/a> und fragten Details über den &lt;a href="https://explore.gnd.network/" target="_blank" rel="noopener">GND Explorer&lt;/a> ab.&lt;/p>
&lt;p>Prinzipiell würden wir uns von vielem in der GND mehr wünschen: mehr Begriffe, mehr Varianten, mehr Struktur und mehr Uniformität.
Gleichzeitig wissen wir den Komfort der lobid-gnd OpenRefine Reconciliation API und der schon für die GND geleistete Arbeit zu schätzen.&lt;/p>
&lt;p>Über die Ergebnisse des Fünften Schrittes &amp;ldquo;Aufbau einer Hierarchie basierend auf Informationen aus der GND&amp;rdquo; berichten wir separat.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Auf Grund von Schutzfristen ist noch nicht klar, welche Bestände wir nach Abschluss des Projektes schon veröffentlichen können.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Siehe &lt;a href="https://twitter.com/explosion_ai/status/1601257372743307265" target="_blank" rel="noopener">Best practice recommendations from Explosion.ai on Twitter&lt;/a>.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:3">
&lt;p>Das mag Routine für die Beschreibung von Objekten in Museen sein, ist bei uns im Archiv jedoch unüblich.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:4">
&lt;p>In der GND gibt es noch den &lt;a href="https://lobid.org/gnd/7506699-3" target="_blank" rel="noopener">Berberteppich&lt;/a>, der ebenfalls als Kompositum angelegt wurde, für den wir in unseren Daten jedoch keine Beispiele hatten.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>GND in lokale Datenbank laden (reloaded)</title><link>https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/</link><pubDate>Tue, 13 Dec 2022 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/</guid><description>&lt;p>Wir setzen unser lokales Testsystem für Experimente mit der Linked Open Data Version der Gemeinsamen Normdatei mit &lt;strong>Oxigraph&lt;/strong> neu auf.&lt;/p>
&lt;p>Wir hatten vor über einem Jahr schon einen ausführlichen Artikel zum &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/">Laden der GND in einen Apache Jena Triplestore&lt;/a> verfasst. Das beschriebene Setup ist nach wie vor im Einsatz und wir sind auch (meistens) zufrieden damit. Jedoch dauert das Einlesen von Daten doch recht lange, was das Aufsetzen von Ad-Hoc Experimenten erschwert.&lt;/p>
&lt;p>Daher haben wir als Alternative das relativ neue Projekt Oxigraph getestet.&lt;/p>
&lt;h2 id="datenbank-oxigraph">Datenbank: Oxigraph&lt;/h2>
&lt;figure class="float-right" id="figure-oxigraphhttpsgithubcomoxigraphoxigraph-logo">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="[Oxigraph](https://github.com/oxigraph/oxigraph) Logo." srcset="
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph_hu63b9f0ab308a14bda665a5c76457113b_25957_f2299a627e7fb33ac96514090804a724.webp 400w,
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph_hu63b9f0ab308a14bda665a5c76457113b_25957_1d6ee86304e49f7ccba2ffbaf645acd7.webp 760w,
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph_hu63b9f0ab308a14bda665a5c76457113b_25957_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph_hu63b9f0ab308a14bda665a5c76457113b_25957_f2299a627e7fb33ac96514090804a724.webp"
width="200"
height="450"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
&lt;a href="https://github.com/oxigraph/oxigraph" target="_blank" rel="noopener">Oxigraph&lt;/a> Logo.
&lt;/figcaption>&lt;/figure>
&lt;p>Das Projekt &lt;a href="https://github.com/oxigraph/oxigraph" target="_blank" rel="noopener">Oxigraph&lt;/a> ermöglicht uns ein ähnliches Setup, wie wir es mit &lt;a href="https://jena.apache.org/" target="_blank" rel="noopener">Apache Jena&lt;/a> aufgebaut haben.
Anders als Apache Jena basiert Oxigraph auf der Programmiersprache &lt;a href="https://www.rust-lang.org/" target="_blank" rel="noopener">Rust&lt;/a> und verwendet &lt;a href="https://rocksdb.org/" target="_blank" rel="noopener">RocksDB&lt;/a> als Datenbank im Hintergrund.
Das ist für den Endanwender jedoch nicht sichtbar, so dass diese technischen Details sich hauptsächlich in einer schnelleren Verarbeitungsgeschwindigkeit bemerkbar machen.&lt;/p>
&lt;h2 id="einlesen-der-daten">Einlesen der Daten&lt;/h2>
&lt;p>Zum Einlesen haben wir uns die Datei &lt;code>authorities-gnd_lds.nt.gz&lt;/code> aus dem &lt;a href="https://data.dnb.de/opendata/" target="_blank" rel="noopener">DNB Data Dump&lt;/a> heruntergeladen.
Anders als in unserem Apache Jena Projekt, müssen wir die Komprimierung der Daten vor dem Einlesen mit &lt;code>gzip -d authorities-gnd_lds.nt.gz&lt;/code> auflösen. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;p>Wir arbeiten mit der folgenden Ordnerstruktur:&lt;/p>
&lt;div class="mermaid">---
title: Ordnerstruktur
config:
look: handDrawn
theme: neutral
---
flowchart TD
subgraph data[far:fa-folder-open data]
fuseki[far:fa-folder oxigraph]
gnd_triples[far:fa-folder gnd_triples]
end
root[far:fa-folder-open oxigraph_test] --> data
root --> README[far:fa-file README.md]
&lt;/div>
&lt;ul>
&lt;li>&lt;strong>README.md&lt;/strong>: Überblick über das Projekt und die Daten geben!&lt;/li>
&lt;li>&lt;strong>oxigraph&lt;/strong>: Ordner zum Persistieren der Datenbank von Oxigraph.&lt;/li>
&lt;li>&lt;strong>gnd_triples&lt;/strong>: Speicherort der &lt;code>.nt&lt;/code> Datei.&lt;/li>
&lt;/ul>
&lt;h3 id="einlese-variante-1">Einlese-Variante 1&lt;/h3>
&lt;p>In dieser Variante lassen wir zuerst die Daten in einem Container einlesen und dann in einem neuen Container anzeigen.
Der folgende Befehl startet einen Docker Container mit dem Verzeichnis der Daten zum Einlesen und einem Verzeichnis zum Speichern der Datenbank.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -it --rm --name&lt;span class="o">=&lt;/span>gnd-oxigraph -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/gnd_triples:/gnd_triples&amp;#34;&lt;/span> -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/oxigraph:/data&amp;#34;&lt;/span> oxigraph/oxigraph --location /data load --file /gnd_triples/authorities-gnd_lds.nt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Sobald der Einleseprozess beendet wurde und der Container sich schließt, können wir einen neuen Container zum Arbeiten mit den Daten starten.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -d --rm --name&lt;span class="o">=&lt;/span>gnd-oxigraph -p 8080:7878 -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/oxigraph:/data&amp;#34;&lt;/span> oxigraph/oxigraph --location /data serve --bind&lt;span class="o">=&lt;/span>0.0.0.0:7878
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Anschließend können wir die Benutzeroberfläche in einem Webbrowser über &lt;code>http://localhost:8080&lt;/code> aufrufen.
Der Port &lt;code>8080&lt;/code> wurde hierbei von uns im &lt;code>docker run&lt;/code> Befehl gesetzt und kann angepasst werden.&lt;/p>
&lt;h3 id="einlese-variante-2">Einlese-Variante 2&lt;/h3>
&lt;p>Wir können die Daten auch direkt &lt;strong>in&lt;/strong> dem Arbeitscontainer einlesen lassen.
Beim Starten des Containers müssen wir dabei zusätzlich den Pfad zu den GND Daten einbinden.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -d --rm --name&lt;span class="o">=&lt;/span>gnd-oxigraph -p 8080:7878 -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/gnd_triples:/gnd_triples&amp;#34;&lt;/span> -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/oxigraph:/data&amp;#34;&lt;/span> oxigraph/oxigraph --location /data serve --bind&lt;span class="o">=&lt;/span>0.0.0.0:7878
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Anschließend starten wir den Einleseprozess, indem wir den Befehl &lt;code>oxigraph_server load&lt;/code> in dem laufenden Container ausführen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> -it gnd-oxigraph /usr/local/bin/oxigraph load --location /data --file /gnd_triples/authorities-gnd_lds.nt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-anzeigen-der-daten">3. Anzeigen der Daten&lt;/h3>
&lt;p>Abschließend testen wir exemplarisch, ob die Daten nutzbar sind.
Hierfür verwenden wir eine SPARQL Abfrage mit einem Standardbeispiel aus der &lt;a href="https://d-nb.info/standards/elementset/gnd" target="_blank" rel="noopener">GND Ontology&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/118514091&amp;gt;&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="zusammenfassung-und-ausblick">Zusammenfassung und Ausblick&lt;/h2>
&lt;p>Oxigraph ist im Vergleich zu Apache Jena noch etwas grob an manchen Stellen und befindet sich noch in der aktiven Entwicklung.
Es ist also gut möglich, dass die hier verwendeten Befehle in einer späteren Version nicht mehr so funktioniert oder Schritte wie das Auflösen der &lt;code>.gz&lt;/code>-Komprimierung nicht mehr notwendig sind. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-weboberfläche-von-oxigraph">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Weboberfläche von Oxigraph." srcset="
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph-screenshot_hu46c0a90aff7302944c5b3bc96ca6bf21_89821_9a012596cf5469f100ebbf1a0ff06c8a.webp 400w,
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph-screenshot_hu46c0a90aff7302944c5b3bc96ca6bf21_89821_eca82f98e844b81442eb250a334bbf3e.webp 760w,
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph-screenshot_hu46c0a90aff7302944c5b3bc96ca6bf21_89821_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph-screenshot_hu46c0a90aff7302944c5b3bc96ca6bf21_89821_9a012596cf5469f100ebbf1a0ff06c8a.webp"
width="760"
height="485"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Bildschirmfoto der Weboberfläche von Oxigraph.
&lt;/figcaption>&lt;/figure>
&lt;p>Überrascht waren wir von der Geschwindigkeit, mit der die Daten der GND eingelesen und Abfragen ausgeführt werden können.
In der folgenden Tabelle ist ein direkter Vergleich mit unserem Apache Jena Setup für das Einlesens der GND und das Durchführens der Abfrage aus &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/">Erste Experimente mit der GND&lt;/a> gelistet.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th style="text-align:right">GND laden&lt;/th>
&lt;th style="text-align:right">Testabfrage&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Apache Jena&lt;/td>
&lt;td style="text-align:right">5.329,1s&lt;/td>
&lt;td style="text-align:right">17,5s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Oxigraph&lt;/td>
&lt;td style="text-align:right">391,0s&lt;/td>
&lt;td style="text-align:right">3,6s&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Das ist natürlich kein ausführlicher oder repräsentativer Benchmark, zeigt aber direkt den Geschwindigkeitsunterschied mit den Daten mit denen wir aktuell arbeiten. Das ermöglichst uns zukünftig Umgebungen für Ad-Hoc Experimente mit der GND zu erstellen.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Wir haben für diesen Blogbeitrag Oxigraph in Version v0.3.8 und den GND Dump vom 13. Oktober 2022 verwendet.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>&lt;a href="https://github.com/oxigraph/oxigraph/tree/main/server#using-a-docker-image" target="_blank" rel="noopener">Dokumentation zur Verwendung des Oxigraph Docker Image&lt;/a>&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>NER Modell mit GND Starthilfe trainieren</title><link>https://fdmlab.landesarchiv-bw.de/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/</link><pubDate>Tue, 27 Sep 2022 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/</guid><description>&lt;p>In diesem Artikel beschäftigen wir uns mit dem Thema &lt;em>Named Entity Recognition&lt;/em>.
Wir trainieren ein eigenes Modell zur Erkennung von Kunst- und Kulturobjekten in unseren Erschließungsdaten und verwenden als Starthilfe die Gemeinsame Normdatei.&lt;/p>
&lt;h2 id="ner-und-erschließung">NER und Erschließung&lt;/h2>
&lt;p>Ein Arbeitsschritt bei der Erschließung ist die Erstellung von Deskriptoren, also die Identifikation von relevanten Entitäten in den zu verzeichnenden Archivalien.
Dazu gehören relevante Körperschaften, Personen, Orte und Dinge.
Wenn möglich, werden die identifizierten Entitäten zusätzlich mit passenden IDs aus der Gemeinsamen Normdatei (GND) versehen und somit semantisch verknüpft (Linked Data).
Im Bereich des maschinellen Lernens werden diese beiden Schritte &lt;em>Named Entity Recognition&lt;/em> (NER) und &lt;em>Named Entity Linking&lt;/em> (NEL) genannt.&lt;/p>
&lt;p>Dieser Arbeitsschritt findet in der Realität nicht unbedingt direkt bei der initialen Erfassung statt.
Wir haben im Landesarchiv noch analoge Findmittel, die wir Retrodigitalisieren, und digitale Findbücher, bei der die Schlagworte (Deskriptoren) fehlen oder unvollständig sind.&lt;/p>
&lt;p>In einem Experiment zur Vorbereitung eines Projektes im Kontext der Provenienzforschung testeten wir verschiedene Möglichkeiten NER zur Identifikation von beschriebenen Kunst- und Kulturobjekten in unseren Erschließungsdaten zu verwenden. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;h2 id="ner-im-kontext-archiv">NER im Kontext Archiv&lt;/h2>
&lt;p>&lt;em>Named Entity Recognition&lt;/em> gehört zu den stabilen und gern genutzten KI Verfahren zur Extraktion von Informationen.
Dafür gibt es schon vortrainierte Modelle, die innerhalb eines &lt;em>Natural Language Processing&lt;/em> (NLP) Frameworks wie &lt;a href="https://spacy.io/" target="_blank" rel="noopener">spaCy&lt;/a> oder &lt;a href="https://github.com/flairNLP/flair" target="_blank" rel="noopener">flair&lt;/a> verwendet werden können.
Für unser Experiment haben wir uns für &lt;a href="https://spacy.io/" target="_blank" rel="noopener">spaCy&lt;/a> als NLP Framework entschieden, da es ein für uns passendes Ökosystem mitbringt.&lt;/p>
&lt;p>Hier ein mit NER verarbeiteter Beispieltext über das Landesarchiv Baden-Württemberg, welcher von der englischsprachigen Wikipedia angepasst wurde. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="entities" style="line-height: 2.5; direction: ltr">&lt;br>
&lt;mark class="entity" style="background: #cedb9c; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
The State Archives
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">ORG&lt;/span>
&lt;/mark>
of Baden-Württemberg (
&lt;mark class="entity" style="background: #cedb9c; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
LABW
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">ORG&lt;/span>
&lt;/mark>
) encompasses all state archives in
&lt;mark class="entity" style="background: #e7ba52; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Baden-Württemberg
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">GPE&lt;/span>
&lt;/mark>
.&lt;br>
&lt;mark class="entity" style="background: #cedb9c; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
The State Archives
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">ORG&lt;/span>
&lt;/mark>
of Baden-Württemberg is part of the portfolio of
&lt;mark class="entity" style="background: #d6616b; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
the Baden-Württemberg Ministry for Science, Research and Arts
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">FAC&lt;/span>
&lt;/mark>
.&lt;br>It keeps historic documents that reach back to
&lt;mark class="entity" style="background: #e7cb94; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
the middle ages
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">DATE&lt;/span>
&lt;/mark>
.&lt;br>The current President of
&lt;mark class="entity" style="background: #cedb9c; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
the State Archives
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">ORG&lt;/span>
&lt;/mark>
of Baden-Württemberg has been Prof. Dr.
&lt;mark class="entity" style="background: #a55194; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Gerald Maier
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">PERSON&lt;/span>
&lt;/mark>
since
&lt;mark class="entity" style="background: #e7cb94; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
February 1st, 2018
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">DATE&lt;/span>
&lt;/mark>
.&lt;br>It employs
&lt;mark class="entity" style="background: #843c39; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
around 250
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">CARDINAL&lt;/span>
&lt;/mark>
people at
&lt;mark class="entity" style="background: #843c39; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
8
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">CARDINAL&lt;/span>
&lt;/mark>
locations.&lt;br>&lt;/div>
&lt;hr>
&lt;p>Das Model &lt;em>en_core_web_lg&lt;/em> hat generell einen &lt;strong>f-score&lt;/strong> von &lt;strong>0,85&lt;/strong> und unterscheidet &lt;strong>18&lt;/strong> Arten von &lt;strong>Entitäten&lt;/strong>: CARDINAL, DATE, EVENT, FAC, GPE, LANGUAGE, LAW, LOC, MONEY, NORP, ORDINAL, ORG, PERCENT, PERSON, PRODUCT, QUANTITY, TIME und WORK_OF_ART. &lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>&lt;/p>
&lt;hr>
&lt;p>Farblich hervorgehoben sind die vom Modell erkannten Entitäten und leicht abgesetzt der bestimmte Entitätentyp.
Der &lt;strong>f-score&lt;/strong> besagt in diesem Fall (vereinfacht!), dass in der Evaluation des Modells, von den gesuchten Entitäten etwa 85% gefunden wurden (&lt;em>Recall&lt;/em>) und von den markierten Entitäten etwa 85% richtig markiert wurden (&lt;em>Precision&lt;/em>). &lt;sup id="fnref:4">&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref">4&lt;/a>&lt;/sup>
In unserem von Wikipedia angepassten Beispieltext bestätigten sich diese Werte.&lt;/p>
&lt;p>Hier ein mit NER verarbeiteter Beispieltext über das Landesarchiv Baden-Württemberg, welcher von der deutschsprachigen Wikipedia angepasst wurde. &lt;sup id="fnref:5">&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref">5&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="entities" style="line-height: 2.5; direction: ltr">&lt;br>Das
&lt;mark class="entity" style="background: #8c6d31; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Landesarchiv Baden-Württemberg
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">LOC&lt;/span>
&lt;/mark>
(LABW) umfasst alle
&lt;mark class="entity" style="background: #b5cf6b; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
baden-württembergischen
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">MISC&lt;/span>
&lt;/mark>
Staatsarchive.&lt;br>Es gehört zum Geschäftsbereich des
&lt;mark class="entity" style="background: #cedb9c; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Ministeriums für Wissenschaft, Forschung und Kunst Baden-Württemberg.
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">ORG&lt;/span>
&lt;/mark>
&lt;br>Es verwahrt historische Dokumente, die bis zum Mittelalter zurückreichen.&lt;br>Der amtierende Präsident des
&lt;mark class="entity" style="background: #a55194; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Landesarchives
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">PER&lt;/span>
&lt;/mark>
ist seit dem 01. Februar 2018 Prof. Dr.
&lt;mark class="entity" style="background: #a55194; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Gerald Maier.
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">PER&lt;/span>
&lt;/mark>
&lt;br>Es beschäftigt circa 250 Mitarbeiter an 8 Standorten.&lt;br>&lt;/div>
&lt;hr>
&lt;p>Das Model &lt;em>de_core_news_lg&lt;/em> hat einen &lt;strong>f-score&lt;/strong> von &lt;strong>0,85&lt;/strong> und unterscheidet &lt;strong>4&lt;/strong> Arten von &lt;strong>Entitäten&lt;/strong>: LOC, MISC, ORG, PER. &lt;sup id="fnref:6">&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref">6&lt;/a>&lt;/sup>&lt;/p>
&lt;hr>
&lt;p>Das Modell für die deutsche Sprache erkennt und unterscheidet deutlich weniger Arten von Entitäten.
Das hat damit zu tun, dass es für die deutsche Sprache keine so umfangreichen und frei verfügbaren Trainingsdaten gibt.
Die Qualität der Erkennung (&lt;strong>f-score&lt;/strong>) ist mit dem des englischsprachigen Modells vergleichbar.
Aus Sicht deutschsprachiger Anwender ist es jedoch frustrierend sich auf vier Arten von Entitäten beschränken zu müssen.&lt;/p>
&lt;p>Wenden wir das deutschsprachige Modell auf Texte in unseren Erschließungsdaten an, so gibt es noch ein weiteres Problem. &lt;sup id="fnref:7">&lt;a href="#fn:7" class="footnote-ref" role="doc-noteref">7&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="entities" style="line-height: 2.5; direction: ltr">&lt;br>Besitzhinweis auf Mobiliar (hauptsächlich gekauft bei der
&lt;mark class="entity" style="background: #8c6d31; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Möbelfirma
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">LOC&lt;/span>
&lt;/mark>
&lt;mark class="entity" style="background: #a55194; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Winfried Mueller, Stuttgart
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">PER&lt;/span>
&lt;/mark>
), 1 vollständigen Silberkasten und mindestens 4 Silber-Becher.&lt;br>Zahlung von 11100 fl. samt rückständigen neunjährigen Zinsen in Höhe von 4999 fl. oder Einsetzung in das adelige Gut Werenwag.&lt;br>Gen. Forderung stammt aus Streit über Erbe des im November 1595 verst. K[C]aspar (von)
&lt;mark class="entity" style="background: #b5cf6b; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Laubenberg.
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">MISC&lt;/span>
&lt;/mark>
&lt;br>Entzug des ordentlichen Richters und Verstoß gegen Haigerlocher
&lt;mark class="entity" style="background: #a55194; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Evokationsprivileg
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">PER&lt;/span>
&lt;/mark>
durch Verschleppung kläg. Sohns gen. &amp;quot;junger Lenz&amp;quot; nach Sigmaringen, wo gegen ihn
&lt;mark class="entity" style="background: #a55194; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">
Kriminalprozeß
&lt;span style="font-size: 0.8em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">PER&lt;/span>
&lt;/mark>
angestrengt wurde.&lt;br>&lt;/div>
&lt;hr>
&lt;p>Bei unseren Texten hat das Modell praktisch einen &lt;strong>f-score&lt;/strong> von (nahe) 0.
Das ist jedoch kein Problem des spaCy Modells, sondern ein generelles Problem von NER (&lt;strong>Domänenproblem&lt;/strong>).
Das auf allgemeinen Texten trainierte Modell funktioniert wie erwartet auf Wikipedia Texten, hat jedoch Probleme mit der speziellen Domäne der &amp;ldquo;Erschließungsdaten im LABW&amp;rdquo;.&lt;/p>
&lt;p>Das bedeutet, dass wir für die meisten unserer Probleme keine vortrainierten Modelle verwenden können, sondern Modelle speziell für unsere Anwendungszwecke neu erstellen oder nachtrainieren müssen.
Das erfordert aktuell&lt;/p>
&lt;ul>
&lt;li>Technisch versierte Personen, die Daten Pipelines und Workflows erstellen können.&lt;/li>
&lt;li>Fachpersonal, welches die entsprechenden Trainingsdaten erstellen kann.&lt;/li>
&lt;li>Eine Softwareumgebung zur Erstellung der Trainingsdaten.&lt;/li>
&lt;li>Eine Hardwareumgebung zum Trainieren der Modelle.&lt;/li>
&lt;/ul>
&lt;p>Da dies von den meisten kulturellen Einrichtungen nicht geleistet werden kann, arbeiten mehrere NFDI Konsortien, darunter &lt;a href="https://nfdi4culture.de/" target="_blank" rel="noopener">NFDI4Culture&lt;/a> und je nach Genehmigungsstatus ab nächstem Jahr &lt;a href="https://4memory.de/" target="_blank" rel="noopener">NFDI4Memory&lt;/a> daran, mögliche Lösungen für diese Anforderungen zu entwickeln und zur Verfügung zu stellen.&lt;/p>
&lt;p>Da das FDMLab explizit dafür ausgelegt ist, solche Probleme zu untersuchen und damit wertvolle Vorarbeiten zu leisten, konnten wir uns dieses Problem ansehen und exemplarisch an einer konkreten Aufgabe durcharbeiten.&lt;/p>
&lt;h2 id="trainieren-eines-ner-modells">Trainieren eines NER Modells&lt;/h2>
&lt;p>Bei der Erstellung von Trainingsdaten für unser NER Modell waren wir mit dem so genannten &amp;ldquo;Kaltstart&amp;rdquo;-Problem konfrontiert.
Das bedeutet, dass wir noch keine Trainingsdaten hatten und auch keine Möglichkeit diese auf einfache Art- und Weise zu &amp;ldquo;synthetisieren&amp;rdquo;.
Da wir es in unserem speziellen Fall explizit mit Kunst- und Kulturobjekten zu tun haben und es in der GND einen umfangreichen Thesaurus mit Sachschlagworten gibt, hatten wir die Idee die Sachschlagworte in der GND als erste Grundlage zu verwenden und anschließend in einem aktiven Lernverfahren den Trainingsprozess für das Fachpersonal zu vereinfachen. &lt;sup id="fnref:8">&lt;a href="#fn:8" class="footnote-ref" role="doc-noteref">8&lt;/a>&lt;/sup>&lt;/p>
&lt;h3 id="vorbereitungen">Vorbereitungen&lt;/h3>
&lt;p>Wir verwenden &lt;a href="https://spacy.io/" target="_blank" rel="noopener">spaCy&lt;/a> als NLP Framework und &lt;a href="https://prodi.gy/" target="_blank" rel="noopener">prodigy&lt;/a> zur Erstellung der Trainingsdaten.
Damit können wir basierend auf den Begriffen aus der GND eine Sammlung von Regeln hinterlegen, die automatisch Begriffe vorauswählen. &lt;sup id="fnref:9">&lt;a href="#fn:9" class="footnote-ref" role="doc-noteref">9&lt;/a>&lt;/sup>&lt;/p>
&lt;p>Dafür müssen die Daten aus der GND erst noch extrahiert und aufbereitet werden.&lt;/p>
&lt;h4 id="gnd-daten-extrahieren">GND Daten extrahieren&lt;/h4>
&lt;p>Wie wir die &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/">GND in ihrer Linked Open Data (LOD) Form in einen lokalen Apache Jena Server laden&lt;/a>, haben wir bereits ausführlich beschrieben.
Die Schlagworte extrahieren wir anschließend via SPARQL zusammen mit ihren Varianten und GND Sachgruppen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndCat&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/gnd-sc#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">skos&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2004/02/skos/core#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?gndID&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?namex&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">AS&lt;/span> &lt;span class="nv">?name&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?variantsx&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?variants&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">GROUP_CONCAT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?categoryName&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nf">SEPARATOR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;|&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">AS&lt;/span> &lt;span class="nv">?categories&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?gndID&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">gndSubjectCategory&lt;/span> &lt;span class="nv">?category&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?category&lt;/span> &lt;span class="nn">skos&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">prefLabel&lt;/span> &lt;span class="nv">?categoryName&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">lang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?categoryName&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;de&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?gndID&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?prefName&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">AS&lt;/span> &lt;span class="nv">?namex&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">GROUP_CONCAT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?variant&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nf">SEPARATOR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;|&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">AS&lt;/span> &lt;span class="nv">?variantsx&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?subjectType&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">SubjectHeading&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">SubjectHeadingSensoStricto&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ProductNameOrBrandName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?gndID&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?subjectType&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?prefName&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?gndID&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?variant&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">GROUP BY&lt;/span> &lt;span class="nv">?gndID&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">GROUP BY&lt;/span> &lt;span class="nv">?gndID&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Bei der Abfrage beschränken wir uns auf die Typen &lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeading" target="_blank" rel="noopener">SubjectHeading&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeadingSensoStricto" target="_blank" rel="noopener">SubjectHeadingSensoStricto&lt;/a> und &lt;a href="https://d-nb.info/standards/elementset/gnd#ProductNameOrBrandName" target="_blank" rel="noopener">ProductNameOrBrandName&lt;/a>.
Ein Begriff kann in der GND auch mit alternativen Benennungen gelistet werden (&lt;em>variants&lt;/em>).
Diese sind zwar hilfreich, jedoch nicht so umfassend wie die Daten im englischsprachen &lt;a href="https://de.wikipedia.org/wiki/WordNet" target="_blank" rel="noopener">WordNet&lt;/a> oder im lizenzpflichtigen deutschsprachigen &lt;a href="https://de.wikipedia.org/wiki/GermaNet" target="_blank" rel="noopener">GermaNet&lt;/a>.
Ein Begriff ist einer oder mehreren &lt;a href="https://d-nb.info/standards/vocab/gnd/gnd-sc.html" target="_blank" rel="noopener">Sachgruppen&lt;/a> zugeordnet.&lt;/p>
&lt;p>In der folgenden Tabelle ist das Ergebnis der SPARQL-Abfrage mit fünf Ergebnissen gezeigt.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>gndID&lt;/th>
&lt;th>name&lt;/th>
&lt;th>variants&lt;/th>
&lt;th>categories&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>4300598-6&lt;/td>
&lt;td>Tonnelierter Raum&lt;/td>
&lt;td>Barrelled spaces &lt;strong>|&lt;/strong> Espace tonnelé&lt;/td>
&lt;td>Mathematik&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4207912-3&lt;/td>
&lt;td>Götter &amp;lt;Motiv&amp;gt;&lt;/td>
&lt;td>&lt;/td>
&lt;td>Sachliche Motive in der Kunst &lt;strong>|&lt;/strong> Literarische Motive, Stoffe, Gestalten&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7528956-8&lt;/td>
&lt;td>Pflanzenbeobachtung&lt;/td>
&lt;td>Pflanzen / Beobachtung&lt;/td>
&lt;td>Botanik (Allgemeines)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4379234-0&lt;/td>
&lt;td>Freiwillige Selbstkontrolle&lt;/td>
&lt;td>FSK &lt;strong>|&lt;/strong> Selbstkontrolle &amp;lt;Publizistik&amp;gt;&lt;/td>
&lt;td>Film &lt;strong>|&lt;/strong> Presse &lt;strong>|&lt;/strong> Rundfunk, Neue Medien&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4173231-5&lt;/td>
&lt;td>Papstkrönung&lt;/td>
&lt;td>Papst / Krönung&lt;/td>
&lt;td>Kirchengeschichte &lt;strong>|&lt;/strong> Geschichte überregionaler Gebiete&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="gnd-daten-aufbereiten">GND Daten aufbereiten&lt;/h4>
&lt;p>Die in Tabellenform extrahierten Begriffe werden anschließend in OpenRefine aufbereitet und markiert.
Dafür werden die mit &lt;strong>|&lt;/strong> getrennten Varianten und Sachgruppen in einer &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-fortgeschrittene/10-arbeiten-mit-records/">Record-Struktur&lt;/a> aufgelöst, sowie Ergänzungen in Klammern (&lt;em>&amp;lt;Motiv&amp;gt;&lt;/em>, &lt;em>(Allgemeines)&lt;/em>, &amp;hellip;) und Hierarchiezeichen (&lt;em>Papst / Krönung&lt;/em> =&amp;gt; &lt;em>Papst Krönung&lt;/em>) mit &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-fortgeschrittene/08-regulaere-ausdruecke/">regulären Ausdrücken&lt;/a> entfernt.&lt;/p>
&lt;p>Anschließend werden drei Datensätze erstellt:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GND ALL&lt;/strong>: enthält &lt;strong>alle&lt;/strong> extrahierten Begriffe und Varianten&lt;/li>
&lt;li>&lt;strong>GND Groups&lt;/strong>: enthält alle Begriffe und Varianten in von uns &lt;strong>markierten Sachgruppen&lt;/strong>&lt;/li>
&lt;li>&lt;strong>GND Selected&lt;/strong>: enthält alle separat von uns &lt;strong>markierte Begriffe&lt;/strong> mit ihren Varianten&lt;/li>
&lt;/ul>
&lt;div class="alert alert-note">
&lt;div>
Bei der Identifikation von relevanten Sachgruppen ist unser &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2022-05-experiment-mit-gnd-visualisierungen/">Experiment zur GND Hierarchie Visualisierung&lt;/a> eine große Hilfe.
&lt;/div>
&lt;/div>
&lt;p>Für jeden Datensatz wird mit Python anschließend ein einfacher Regelsatz (&lt;strong>Simple&lt;/strong>) und ein komplexer Regelsatz (&lt;strong>Complex&lt;/strong>) für spaCy erstellt.&lt;/p>
&lt;p>Für den &lt;strong>einfachen&lt;/strong> Regelsatz wird eine Regel mit dem Begriff in seiner bevorzugten Schreibweise erstellt.
Besteht der Begriff aus mehreren Worten, so wird zusätzlich eine Regel für eine Schreibweise mit Bindestrichen und eine Regel für eine Schreibweise ohne Bindestriche oder Leerzeichen erstellt.&lt;/p>
&lt;p>Hier am Beispiel des Begriffes &lt;em>Ludwigsburger Porzellan&lt;/em>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;label&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;OBJ&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;pattern&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Ludwigsburger Porzellan&amp;#34;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;label&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;OBJ&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;pattern&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Ludwigsburger-Porzellan&amp;#34;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;label&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;OBJ&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;pattern&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Ludwigsburgerporzellan&amp;#34;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Damit decken wir unterschiedliche Schreibweisen für zusammengesetzte Wörter und ggf. fehlende Leerzeichen ab.
Tippfehler, andere grammatikalische Formen und Synonyme werden dadurch nicht gefunden.&lt;/p>
&lt;p>Für den &lt;strong>komplexen&lt;/strong> Regelsatz wird via regulären Ausdrücken zusätzlich die Option berücksichtigt, dass es weitere mit Bindestrich verbundene Wortbestandteile geben kann (Ludwigsburger-Porzellan-Tasse) und zusätzlich die Grundform des Wortes (Lemma) als Vergleichskriterium verwendet. &lt;sup id="fnref:10">&lt;a href="#fn:10" class="footnote-ref" role="doc-noteref">10&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;label&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;OBJ&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;pattern&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[{&lt;/span>&lt;span class="nt">&amp;#34;LEMMA&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Ludwigsburger&amp;#34;&lt;/span>&lt;span class="p">},&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;LEMMA&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Porzellan&amp;#34;&lt;/span>&lt;span class="p">}]}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;label&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;OBJ&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;pattern&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[{&lt;/span>&lt;span class="nt">&amp;#34;LEMMA&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;REGEX&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Ludwigsburger\\-Porzellan((-|\\s)\\w+)?&amp;#34;&lt;/span>&lt;span class="p">}}]}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;label&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;OBJ&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;pattern&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[{&lt;/span>&lt;span class="nt">&amp;#34;LEMMA&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="nt">&amp;#34;REGEX&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Ludwigsburgerporzellan((-|\\s)\\w+)?&amp;#34;&lt;/span>&lt;span class="p">}}]}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="durchführung">Durchführung&lt;/h3>
&lt;h4 id="annotation-mit-regeln-und-aktivem-lernen">Annotation mit Regeln und aktivem Lernen&lt;/h4>
&lt;p>Mit dem Regelsatz &lt;strong>GND Selected Simple&lt;/strong> wurden 1.000 Sätze mit regelbasierter Unterstützung manuell annotiert. &lt;sup id="fnref:11">&lt;a href="#fn:11" class="footnote-ref" role="doc-noteref">11&lt;/a>&lt;/sup>
Mit diesen wurde anschließend ein temporäres Modell trainiert, welches dabei unterstützte weitere 2.000 Sätze zu annotieren.&lt;sup id="fnref:12">&lt;a href="#fn:12" class="footnote-ref" role="doc-noteref">12&lt;/a>&lt;/sup>&lt;/p>
&lt;p>Je nach verwendeter Beschreibungsform im Findbuch (Fließtext, Aufzählung, Liste, Tabelle, &amp;hellip;) kann ein Satz zwischen 0 und mehr als 30 Entitäten enthalten.&lt;/p>
&lt;p>Auf Grund von Duplikaten entstanden dadurch etwa 2.600 annotierte Sätze für das Training.&lt;/p>
&lt;p>Zusätzlich wurden aus jedem der 59 untersuchten Findbüchern 2 zufällig ausgewählte Findbuchbeiträge extrahiert, wodurch ein Evaluations Datenset mit 1.677 eindeutigen Sätzen entstand. Dieses wurde von 2 Personen getrennt annotiert und anschließend die Unterschiede noch einmal besprochen und aufgelöst. &lt;sup id="fnref:13">&lt;a href="#fn:13" class="footnote-ref" role="doc-noteref">13&lt;/a>&lt;/sup>&lt;/p>
&lt;p>Das NER Modell wurde anschließend auf den Trainingsbeispielen neu trainiert und gegen das Evaluationsdatenset evaluiert. &lt;sup id="fnref:14">&lt;a href="#fn:14" class="footnote-ref" role="doc-noteref">14&lt;/a>&lt;/sup>&lt;/p>
&lt;h4 id="evaluation-regelbasierter-modelle">Evaluation regelbasierter &amp;ldquo;Modelle&amp;rdquo;&lt;/h4>
&lt;p>Aus jedem der 6 Regeldatensätze wurde eine eigene spaCy Pipeline mit einer &lt;em>EntityRuler&lt;/em> Komponente erstellt. &lt;sup id="fnref:15">&lt;a href="#fn:15" class="footnote-ref" role="doc-noteref">15&lt;/a>&lt;/sup>
Diese 6 Pipelines wurden anschließend gegen das Trainings- &lt;strong>und&lt;/strong> Evaluationsdatenset evaluiert. &lt;sup id="fnref:16">&lt;a href="#fn:16" class="footnote-ref" role="doc-noteref">16&lt;/a>&lt;/sup>&lt;/p>
&lt;h3 id="ergebnisse">Ergebnisse&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th style="text-align:right">Begriffe&lt;/th>
&lt;th style="text-align:right">&lt;/th>
&lt;th style="text-align:right">Gruppen&lt;/th>
&lt;th style="text-align:right">&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>GND ALL&lt;/strong>&lt;/td>
&lt;td style="text-align:right">143.064&lt;/td>
&lt;td style="text-align:right">(100,00%)&lt;/td>
&lt;td style="text-align:right">339&lt;/td>
&lt;td style="text-align:right">(100,00%)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>GND Groups&lt;/strong>&lt;/td>
&lt;td style="text-align:right">33.461&lt;/td>
&lt;td style="text-align:right">(23,39%)&lt;/td>
&lt;td style="text-align:right">27&lt;/td>
&lt;td style="text-align:right">(7,96%)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>GND Selected&lt;/strong>&lt;/td>
&lt;td style="text-align:right">604&lt;/td>
&lt;td style="text-align:right">(0,42%)&lt;/td>
&lt;td style="text-align:right">80&lt;/td>
&lt;td style="text-align:right">(23,60%)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Insgesamt arbeiteten wir mit 143.061 Begriffen aus der GND (Varianten nicht mitgezählt).
Bei der manuellen Auswahl der Sachgruppen wurden 27 Sachgruppen als relevant markiert.
Bei der manuellen Auswahl der Begriffe wurden 604 Begriffe als relevant markiert.&lt;/p>
&lt;p>Die 604 manuell markierten Begriffe sind insgesamt 80 unterschiedlichen Sachgruppen zugeordnet, wobei ein Begriff mehreren Sachgruppen zugeordnet werden kann.&lt;/p>
&lt;p>Es war deutlich einfacher (und schneller) die 27 relevanten Sachgruppen zu identifizieren, als die 604 relevanten Begriffe herauszusuchen.
Bei beiden Ansätzen war uns klar, dass wir aus Zeitgründen keine vollständige Auswahl treffen werden, so dass wir uns in der dafür aufgewendeten Zeit einschränkten.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Dataset&lt;/th>
&lt;th style="text-align:right">Precision&lt;/th>
&lt;th style="text-align:right">Recall&lt;/th>
&lt;th style="text-align:right">F1&lt;/th>
&lt;th>Dataset&lt;/th>
&lt;th style="text-align:right">Precision&lt;/th>
&lt;th style="text-align:right">Recall&lt;/th>
&lt;th style="text-align:right">F1&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>GND ALL &lt;strong>Simple&lt;/strong>&lt;/td>
&lt;td style="text-align:right">0,23&lt;/td>
&lt;td style="text-align:right">0,37&lt;/td>
&lt;td style="text-align:right">0,29&lt;/td>
&lt;td>&lt;strong>Complex&lt;/strong>&lt;/td>
&lt;td style="text-align:right">0,19&lt;/td>
&lt;td style="text-align:right">0,84&lt;/td>
&lt;td style="text-align:right">0,31&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GND Groups &lt;strong>Simple&lt;/strong>&lt;/td>
&lt;td style="text-align:right">0,33&lt;/td>
&lt;td style="text-align:right">0,34&lt;/td>
&lt;td style="text-align:right">0,34&lt;/td>
&lt;td>&lt;strong>Complex&lt;/strong>&lt;/td>
&lt;td style="text-align:right">0,31&lt;/td>
&lt;td style="text-align:right">0,76&lt;/td>
&lt;td style="text-align:right">0,44&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GND Selected &lt;strong>Simple&lt;/strong>&lt;/td>
&lt;td style="text-align:right">0,71&lt;/td>
&lt;td style="text-align:right">0,19&lt;/td>
&lt;td style="text-align:right">0,30&lt;/td>
&lt;td>&lt;strong>Complex&lt;/strong>&lt;/td>
&lt;td style="text-align:right">0,69&lt;/td>
&lt;td style="text-align:right">0,37&lt;/td>
&lt;td style="text-align:right">0,48&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>NER OBJ&lt;/td>
&lt;td style="text-align:right">0,96&lt;/td>
&lt;td style="text-align:right">0,94&lt;/td>
&lt;td style="text-align:right">0,95&lt;/td>
&lt;td>&lt;/td>
&lt;td style="text-align:right">&lt;/td>
&lt;td style="text-align:right">&lt;/td>
&lt;td style="text-align:right">&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Die Ergebnisse der obigen Tabelle sind in Abbildung 1 visualisiert und werden dort besprochen.&lt;/p>
&lt;figure id="figure-scatterplot-für-precision-und-recall-für-die-einzelnen-datensätze">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Scatterplot für Precision und Recall für die einzelnen Datensätze." srcset="
/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/metrics_hu25f59ad08821a07f7e62d84347c9b3d7_25695_670776311626ecdef0eb7da8ead0b65c.webp 400w,
/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/metrics_hu25f59ad08821a07f7e62d84347c9b3d7_25695_015a3bc5bbc9919d78426f9f78d34840.webp 760w,
/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/metrics_hu25f59ad08821a07f7e62d84347c9b3d7_25695_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2022-09-ner-modell-mit-gnd-starthilfe-trainieren/metrics_hu25f59ad08821a07f7e62d84347c9b3d7_25695_670776311626ecdef0eb7da8ead0b65c.webp"
width="423"
height="432"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Scatterplot für Precision und Recall für die einzelnen Datensätze.
&lt;/figcaption>&lt;/figure>
&lt;p>In Abbildung 1 lässt sich ablesen, dass die Verwendung der komplexen im Vergleich zu den einfachen Regeln den &lt;em>Recall&lt;/em>, also den Anteil gefundener Begriffe, deutlich erhöht, wobei die &lt;em>Precision&lt;/em>, also der Anteil an falsch markierten Begriffen, im Vergleich nur unwesentlich sinkt.&lt;/p>
&lt;p>Es lässt sich ebenfalls ablesen, dass die Verwendung aller Begriffe in der GND (&lt;strong>ALL&lt;/strong>) im Vergleich zur Verwendung der Begriffe ausgewählter Gruppen (&lt;strong>Groups&lt;/strong>) den &lt;em>Recall&lt;/em> erhöht, aber nicht so wesentlich, als dass es die deutlich schlechtere &lt;em>Precision&lt;/em> ausgleichen könnte.&lt;/p>
&lt;p>Mit einem &lt;strong>f1-score&lt;/strong> von &lt;strong>0,48&lt;/strong> erhält der Ansatz mit den ausgewählten Begriffen (&lt;strong>Selected&lt;/strong>) den besten Wert der regelbasierten Ansätze.
Mit einem &lt;strong>f1-score&lt;/strong> von &lt;strong>0,95&lt;/strong> ist das &lt;strong>NER Modell&lt;/strong> den regelbasierten Ansätzen jedoch weit überlegen.&lt;/p>
&lt;h3 id="diskussion">Diskussion&lt;/h3>
&lt;p>Grundsätzlich lässt sich sagen, dass sich die Idee die GND als Starthilfe für das Anlernen eines neuen NER Models zu verwenden, als erfolgreich erwiesen hat. Mit einem &lt;em>Recall&lt;/em> und einer &lt;em>Precision&lt;/em> über 90 Prozent könnten wir das anschließend trainierte NER Modell direkt produktiv anwenden.
Auch die Verwendung der Sachbegriffe in der GND als Starthilfe hat deutlich besser funktioniert, als wir das erwartet hatten.&lt;/p>
&lt;p>Ein wesentlicher Faktor, den wir bei diesem Experiment bewusst nicht erfasst haben, ist der zeitliche Aufwand für die einzelnen manuellen oder automatisierten Arbeitsschritte.&lt;/p>
&lt;p>Hier machte eine genaue Erfassung in unserem Fall von daher keinen Sinn, da bei den manuellen Aufgaben ein großer Faktor der einmalige Einarbeitungsaufwand darstellt und die automatisierten Schritte auf Grund unterschiedlicher Lasten auf unserem Testsystem nicht deterministisch waren. Außerdem durchliefen wir verschiedene Iterationen, bis wir einem für uns passenden Workflow gefunden hatten.&lt;/p>
&lt;p>Generell würden wir nach unserer Erfahrung davon abraten &lt;strong>alle&lt;/strong> Sachbegriffe der GND, oder mehr als die von uns verwendeten circa 33.500 Begriffe zur Regelgenerierung zu verwenden. Nach unserer Beobachtung ist bei diesen Mengen und bei der Verwendung von regulären Ausdrücken in den Regeln das Laufzeitverhalten der Regelauswertung nicht mehr linear.&lt;/p>
&lt;p>Bei der Abwägung, ob mit ausgewählten Begriffen oder ausgewählten Sachgruppen gearbeitet wird, sollte auch die Präferenz des Fachpersonals im Annotationsprozess berücksichtigt werden. Bei einer hohen &lt;em>Precision&lt;/em> müssen hauptsächlich zusätzliche Begriffe markiert werden. Bei einem hohen &lt;em>Recall&lt;/em> (und niedriger &lt;em>Precision&lt;/em>) müssen hauptsächlich falsch markierte Begriffe entfernt werden.&lt;/p>
&lt;p>Außerdem haben wir uns bei der initialen Auswahl der Sachbegriffe aus der GND auf bestimmte Typen beschränkt (&lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeading" target="_blank" rel="noopener">SubjectHeading&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeadingSensoStricto" target="_blank" rel="noopener">SubjectHeadingSensoStricto&lt;/a> und &lt;a href="https://d-nb.info/standards/elementset/gnd#ProductNameOrBrandName" target="_blank" rel="noopener">ProductNameOrBrandName&lt;/a>). Diese Einschränkung machte für uns Sinn, jedoch sind manche der von uns gesuchten Objekte auch unter den Typen &lt;a href="https://d-nb.info/standards/elementset/gnd#Work" target="_blank" rel="noopener">Work&lt;/a> bzw. dessen Unterklassen zu finden, oder in der GND als &lt;a href="https://d-nb.info/standards/elementset/gnd#CorporateBody" target="_blank" rel="noopener">Corporate Body&lt;/a> klassifiziert.&lt;/p>
&lt;p>Die Entscheidung aus jedem Bestand 2 zufällige Findbucheinträge für das Evaluationsdatenset zu verwenden, sorgte für ein ungünstiges Größenverhältnis zwischen Trainings- und Evaluationsdatenset. Zum einen ist das Evaluationsdatenset recht groß im Vergleich zum Trainingsdatenset. Zum anderen ist es durch die Unterschiede zwischen den einzelnen Beständen nicht repräsentativ. So gibt es eine große Varianz in der Größe der einzelnen Bestände (1 - 1321 Findbucheinträge) und der unterschiedlichen Länge der einzelnen Findbucheinträge (6 - 47.249 Zeichen).&lt;/p>
&lt;p>Bei der praktischen Anwendung des trainierten Modells konnten wir feststellen, dass die Performanz des Modells auf den größeren Beständen merkbar schlechter war, so dass wir in der praktischen Anwendung eher mit einer &lt;em>Precision&lt;/em> und einem &lt;em>Recall&lt;/em> im Bereich von etwa 90 Prozent rechnen.&lt;/p>
&lt;p>Theoretisch könnte die Performanz des Modells noch deutlich verbessert werden, indem unter anderem weitere Trainingsbeispiele erstellt werden und zusätzlich eine Hyperparameteroptimierung durchgeführt wird.&lt;/p>
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;p>&lt;em>Named Entity Recognition&lt;/em> kann bei der Erstellung von Metadaten von textbasierten Material eine große Hilfe sein.
Leider lassen sich auf allgemeinen Texten trainierte Modelle meist nicht auf Texte im Archiv übertragen.
Ein Trainieren von eigenen NER-Modellen ist mit guten Ergebnissen und vertretbarem Aufwand möglich.
Dabei ist die Gemeinsame Normdatei eine hilfreiche Datenquelle.
Jedoch fehlt es vielen kulturellen Institutionen an einem Zugang zu technischem Personal und Infrastruktur.
Wir hoffen, dass Lösungen von der &lt;a href="https://www.nfdi.de/" target="_blank" rel="noopener">NFDI&lt;/a> zukünftig diese Lücken schließen können.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Da die bearbeiteten Daten teilweise noch einer Sperrfrist unterliegen, können wir zu diesem Zeitpunkt weder die Daten noch die Modelle bzw. konkrete Ergebnislisten veröffentlichen. Es macht daher auch keinen Sinn eine reproduzierbaren Workflow zu veröffentlichen.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Wikipedia Autoren, „Landesarchiv Baden-Württemberg“, Wikipedia – Die freie Enzyklopädie, &lt;a href="https://de.wikipedia.org/w/index.php?title=Landesarchiv_Baden-W%C3%BCrttemberg&amp;amp;oldid=223510351" target="_blank" rel="noopener">https://de.wikipedia.org/w/index.php?title=Landesarchiv_Baden-W%C3%BCrttemberg&amp;oldid=223510351&lt;/a> (aufgerufen am 20. Juli 2022).&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:3">
&lt;p>NER erstellt mit spaCy 3.3 &lt;a href="https://spacy.io/models/en#en_core_web_lg" target="_blank" rel="noopener">en_core_web_lg&lt;/a>.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:4">
&lt;p>Siehe &lt;a href="https://en.wikipedia.org/wiki/Precision_and_recall" target="_blank" rel="noopener">Wikipedia - Precision and recall&lt;/a> für Details.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:5">
&lt;p>Wikipedia Autoren, „Landesarchiv Baden-Württemberg“, Wikipedia – Die freie Enzyklopädie, &lt;a href="https://de.wikipedia.org/w/index.php?title=Landesarchiv_Baden-W%C3%BCrttemberg&amp;amp;oldid=223510351" target="_blank" rel="noopener">https://de.wikipedia.org/w/index.php?title=Landesarchiv_Baden-W%C3%BCrttemberg&amp;oldid=223510351&lt;/a> (aufgerufen am 20. Juli 2022).&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:6">
&lt;p>NER erstellt mit spaCy 3.3 &lt;a href="https://spacy.io/models/de#de_core_news_lg" target="_blank" rel="noopener">de_core_news_lg&lt;/a>.&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:7">
&lt;p>NER erstellt mit spaCy 3.3 &lt;a href="https://spacy.io/models/de#de_core_news_lg" target="_blank" rel="noopener">de_core_news_lg&lt;/a>.&amp;#160;&lt;a href="#fnref:7" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:8">
&lt;p>Siehe &lt;a href="https://en.wikipedia.org/wiki/Active_learning_%28machine_learning%29" target="_blank" rel="noopener">Wikipedia - Active Learning&lt;/a>.&amp;#160;&lt;a href="#fnref:8" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:9">
&lt;p>Siehe &lt;a href="https://spacy.io/usage/rule-based-matching" target="_blank" rel="noopener">Rule-based matching&lt;/a> und &lt;a href="https://prodi.gy/docs/named-entity-recognition#manual-patterns" target="_blank" rel="noopener">Manual annotation with patters&lt;/a>.&amp;#160;&lt;a href="#fnref:9" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:10">
&lt;p>Siehe Wikipedia - &lt;a href="https://de.wikipedia.org/wiki/Lemma_%28Lexikographie%29" target="_blank" rel="noopener">Lemma (Lexikographie)&lt;/a>&amp;#160;&lt;a href="#fnref:10" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:11">
&lt;p>&lt;a href="https://prodi.gy/docs/named-entity-recognition#manual-patterns" target="_blank" rel="noopener">Manual annotation with patters&lt;/a> bzw. &lt;a href="https://prodi.gy/docs/recipes/#ner-manual" target="_blank" rel="noopener">Prodigy Rezept ner.manual&lt;/a>.&amp;#160;&lt;a href="#fnref:11" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:12">
&lt;p>&lt;a href="https://prodi.gy/docs/named-entity-recognition#manual-model" target="_blank" rel="noopener">Manual annotation with suggestions from a model&lt;/a> bzw. &lt;a href="https://prodi.gy/docs/recipes/#ner-correct" target="_blank" rel="noopener">Prodigy Rezept ner.correct&lt;/a>.&amp;#160;&lt;a href="#fnref:12" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:13">
&lt;p>&lt;a href="https://prodi.gy/docs/recipes/#review" target="_blank" rel="noopener">Prodigy Rezept review&lt;/a>&amp;#160;&lt;a href="#fnref:13" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:14">
&lt;p>&lt;a href="https://spacy.io/api/cli#evaluate" target="_blank" rel="noopener">spaCy CLI evaluate&lt;/a>&amp;#160;&lt;a href="#fnref:14" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:15">
&lt;p>&lt;a href="https://spacy.io/usage/processing-pipelines" target="_blank" rel="noopener">Language Processing Pipelines&lt;/a> bzw. &lt;a href="https://spacy.io/usage/rule-based-matching" target="_blank" rel="noopener">Rule-based matching&lt;/a> bzw. &lt;a href="https://spacy.io/api/entityruler" target="_blank" rel="noopener">EntityRuler&lt;/a>.&amp;#160;&lt;a href="#fnref:15" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:16">
&lt;p>Bei dem regelbasierten Ansatz ist eine &lt;a href="https://de.wikipedia.org/wiki/%C3%9Cberanpassung" target="_blank" rel="noopener">Überanpassung&lt;/a> nicht zu befürchten, da es sich hier um &lt;strong>keinen&lt;/strong> selbst lernenden Prozess handelt.&amp;#160;&lt;a href="#fnref:16" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Experiment zur Identifikation von doppelten Orten in der GND</title><link>https://fdmlab.landesarchiv-bw.de/post/2022-06-doppelte-orte-in-gnd/</link><pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2022-06-doppelte-orte-in-gnd/</guid><description>&lt;p>Bei unserer Arbeit mit Orten in der &lt;em>Gemeinsamen Normdatei&lt;/em> (GND) stolperten wir hin und wieder über Dubletten.
Also Orte, die in der GND mehrfach vorhanden waren.
Dieser Beitrag beschreibt, wie wir in einem praktischen Experiment versuchten diese Dubletten innerhalb des Bundeslandes Baden-Württemberg zu identifizieren.&lt;/p>
&lt;blockquote>
&lt;p>Bildnachweis&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;/blockquote>
&lt;h2 id="hintergrund">Hintergrund&lt;/h2>
&lt;p>In der GND sind nicht nur aktuelle Orte mit einer eindeutigen GND-Nummer verzeichnet, sondern auch historische Orte.
Beispielsweise wurde &lt;a href="https://d-nb.info/gnd/4069840-3" target="_blank" rel="noopener">Cannstatt&lt;/a> mit Stuttgart vereinigt und ist seit dem 1. April 1905 als &lt;a href="https://d-nb.info/gnd/4077993-2" target="_blank" rel="noopener">Stuttgart-Cannstatt&lt;/a> und später &lt;a href="https://d-nb.info/gnd/4077993-2" target="_blank" rel="noopener">Bad Cannstatt&lt;/a> ein Stadtteil von &lt;a href="https://d-nb.info/gnd/4058282-6" target="_blank" rel="noopener">Stuttgart&lt;/a>.&lt;/p>
&lt;p>Auch wurden Gemeinden und Städte im Zuge von Kreis- und Gemeindereformen eingemeindet oder neu gebildet.
Beispielsweise wurden &lt;a href="https://d-nb.info/gnd/4088388-7" target="_blank" rel="noopener">Bissingen&lt;/a> und &lt;a href="https://d-nb.info/gnd/4088300-0" target="_blank" rel="noopener">Bietigheim&lt;/a> im Jahre 1975 zu &lt;a href="https://d-nb.info/gnd/4006554-6" target="_blank" rel="noopener">Bietigheim-Bissingen&lt;/a> zusammengelegt.&lt;/p>
&lt;p>Diese Form von Mehrfachnennung meinen wir &lt;strong>nicht&lt;/strong>.
Wir sind darüber gestolpert, dass es speziell zu historischen Orten in Baden-Württemberg mehrere Einträge gab.&lt;/p>
&lt;h2 id="idee">Idee&lt;/h2>
&lt;p>Wir wollen basierend auf der &lt;em>Ortsnamensdatenbank Baden-Württemberg&lt;/em> (ONDB) mögliche Dubletten von Orten in Baden-Württemberg in der GND identifizieren. Die ONDB wurde in einem anderen Projekt in Form einer Datenspende in die GND eingespielt, so dass wir davon ausgehen, dass wir sie als &amp;ldquo;Referenz&amp;rdquo; verwenden können. Dafür identifizieren wir alle mit Baden-Württemberg verknüpften Orte in der GND, markieren die Orte, die in der ONDB vorliegen und betrachten anschließend die Restmenge.&lt;/p>
&lt;h2 id="vorgehen">Vorgehen&lt;/h2>
&lt;h4 id="1-ondb-aufbereitung">1. ONDB Aufbereitung&lt;/h4>
&lt;p>Ein Abzug der ONDB wurde im Kontext eines anderen Projektes mit &lt;a href="https://openrefine.org/" target="_blank" rel="noopener">OpenRefine&lt;/a> aufgearbeitet, so dass ein Mapping von GND-ID auf ONDB-ID möglich ist.
Wie so ein Mapping funktioniert, ist unter &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-fortgeschrittene/12-daten-zwischen-projekten-abgleichen/">Daten zwischen Projekten in OpenRefine abgleichen&lt;/a> beschrieben.&lt;/p>
&lt;h4 id="2-gnd-in-triple-store-laden">2. GND in Triple-Store laden&lt;/h4>
&lt;p>Wie unter &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/">Erste Experimente mit der GND&lt;/a> beschrieben, wurde die GND in ihrer LOD-Form in einen &lt;a href="https://jena.apache.org/" target="_blank" rel="noopener">Apache Jena&lt;/a> Docker Container geladen. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;h4 id="3-daten-aus-triple-store-laden">3. Daten aus Triple-Store laden&lt;/h4>
&lt;p>Mit &lt;a href="https://www.w3.org/TR/sparql11-overview/" target="_blank" rel="noopener">SPARQL-Abfragen&lt;/a> werden die Daten aus dem Apache Jena Triple-Store extrahiert.&lt;/p>
&lt;h4 id="4-dubletten-identifizieren">4. Dubletten identifizieren&lt;/h4>
&lt;p>Mit Hilfe der ODNB, &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-einsteiger/05-clustering/">Clustering Methoden in OpenRefine&lt;/a> und externen Skripten mögliche Dubletten identifizieren und manuell prüfen.&lt;/p>
&lt;h2 id="sparql-abfragen">SPARQL Abfrage(n)&lt;/h2>
&lt;p>wir haben verschiedene Methoden getestet, verworfen und kombiniert, um die für uns relevanten Orte in der GND zu identifizieren und via SPARQL aus dem Apache Jena Triple-Store laden zu können.&lt;/p>
&lt;h3 id="angaben-zur-quelle">Angaben zur Quelle&lt;/h3>
&lt;p>In der GND ist auch die Quelle einer Dateninformation erfasst, also zum Beispiel die ONDB oder das Landesarchiv Baden-Württemberg als Datenquelle genannt. Diese Information ist in der LOD-Form der GND leider nicht enthalten.
Daher konnten wir diese Information nicht als zusätzliche Informationsquelle für unsere Filter nutzen.&lt;/p>
&lt;h3 id="verknüpfung-über-hierarchie">Verknüpfung über Hierarchie&lt;/h3>
&lt;p>Theoretisch sollten wir über den Property-Path &lt;a href="https://d-nb.info/standards/elementset/gnd#hierarchicalSuperiorOfPlaceOrGeographicName" target="_blank" rel="noopener">Hierarchical superior of place or geographic name&lt;/a> alle untergeordneten Orte von &lt;a href="https://d-nb.info/gnd/4004176-1" target="_blank" rel="noopener">Baden-Württemberg&lt;/a> finden können.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">hierarchicalSuperiorOfPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4004176-1&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Diese Eigenschaft ist jedoch nicht konsequent und speziell für historische Orte gar nicht erfasst.
Daher haben wir diesen Ansatz verworfen.&lt;/p>
&lt;h3 id="verknüpfung-über-ländercode">Verknüpfung über Ländercode&lt;/h3>
&lt;p>Theoretisch sollten wir über die Verknüpfung mit dem Ländercode (&lt;a href="https://d-nb.info/standards/elementset/gnd#geographicAreaCode" target="_blank" rel="noopener">Geographic Area Code&lt;/a>) alle mit Baden-Württemberg (&lt;a href="https://d-nb.info/standards/vocab/gnd/geographic-area-code.html#XA-DE-BW" target="_blank" rel="noopener">XA-DE-BW&lt;/a>) verknüpften Orte erfassen können.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdfs&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2000/01/rdf-schema#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?type&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?type&lt;/span> &lt;span class="nn">rdfs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">subClassOf&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hier sind uns zwei Probleme aufgefallen:&lt;/p>
&lt;ol>
&lt;li>die Property-Path-Extension &lt;code>rdfs:subclassOf*&lt;/code> funktioniert nicht, wir konnten jedoch nicht klären ob das ein Problem mit Apache Jena oder mit den GND-Daten ist.&lt;/li>
&lt;li>Nicht alle Orte in Baden-Württemberg sind mit dem Ländercode &lt;code>XA-DE-BW&lt;/code> angelegt, sondern einige auch ausschließlich mit dem Ländercode für Deutschland &lt;code>XA-DE&lt;/code>.&lt;/li>
&lt;/ol>
&lt;h3 id="verknüpfung-über-ländercode-mit-aufzählung-aller-sub-klassen">Verknüpfung über Ländercode mit Aufzählung aller (Sub-)Klassen&lt;/h3>
&lt;p>Da die Property-Path Extension auf &lt;code>rdfs:subClassOf&lt;/code> nicht funktioniert hat, listen wir die für uns relevanten (Sub-)Klassen alle einzeln auf.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">AdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">BuildingOrMemorial&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NaturalGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ReligiousTerritory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">TerritorialCorporateBodyOrAdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="anzahl-pro-sub-klasse">Anzahl pro (Sub-)Klasse&lt;/h3>
&lt;p>Die folgende Abfrage zählt, wie häufig die entsprechenden Typen für Orte in Baden-Württemberg in der GND vorkommen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?geographicType&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">AdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">BuildingOrMemorial&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NaturalGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ReligiousTerritory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">TerritorialCorporateBodyOrAdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="k">GROUP BY&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In der folgenden Tabelle ist das Ergebnis für die obige SPARQL-Abfrage dargestellt:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>geographicType&lt;/th>
&lt;th>count&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#AdministrativeUnit" target="_blank" rel="noopener">AdministrativeUnit&lt;/a>&lt;/td>
&lt;td>423&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#NaturalGeographicUnit" target="_blank" rel="noopener">NaturalGeographicUnit&lt;/a>&lt;/td>
&lt;td>537&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#PlaceOrGeographicName" target="_blank" rel="noopener">PlaceOrGeographicName&lt;/a>&lt;/td>
&lt;td>4205&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#ReligiousTerritory" target="_blank" rel="noopener">ReligiousTerritory&lt;/a>&lt;/td>
&lt;td>68&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#TerritorialCorporateBodyOrAdministrativeUnit" target="_blank" rel="noopener">TerritorialCorporateBodyOrAdministrativeUnit&lt;/a>&lt;/td>
&lt;td>23685&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#BuildingOrMemorial" target="_blank" rel="noopener">BuildingOrMemorial&lt;/a>&lt;/td>
&lt;td>3711&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit" target="_blank" rel="noopener">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/a>&lt;/td>
&lt;td>99&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="de-ländercode-mit-nachfolger-oder-vorgänger-in-bw">DE-Ländercode mit Nachfolger (oder Vorgänger) in BW&lt;/h3>
&lt;p>Bei den Orten, die mit dem Ländercode &lt;code>XA-DE&lt;/code> für Deutschland angelegt wurden, ergab sich ein Muster.
Diese hatten häufig einen &lt;a href="https://d-nb.info/standards/elementset/gnd#precedingPlaceOrGeographicName" target="_blank" rel="noopener">Vorgänger&lt;/a> oder &lt;a href="https://d-nb.info/standards/elementset/gnd#succeedingPlaceOrGeographicName" target="_blank" rel="noopener">Nachfolger&lt;/a>, der mit dem Ländercode &lt;code>XA-DE-BW&lt;/code> für Baden-Württemberg verknüpft war.&lt;/p>
&lt;p>Die folgende SPARQL-Abfrage zeigt, wie diese Orte abgefragt werden können.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdfs&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2000/01/rdf-schema#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">AdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">BuildingOrMemorial&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NaturalGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ReligiousTerritory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">TerritorialCorporateBodyOrAdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">precedingPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span> &lt;span class="err">|&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">succeedingPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nv">?relatedPlace&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?relatedPlace&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="finale-sparql-abfrage">Finale SPARQL-Abfrage&lt;/h3>
&lt;p>Die folgende SPARQL-Abfrage kombiniert die Orte, die mit dem &lt;code>XA-DE-BW&lt;/code> für Baden-Württemberg angelegt wurden mit denen, die einen mit dem Ländercode &lt;code>XA-DE-BW&lt;/code> für Baden-Württemberg verknüpften Vorgänger oder Nachfolger haben.&lt;/p>
&lt;p>Zusätzlich werden noch die Eigenschaften &lt;a href="https://d-nb.info/standards/elementset/gnd#preferredNameForThePlaceOrGeographicName" target="_blank" rel="noopener">Bevorzugter Name des Geographikums&lt;/a> und die &lt;a href="https://d-nb.info/standards/elementset/gnd#definition" target="_blank" rel="noopener">Definition&lt;/a> abgefragt.
Da diese nicht zuverlässig gesetzt wurden, sind sie als &lt;code>OPTIONAL&lt;/code> gekennzeichnet.&lt;/p>
&lt;p>Da wir die GND-ID eindeutig halten wollen, diese aber gegebenenfalls mit mehreren geographischen Typen verknüpft sein kann, nutzen wir eine Gruppierung via &lt;code>GROUP BY&lt;/code> um doppelte GND-IDs zu filtern.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?place&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?geographicType&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?GeographicType&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?preferredName&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?PreferredName&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?definition&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?Definition&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">AdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">BuildingOrMemorial&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NaturalGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ReligiousTerritory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">TerritorialCorporateBodyOrAdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForThePlaceOrGeographicName&lt;/span> &lt;span class="nv">?preferredName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">definition&lt;/span> &lt;span class="nv">?definition&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">UNION&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">precedingPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span> &lt;span class="err">|&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">succeedingPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nv">?relatedPlace&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?relatedPlace&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForThePlaceOrGeographicName&lt;/span> &lt;span class="nv">?preferredName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">definition&lt;/span> &lt;span class="nv">?definition&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="k">GROUP BY&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="ergebnisse">Ergebnisse&lt;/h2>
&lt;p>Mit der oben beschriebenen SPARQL-Abfrage konnten etwa 33.000 zu Baden-Württemberg zuordenbare Orte aus der GND in unserem Apache Jena Triple-Store extrahiert werden.&lt;/p>
&lt;p>Innerhalb dieser Daten konnten etwa 600 eindeutige Dubletten und deren Ursprung identifiziert und der GND Fachstelle zur Korrektur vorgelegt werden. Das entspricht etwa zwei Prozent der gefunden Daten.&lt;/p>
&lt;p>Bei der Analyse der Dubletten ist aufgefallen, dass nach wie vor die historische Vorbelastung der GND durch die Verschmelzung der &lt;a href="https://de.wikipedia.org/wiki/Gemeinsame_K%C3%B6rperschaftsdatei" target="_blank" rel="noopener">Gemeinsamen Körperschaftsdatei&lt;/a> (GKD) mit der &lt;a href="https://de.wikipedia.org/wiki/Schlagwortnormdatei" target="_blank" rel="noopener">Schlagwortnormdatei&lt;/a> (SWD) für einen Großteil der Dubletten verantwortlich war.
Zusätzlich gab es einzelne Datenlieferungen, die ebenfalls für Dubletten geführt haben.&lt;/p>
&lt;p>Beim Identifikationsprozess für Dubletten ist aufgefallen, dass besonders das unterschiedliche Vorgehen bei der &amp;ldquo;Vorzugsbenennung&amp;rdquo; eines Ortes zu den vielen nicht offensichtlichen Dubletten geführt hat. Beispielsweise lässt sich &lt;a href="https://d-nb.info/gnd/4077993-2" target="_blank" rel="noopener">Bad Cannstatt&lt;/a> auch als &lt;em>Stuttgart-Cannstatt&lt;/em> benennen, was weder bei einer alphabetischen Sortierung, noch bei den meisten Standardverfahren zum algorithmischen Abgleich von Dubletten auffällt.&lt;/p>
&lt;p>Insgesamt haben wir vermutlich auch nur einen Teil der Dubletten für Orte in Baden-Württemberg in der GND identifiziert.
Unter anderem fallen alle Orte durch unsere Suchfilter, die Baden-Württemberg nicht als &lt;em>Geographic Area Code&lt;/em> definiert haben und auch keine mit Baden-Württemberg verknüpften Vorgänger oder Nachfolger haben.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Das Bild &amp;ldquo;Doppelte Orte in der GND identifizieren&amp;rdquo; wurde erstellt mit Bildern von &lt;a href="https://pixabay.com/de/users/peggy_marco-1553824/" target="_blank" rel="noopener">Peggy und Marco Lachmann-Anke&lt;/a> und &lt;a href="https://pixabay.com/de/users/geralt-9301/" target="_blank" rel="noopener">Gerd Altmann&lt;/a> auf &lt;a href="https://pixabay.com/" target="_blank" rel="noopener">Pixabay&lt;/a> und dem &lt;a href="https://commons.wikimedia.org/wiki/File:Logo_Gemeinsame_Normdatei_%28GND%29.svg" target="_blank" rel="noopener">&amp;ldquo;Logo Gemeinsame Normdatei (GND)&amp;rdquo;&lt;/a> von &lt;a href="https://www.dnb.de/" target="_blank" rel="noopener">Deutsche Nationalbibliothek (DNB)&lt;/a>, welches lizenziert ist unter einer &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" target="_blank" rel="noopener">CC BY-SA 4.0&lt;/a> Lizenz. Das Bild &amp;ldquo;Doppelte Orte in der GND identifizieren&amp;rdquo; ist ebenfalls lizenziert unter einer &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" target="_blank" rel="noopener">CC BY-SA 4.0&lt;/a> Lizenz.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Der für dieses Experiment verwendete Abzug ist &lt;a href="https://data.dnb.de/opendata/authorities_lds_20211013.nt.gz" target="_blank" rel="noopener">authorities_lds_20211013.nt.gz&lt;/a>.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Experimente mit Visualisierungen für Sachbegriffe in der GND</title><link>https://fdmlab.landesarchiv-bw.de/post/2022-05-experiment-mit-gnd-visualisierungen/</link><pubDate>Tue, 24 May 2022 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2022-05-experiment-mit-gnd-visualisierungen/</guid><description>&lt;p>Die &lt;em>Gemeinsame Normdatei&lt;/em> (GND) enthält unter anderem semantische Daten zu Sachbegriffen.
In diesem Beitrag experimentieren wir mit Visualisierungen für &lt;strong>Sachbegriffe&lt;/strong> in der GND, um die Daten und die Ontologie dahinter besser kennen zu lernen.&lt;/p>
&lt;p>Wie im obigen Bild&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup> thematisiert, beinhaltet die als &lt;em>Linked Open Data&lt;/em> (LOD) zur Verfügung gestellte GND einen komplexen Graphen mit verlinkten Daten, deren Verlinkung und Struktur sich auf Grund ihrer Komplexität für Außenstehende nicht auf Anhieb verständlich gestaltet.&lt;/p>
&lt;p>Im Bereich der Sachbegriffe (&lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeading" target="_blank" rel="noopener">Subject Heading&lt;/a>) gibt es mehrere Konzepte zur Gruppierung. Es gibt die &lt;a href="https://d-nb.info/standards/vocab/gnd/gnd-sc.html" target="_blank" rel="noopener">GND-Sachgruppen&lt;/a> und verschiedene Arten von Oberbegriffen&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>.&lt;/p>
&lt;div class="alert alert-note">
&lt;div>
Um die Daten und deren Verknüpfungen besser zugänglich zu machen, gibt es auch das am 31. Mai von der DNB als beta freigegebene Projekt &lt;a href="https://explore.gnd.network/" target="_blank" rel="noopener">GND-Explorer&lt;/a>.
&lt;/div>
&lt;/div>
&lt;p>In Kooperation mit Katharina Hardt von dem Projekt &lt;a href="https://landesarchiv-bw.de/de/landesarchiv/projekte/provenienzforschung-im-landesarchiv/provenienzforschung-hauptstaatsarchiv-stuttgart/73186" target="_blank" rel="noopener">Provenienzforschung am Hauptstaatsarchivs Stuttgart&lt;/a> hatten wir im FDMLab ein konkretes Problem, wofür wir eine visuelle Unterstützung benötigten. Dafür haben wir ein &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">Experiment zur Visualisierung von GND Sachbegriffen&lt;/a> umgesetzt, über welches wir im Folgenden berichten. &lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="alert alert-warning">
&lt;div>
Es handelt sich bei der &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">GND Hierarchie Visualisierung&lt;/a> um ein prototypisch umgesetztes Experiment und &lt;strong>nicht&lt;/strong> um eine produktive Anwendung!
&lt;/div>
&lt;/div>
&lt;h2 id="die-ludwigsburger-porzellantasse">Die Ludwigsburger Porzellantasse&lt;/h2>
&lt;p>Eine Frage, die wir uns im Kontext der Provenienzforschung gestellt hatten, ist die mögliche Verschlagwortung mit Normdatenverknüpfung für den Begriff &lt;em>Ludwigsburger Porzellantasse&lt;/em>.&lt;/p>
&lt;p>Die &lt;em>Ludwigsburger Porzellantasse&lt;/em> gibt es nicht als Sachbegriff in der GND.
Die aus unserer Sicht passenden Begriffe in der GND sind &lt;a href="https://d-nb.info/gnd/4168206-3" target="_blank" rel="noopener">Ludwigsburger Porzellan&lt;/a> und &lt;a href="https://d-nb.info/gnd/4175414-1" target="_blank" rel="noopener">Porzellantasse&lt;/a>.&lt;/p>
&lt;p>Dabei stellten wir uns die folgenden Fragen:&lt;/p>
&lt;ol>
&lt;li>Haben die beiden Begriffe einen gemeinsamen Oberbegriff?&lt;/li>
&lt;li>Gehören die beiden Begriffe zu einer gemeinsamen Sachgruppe?&lt;/li>
&lt;li>Ist &lt;a href="https://d-nb.info/gnd/4046851-3" target="_blank" rel="noopener">Porzellan&lt;/a> ein gemeinsamer Oberbegriff?&lt;/li>
&lt;li>Ist &lt;a href="https://d-nb.info/gnd/4140542-0" target="_blank" rel="noopener">Geschirr&lt;/a> ein Oberbegriff von Porzellantasse?&lt;/li>
&lt;li>Wie verhält sich der Begriff &lt;a href="https://d-nb.info/gnd/4175411-6" target="_blank" rel="noopener">Porzellanfigur&lt;/a> &lt;sup id="fnref:4">&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref">4&lt;/a>&lt;/sup> im Kontext der beiden Begriffe?&lt;/li>
&lt;/ol>
&lt;p>Diese Antworten auf diese Fragen lassen sich im Einzelnen auch via der Weboberflächen von der &lt;a href="https://d-nb.info/gnd/4168206-3" target="_blank" rel="noopener">DNB&lt;/a>, &lt;a href="https://lobid.org/gnd/4168206-3" target="_blank" rel="noopener">lobid&lt;/a>, &lt;a href="https://swb.bsz-bw.de/DB=2.104/PPNSET?PPN=105419311&amp;amp;INDEXSET=21" target="_blank" rel="noopener">OGND&lt;/a> oder in &lt;a href="https://openrefine.org/" target="_blank" rel="noopener">OpenRefine&lt;/a> manuell recherchieren.
Bei mehreren Begriffen, ist dieses Vorgehen jedoch langwierig.&lt;/p>
&lt;p>Daher haben wir basierend auf dem &lt;a href="https://lobid.org/gnd/api" target="_blank" rel="noopener">lobid GND API&lt;/a>, dem &lt;a href="https://getbootstrap.com/" target="_blank" rel="noopener">Frontend-CSS-Framework Bootstrap&lt;/a> und dem &lt;a href="https://mermaid-js.github.io/" target="_blank" rel="noopener">JavaScript Framework Mermaid&lt;/a> prototypisch eine &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">Webanwendung zur GND Hierarchie Visualisierung von Sachbegriffen&lt;/a> umgesetzt, die es uns ermöglicht die oben genannten Antworten zu den obigen Fragen zu visualisieren und zu beantworten.&lt;/p>
&lt;p>Das nächste Diagramm zeigt ein bearbeitetes Beispiel zu der Hierarchie der Oberbegriffe von &lt;em>Ludwigsburger Porzellan&lt;/em>, &lt;em>Porzellantasse&lt;/em> und &lt;em>Porzellanfigur&lt;/em>.&lt;/p>
&lt;div class="mermaid">flowchart LR
4175414-1(["Porzellantasse"]):::initial
4184488-9["Tasse"]
4175411-6(["Porzellanfigur"]):::initial
4046277-8["Plastik"]
4046851-3["Porzellan"]
4168206-3(["Ludwigsburger Porzellan"]):::initial
4124863-6["Essgeschirr"]
4186181-4["Trinkgefäß"]
4181363-7["Silicatkeramik"]
4153870-5["Feinkeramik"]
4140542-0["Geschirr"]
4128003-9["Gefäß"]
4030282-9["Keramischer Werkstoff"]
4030271-4["Keramik"]
4132060-8["Hausrat"]
4020299-9["Gerät"]
4065579-9["Werkstoff"]
4169078-3["Material"]
4037940-1["Materie"]
4175414-1-->4184488-9
4175411-6-->4046277-8
4175411-6-->4046851-3
4168206-3-->4046851-3
4184488-9-->4124863-6
4184488-9-->4186181-4
4046851-3-->4181363-7
4046851-3-->4153870-5
4124863-6-->4140542-0
4186181-4-->4128003-9
4181363-7-->4030282-9
4153870-5-->4030271-4
4140542-0-->4132060-8
4128003-9-->4020299-9
4030282-9-->4065579-9
4065579-9-->4169078-3
4169078-3-->4037940-1
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Laut unserem Diagramm ist der Begriff &lt;em>Geschirr&lt;/em> ein Oberbegriff zur &lt;em>Porzellantasse&lt;/em>.
Die &lt;em>Porzellanfigur&lt;/em> und das &lt;em>Ludwigsburger Porzellan&lt;/em> haben &lt;em>Porzellan&lt;/em> als gemeinsamen Oberbegriff, die &lt;em>Porzellantasse&lt;/em> jedoch nicht.
Es gibt keinen gemeinsamen Oberbegriff für alle Begriffe, sie gehören jedoch, zur GND-Sachgruppe &lt;em>Kunsthandwerk&lt;/em> (siehe nächstes Diagramm).&lt;/p>
&lt;div class="mermaid">flowchart LR
4175414-1(["Porzellantasse"]):::initial
cat0[["Kunsthandwerk"]]:::category
4175411-6(["Porzellanfigur"]):::initial
cat1[["Plastik"]]:::category
4168206-3(["Ludwigsburger Porzellan"]):::initial
4175414-1-->cat0
4175411-6-->cat1
4175411-6-->cat0
4168206-3-->cat0
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;h2 id="gemeinsamer-oberbegriff-für-bilder">Gemeinsamer Oberbegriff für Bilder?&lt;/h2>
&lt;p>Bei den GND Sachbegriffen für &lt;a href="https://d-nb.info/gnd/4132048-7" target="_blank" rel="noopener">Acrylbild&lt;/a>, &lt;a href="https://d-nb.info/gnd/4002511-1" target="_blank" rel="noopener">Aquarell&lt;/a>, &lt;a href="https://d-nb.info/gnd/4036042-8" target="_blank" rel="noopener">Lithografie&lt;/a>, &lt;a href="https://d-nb.info/gnd/4043238-5" target="_blank" rel="noopener">Ölgemälde&lt;/a>, &lt;a href="https://d-nb.info/gnd/4048166-9" target="_blank" rel="noopener">Radierung&lt;/a> und &lt;a href="https://d-nb.info/gnd/4075923-4" target="_blank" rel="noopener">Pastellzeichnung&lt;/a> fragten wir uns, ob diese einen gemeinsamen Oberbegriff wie &lt;a href="https://d-nb.info/gnd/4006568-6" target="_blank" rel="noopener">Bild&lt;/a> oder &lt;a href="https://d-nb.info/gnd/4145419-4" target="_blank" rel="noopener">Bildliche Darstellung&lt;/a> haben. &lt;sup id="fnref:5">&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref">5&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="mermaid">flowchart LR
4132048-7(["Acrylbild"]):::initial
4037220-0["Malerei"]
4002511-1(["Aquarell"]):::initial
4036042-8(["Lithografie"]):::initial
4154503-5["Flachdruck"]
4043238-5(["Ölgemälde"]):::initial
4048166-9(["Radierung"]):::initial
4113357-2["Druckgrafik"]
4075923-4(["Pastellzeichnung"]):::initial
4124801-6["Drucktechnik"]
4021845-4["Grafik"]
4021850-8["Graphische Technik"]
4794555-2["Medientechnik"]
4145419-4["Bildliche Darstellung"]
4132048-7-->4037220-0
4002511-1-->4037220-0
4036042-8-->4154503-5
4043238-5-->4037220-0
4048166-9-->4113357-2
4075923-4-->4037220-0
4154503-5-->4124801-6
4113357-2-->4021845-4
4124801-6-->4021850-8
4124801-6-->4794555-2
4021845-4-->4145419-4
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Wie im obigen Diagramm abzulesen, ist das nicht der Fall.
Interessant ist hier, dass die &lt;em>Pastellzeichnung&lt;/em> mit &lt;em>Acrylbild&lt;/em>, &lt;em>Aquarell&lt;/em> und &lt;em>Ölgemälde&lt;/em> als gemeinsamen Oberbegriff in die &lt;em>Malerei&lt;/em> verortet wurde, die &lt;em>Pastellzeichnung&lt;/em> im nächsten Diagramm aber mit der &lt;em>Radierung&lt;/em> und der &lt;em>Lithografie&lt;/em> in die GND-Sachgruppe &lt;em>Zeichnung, Grafik&lt;/em> eingeordnet wird.&lt;/p>
&lt;div class="mermaid">flowchart LR
4132048-7(["Acrylbild"]):::initial
cat0[["Malerei"]]:::category
4002511-1(["Aquarell"]):::initial
4036042-8(["Lithografie"]):::initial
cat1[["Zeichnung, Grafik"]]:::category
cat2[["Papierherstellung, Grafische Technik"]]:::category
4043238-5(["Ölgemälde"]):::initial
4048166-9(["Radierung"]):::initial
4075923-4(["Pastellzeichnung"]):::initial
4132048-7-->cat0
4002511-1-->cat0
4036042-8-->cat1
4036042-8-->cat2
4043238-5-->cat0
4048166-9-->cat1
4075923-4-->cat1
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;p>Mit wenig Aufwand, auch Dank dem &lt;a href="https://lobid.org/gnd/api" target="_blank" rel="noopener">GND API von lobid&lt;/a>, konnten wir eine Webanwendung umsetzen, mit der wir die Sachbegriffe in der GND besser kennen lernen können.
Die nachträglich bearbeitbaren Visualisierungen helfen uns bei der Projektdokumentation und bei der Kommunikation mit unseren Fachkollegen.&lt;/p>
&lt;ul class="cta-group">
&lt;li>
&lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/" class="btn btn-primary px-3 py-3">GND Hierarchie Visualisierung selbst ausprobieren&lt;/a>
&lt;/li>
&lt;/ul>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Das Bild &amp;ldquo;GND Sachbegriffe visualisieren&amp;rdquo; wurde erstellt mit Bildern von &lt;a href="https://pixabay.com/de/users/peggy_marco-1553824/" target="_blank" rel="noopener">Peggy und Marco Lachmann-Anke&lt;/a> und &lt;a href="https://pixabay.com/de/users/geralt-9301/" target="_blank" rel="noopener">Gerd Altmann&lt;/a> auf &lt;a href="https://pixabay.com/" target="_blank" rel="noopener">Pixabay&lt;/a> und dem &lt;a href="https://commons.wikimedia.org/wiki/File:Logo_Gemeinsame_Normdatei_%28GND%29.svg" target="_blank" rel="noopener">&amp;ldquo;Logo Gemeinsame Normdatei (GND)&amp;rdquo;&lt;/a> von &lt;a href="https://www.dnb.de/" target="_blank" rel="noopener">Deutsche Nationalbibliothek (DNB)&lt;/a>, welches lizenziert ist unter einer &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" target="_blank" rel="noopener">CC BY-SA 4.0&lt;/a> Lizenz. Das Bild &amp;ldquo;GND Sachbegriffe visualisieren&amp;rdquo; ist ebenfalls lizenziert unter einer &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" target="_blank" rel="noopener">CC BY-SA 4.0&lt;/a> Lizenz.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>&lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTerm" target="_blank" rel="noopener">Broader term&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermGeneral" target="_blank" rel="noopener">Broader term (general)&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermGeneric" target="_blank" rel="noopener">Broader term (generic)&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermInstantial" target="_blank" rel="noopener">Broader term (instantial)&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermPartitive" target="_blank" rel="noopener">Broader term (partitive)&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermWithMoreThanOneElement" target="_blank" rel="noopener">Broader term (with more than one element)&lt;/a>&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:3">
&lt;p>Danke hier auch an die &lt;a href="https://www.leo-bw.de/gnd-agentur" target="_blank" rel="noopener">GND-Agentur LEO-BW-Regional&lt;/a> für ein erstes Feedback!&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:4">
&lt;p>Die Vorzugsbenennung für &lt;em>Porzellan&lt;strong>figur&lt;/strong>&lt;/em> in der GND ist &lt;em>Porzellan&lt;strong>plastik&lt;/strong>&lt;/em>. Wir verwenden hier im Artikel teilweise offiziell in der GND gelistete Synonyme für Sachbegriffe, wenn sie besser in unsere Erzählstruktur passen.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:5">
&lt;p>In der GND ist teilweise die Bildart und teilweise die entsprechende Maltechnik die Vorzugsbenennung.
Also &lt;em>Aquarellmalerei&lt;/em> ist ein Synonym für den Vorzugsbegriff &lt;em>Aquarell&lt;/em> und &lt;em>Ölgemälde&lt;/em> ist ein Synonym für den Vorzugsbegriff &lt;em>Ölmalerei&lt;/em>. Für eine einheitliche Erzählstruktur, haben wir uns daher teilweise für die Verwendung der Synonyme in unserem Text und den Diagrammen entschieden.&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Findbuchdaten mit OpenRefine wiederverwenden</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/</link><pubDate>Tue, 24 Aug 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/</guid><description>&lt;p>In diesem Artikel behandeln wir die Frage, wie wir schon aufbereitete Daten mit OpenRefine wiederverwenden können.&lt;/p>
&lt;p>Wir haben schon einen &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/">Findbuch Index mit OpenRefine aufbereitet&lt;/a>.
wenn wir nun den Prokuratoren Index von &amp;ldquo;&lt;em>Band 57: Akten des Reichskammergerichts im Staatsarchiv Sigmaringen - Inventar des Bestands R 7. Bearb. von Raimund J. Weber. Kohlhammer 2004&lt;/em>&amp;rdquo; bearbeiten wollen, dann wäre zu erwarten, dass wir das Projekt nachnutzen können.&lt;/p>
&lt;p>Dies ist bedingt möglich. Zum einen können wir die Operationen aus der letzten Findbuchaufbereitung wiederverwenden.
Zum anderen können wir die Prokuratoren mit den Prokuratoren aus dem letzten Projekt abgleichen.&lt;/p>
&lt;p>Um es vorweg zu nehmen: es hat sich gezeigt, dass wir nur einen Teil der Operationen und Prokuratoren übernehmen können.
Aber gerade bei den Operationen ist das eine ziemliche Zeitersparnis.&lt;/p>
&lt;blockquote>
&lt;p>💾 Wir benötigen drei Dateien (Rechtsklick und &amp;ldquo;Ziel speichern unter&amp;hellip;&amp;rdquo;):&lt;/p>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-prokuratoren.txt" target="_blank">
&lt;i class="fas fa-file-alt pr-1 fa-fw">&lt;/i>Index Prokuratoren Akten RKG Band 57&lt;/a>
&lt;blockquote>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-openrefine-prokuratoren.json" target="_blank">
&lt;i class="fas fa-file-archive pr-1 fa-fw">&lt;/i>Index Prokuratoren Akten RKG Band 57 als OpenRefine Arbeitsschritte&lt;/a>
&lt;blockquote>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-wertheim-prokuratoren.csv" target="_blank">
&lt;i class="fas fa-file-csv pr-1 fa-fw">&lt;/i>Prokuratoren Akten RKG Band 57 - Wertheim als CSV&lt;/a>
&lt;p>Wir möchten explizit dazu einladen diese Dateien zu nutzen, um die einzelnen Schritte in OpenRefine selbst auszuprobieren und damit zu experimentieren.&lt;/p>
&lt;h2 id="operationen-übertragen">Operationen übertragen&lt;/h2>
&lt;p>Mit OpenRefine ist es möglich, die durchgeführten Operationen eines Projektes zu exportieren und in einem anderen Projekt zu importieren.
Beschrieben ist das im &lt;a href="https://docs.openrefine.org/manual/running#reusing-operations" target="_blank" rel="noopener">OpenRefine Manual&lt;/a>.&lt;/p>
&lt;p>Zuerst erstellen wir das Projekt in OpenRefine mit der Datei &lt;code>akten-rkg-band-57-prokuratoren.txt&lt;/code> als Grundlage.
Die Einstellungen sind in Abbildung 1 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-ansicht-zum-erstellen-neuer-projekte-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Ansicht zum Erstellen neuer Projekte in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-create-project_huffa3598330b71b2bc1ce4a2c5104db49_82035_a379f7001843141103fbf5d108508dcc.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-create-project_huffa3598330b71b2bc1ce4a2c5104db49_82035_98558c818e5edd40a414a8f0f169fb3d.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-create-project_huffa3598330b71b2bc1ce4a2c5104db49_82035_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-create-project_huffa3598330b71b2bc1ce4a2c5104db49_82035_a379f7001843141103fbf5d108508dcc.webp"
width="760"
height="335"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der Ansicht zum Erstellen neuer Projekte in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Mit der Schaltfläche &amp;ldquo;Extract&amp;hellip;&amp;rdquo; bei &amp;ldquo;Undo/Redo&amp;rdquo; (siehe Abbildung 2) können wir die Operationen aus einem Projekt exportieren und mit der Schaltfläche &amp;ldquo;Apply..&amp;rdquo; anwenden.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-schaltfläche-zum-anwenden-von-exportieren-operationen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Schaltfläche zum Anwenden von exportieren Operationen in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-apply-history_hu97e08a0ed45663f2db56bc6d326fe481_11384_b26bc7192540f6fb481f61bd203cc177.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-apply-history_hu97e08a0ed45663f2db56bc6d326fe481_11384_fb0e24d71b56a427a414088450873dde.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-apply-history_hu97e08a0ed45663f2db56bc6d326fe481_11384_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-apply-history_hu97e08a0ed45663f2db56bc6d326fe481_11384_b26bc7192540f6fb481f61bd203cc177.webp"
width="404"
height="124"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der Schaltfläche zum Anwenden von exportieren Operationen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Nach Klicken der Schaltfläche &amp;ldquo;Apply..&amp;rdquo; können wir die exportierten Operationen aus &lt;code>akten-rkg-band-57-openrefine-prokuratoren.json&lt;/code> wie in Abbildung 3 gezeigt einfügen und mit &amp;ldquo;Perform Operations&amp;rdquo; die Operationen auf dem aktuellen Projekt anwenden.&lt;/p>
&lt;figure id="figure-dialog-zum-anwenden-von-exportieren-operationen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Anwenden von exportieren Operationen in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-dialog-history_hufea20d8a60dc05561e0381ca4d811726_30143_4372b6b75c032c3ab06937c00f8f67e0.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-dialog-history_hufea20d8a60dc05561e0381ca4d811726_30143_8fa74f20ca26e887000648417dff0f7b.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-dialog-history_hufea20d8a60dc05561e0381ca4d811726_30143_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-dialog-history_hufea20d8a60dc05561e0381ca4d811726_30143_4372b6b75c032c3ab06937c00f8f67e0.webp"
width="760"
height="572"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Anwenden von exportieren Operationen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Bei unserem ersten Versuch haben wir festgestellt, dass die Operationen von unserem &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/">letzten Artikel&lt;/a> nicht direkt auf diesen Index anwendbar sind.
Beim Anwenden von Operationen aus einem anderen Projekt sind einige Dinge zu beachten.&lt;/p>
&lt;ol>
&lt;li>Die &lt;code>.json&lt;/code> Datei sollte mit einem Quelltexteditor wie (unter Windows) der Editor App, &lt;a href="https://notepad-plus-plus.org/" target="_blank" rel="noopener">Notepad++&lt;/a> oder &lt;a href="https://code.visualstudio.com/" target="_blank" rel="noopener">Visual Studio Code&lt;/a> geöffnet (und bearbeitet) werden.&lt;/li>
&lt;li>Die Spaltennamen in den beiden Projekten müssen die gleichen Namen haben.&lt;/li>
&lt;li>Manuelle Editieroperationen und Filteroperationen werden nicht mit übertragen.&lt;/li>
&lt;/ol>
&lt;p>In unserem konkreten Fall gab es zusätzlich die folgenden Probleme&lt;/p>
&lt;ul>
&lt;li>Die Extraktion der Seitenzahlen funktioniert nicht, da die Kopfzeilen sich unterscheiden.&lt;/li>
&lt;li>Das zweispaltige Layout hat statt 4 einen Minimalabstand von 3 Leerzeichen.&lt;/li>
&lt;li>Es gibt Zeilenumbrüche bei dem Namen der Prokuratoren und bei den Verweisen.&lt;/li>
&lt;li>Die Anpassungen für das &amp;ldquo;reconciling&amp;rdquo; lassen sich nicht übertragen.&lt;/li>
&lt;/ul>
&lt;p>In der Datei &lt;code>akten-rkg-band-57-openrefine-prokuratoren.json&lt;/code> haben wir die Operationen entsprechend bereinigt und angepasst, so dass sie direkt angewendet werden können. In Abbildung 4 ist das Ergebnis der Anwendung zu sehen.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-daten-nach-der-anwendung-der-operationen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Daten nach der Anwendung der Operationen in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-view-after-history_hub588ecfdf40463365e3d01a1e0691329_166566_6814b68d0eb6f679068063d0552ada2f.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-view-after-history_hub588ecfdf40463365e3d01a1e0691329_166566_3a263ad6ace05aa5eea1c05c25d690aa.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-view-after-history_hub588ecfdf40463365e3d01a1e0691329_166566_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-view-after-history_hub588ecfdf40463365e3d01a1e0691329_166566_6814b68d0eb6f679068063d0552ada2f.webp"
width="760"
height="369"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der Daten nach der Anwendung der Operationen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Bei &amp;ldquo;Albrecht von Lauterbach&amp;rdquo; ist eine andere Formatierung verwendet worden, die wir manuell nachkorrigiert haben.
Dafür sind wir in der &amp;ldquo;History&amp;rdquo; der Operationen zurück zu Schritt 33 gegangen.
Dann haben wir die fehlerhaften Einträge manuell via &amp;ldquo;inline editing&amp;rdquo; korrigiert.
Anschließend haben wir die (ehemaligen) Operationen 34 und 35 erneut via &amp;ldquo;Apply&amp;hellip;&amp;rdquo; angewendet.
Die (ehemaligen) Operationen 34 und 35 haben wir hier direkt zum Kopieren in den Artikel eingefügt:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;op&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;core/column-addition&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;engineConfig&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;facets&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;mode&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;row-based&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;baseColumnName&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Nachname&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;expression&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;join ([coalesce(cells[&amp;#39;Nachname&amp;#39;].value,&amp;#39;&amp;#39;),coalesce(cells[&amp;#39;Vorname&amp;#39;].value,&amp;#39;&amp;#39;)],&amp;#39;, &amp;#39;)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;onError&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;keep-original&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;newColumnName&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;columnInsertIndex&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Create column Name at index 1 based on column Nachname using expression join ([coalesce(cells[&amp;#39;Nachname&amp;#39;].value,&amp;#39;&amp;#39;),coalesce(cells[&amp;#39;Vorname&amp;#39;].value,&amp;#39;&amp;#39;)],&amp;#39;, &amp;#39;)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;op&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;core/column-move&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;columnName&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;index&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Move column Name to position 0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="zwischenfazit">Zwischenfazit&lt;/h3>
&lt;p>Die Übertragung von Verkettungen von Operationen, wie zum Beispiel das Auflösen eines zweispaltigen Layouts, ist praktisch und spart dem versierten Benutzer einiges an Zeit. Durch die automatisch generierten Beschreibungstexte für die Operationen ist es jedoch nicht leicht, die entsprechenden Blöcke von Operationen auch zu identifizieren.&lt;/p>
&lt;h2 id="abgleich-mit-lokaler-csv-datei">Abgleich mit lokaler CSV Datei&lt;/h2>
&lt;p>Mit der Datei &lt;code>akten-rkg-band-57-wertheim-prokuratoren.csv&lt;/code> besitzen wir eine (kleine) lokale Datenbank mit bereits aufbereiteten Prokuratoren.
Diese können wir zum Abgleich mit unseren aufbereiteten Daten in OpenRefine verwenden.
Dafür gibt es Werkzeuge, die eine CSV Datei als &amp;ldquo;Reconciliation Service&amp;rdquo; zur Verfügung stellen.&lt;/p>
&lt;h3 id="abgleich-mit-reconcile-csv-clojure">Abgleich mit reconcile-csv (Clojure)&lt;/h3>
&lt;p>Das Projekt &lt;a href="http://okfnlabs.org/reconcile-csv/" target="_blank" rel="noopener">reconcile-csv&lt;/a> basiert auf &lt;a href="https://clojure.org/" target="_blank" rel="noopener">Clojure&lt;/a> und lässt sich daher direkt mit der gleichen Java Version ausführen, mit der wir auch OpenRefine verwenden.
Dafür erstellen wir im Ordner mit der &lt;code>openrefine.exe&lt;/code> einen Ordner &lt;code>services&lt;/code> und kopieren die heruntergeladene &lt;code>reconcile-csv-0.1.2.jar&lt;/code> hinein.&lt;/p>
&lt;p>In dem Ordner öffnen wir anschließend eine PowerShell und führen mit der Java Version von OpenRefine die &lt;code>.jar&lt;/code> Datei aus.
Das CSV Reconciliation Service benötigt drei Parameter:&lt;/p>
&lt;ol>
&lt;li>Der Pfad zu der CSV Datei.&lt;/li>
&lt;li>Der Name der Spalte mit der abgeglichen werden soll.&lt;/li>
&lt;li>Der Name der Spalte mit einem eindeutigen Wert (ID) für jede Zeile. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="p">.\&lt;/span>&lt;span class="n">server&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">target&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">jre&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">java&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">exe&lt;/span> &lt;span class="n">-jar&lt;/span> &lt;span class="p">.\&lt;/span>&lt;span class="n">services&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="nb">reconcile-csv&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">0.1&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">jar&lt;/span> &lt;span class="p">.\&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="nb">akten-rkg&lt;/span>&lt;span class="o">-band&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">57&lt;/span>&lt;span class="n">-wertheim-prokuratoren&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">csv&lt;/span> &lt;span class="n">Name&lt;/span> &lt;span class="n">Nr&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Mit &amp;ldquo;Name&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Reconcile&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Start reconciling&amp;rdquo; können wir auf der Spalte Name den &amp;ldquo;Reconciliation&amp;rdquo; Vorgang starten und dort die Adresse &lt;code>http://localhost:8000/reconcile&lt;/code> als &amp;ldquo;Reconciliation Service&amp;rdquo; hinzufügen.&lt;/p>
&lt;p>Wie in Abbildung 5 gezeigt, gibt es für die einzelnen Ergebnisvorschläge auch eine Vorschau Funktion, in der die Inhalte der Tabellenzeile zum besseren Abgleich angezeigt werden.&lt;/p>
&lt;figure id="figure-bildschirmfoto-vom-abgleich-mit-reconcile-csv-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto vom Abgleich mit &amp;#39;reconcile-csv&amp;#39; in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-reconcile-dialog_hu34d6fa633cf59b7f58586ffcb0989db1_81588_5dabc4222d5b07f8bd9ce3745efb82f9.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-reconcile-dialog_hu34d6fa633cf59b7f58586ffcb0989db1_81588_9bb9395b3167fcab6b0f8776402bed8c.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-reconcile-dialog_hu34d6fa633cf59b7f58586ffcb0989db1_81588_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-reconcile-dialog_hu34d6fa633cf59b7f58586ffcb0989db1_81588_5dabc4222d5b07f8bd9ce3745efb82f9.webp"
width="760"
height="334"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto vom Abgleich mit &amp;lsquo;reconcile-csv&amp;rsquo; in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Wir konnten mit dem lokalen Abgleich 28 Prokuratoren aus unserer Liste finden.&lt;/p>
&lt;p>An dieser Stelle würden wir gerne weitere Daten aus der CSV Datei laden, wie es von dem von &lt;a href="https://docs.openrefine.org/manual/reconciling#fetching-more-data" target="_blank" rel="noopener">OpenRefine unterstützen Data Extension API&lt;/a> angeboten wird.
Leider wird diese Funktionalität in diesem Service nicht unterstützt.
Da das Projekt Stand August 2021 seit 2015 nicht mehr weiterentwickelt wurde, ist damit auch nicht zu rechnen.&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;h3 id="abgleich-mit-csv-reconcile-python">Abgleich mit csv-reconcile (Python)&lt;/h3>
&lt;p>Ein neueres Projekt zum Abgleich mit lokalen CSV Dateien ist &lt;a href="https://github.com/gitonthescene/csv-reconcile" target="_blank" rel="noopener">csv-reconcile&lt;/a>, welches auf &lt;a href="https://www.python.org/" target="_blank" rel="noopener">Python&lt;/a> basiert und sich aktiv in der Entwicklung befindet.&lt;/p>
&lt;p>Wie wir schon im Artikel &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-08-ner-mit-openrefine-und-spacy/">Named Entity Recognition mit OpenRefine und spaCy&lt;/a> festgestellt haben, ist die Verwendung von Python Frameworks mit OpenRefine aufwendiger, da wir dafür zusätzlich eine aktuelle Python Installation benötigen.&lt;/p>
&lt;p>Haben wir lokal Python installiert, dann können wir mit PowerShell im gleichen &lt;code>services&lt;/code> Ordner wie im letzten Abschnitt
eine virtuelle Python Umgebung anlegen (1),
diese virtuelle Umgebung aktivieren (2),
das Paket &lt;code>csv-reconcile&lt;/code> mit pip installieren (3),
und den &amp;ldquo;CSV Reconciliation Service&amp;rdquo; starten (4).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">python&lt;/span> &lt;span class="n">-m&lt;/span> &lt;span class="n">venv&lt;/span> &lt;span class="n">venv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.\&lt;/span>&lt;span class="n">venv&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">Scripts&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">activate&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pip&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="nb">csv-reconcile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">csv-reconcile&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-init-db&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-config&lt;/span> &lt;span class="n">config&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">py&lt;/span> &lt;span class="p">..\&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="nb">akten-rkg&lt;/span>&lt;span class="o">-band&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">57&lt;/span>&lt;span class="n">-wertheim-prokuratoren&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">csv&lt;/span> &lt;span class="n">Nr&lt;/span> &lt;span class="n">Name&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Leider konnte unsere CSV Datei auf Grund ihres Formates und Kodierung nicht auf Anhieb richtig geladen werden, so dass wir zusätzlich eine Konfigurationsdatei &lt;code>config.py&lt;/code> mit dem folgenden Inhalt im Ordner &lt;code>services&lt;/code> hinterlegt haben.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">CSVKWARGS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;delimiter&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;,&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;quotechar&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;&amp;#34;&amp;#39;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">CSVENCODING&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;UTF-8&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Der &amp;ldquo;CSV Reconciliation Service&amp;rdquo; ist anschließend unter &lt;code>http://localhost:5000/reconcile&lt;/code> erreichbar.&lt;/p>
&lt;p>Das Python Projekt ist deutlich flexibler und ausführlicher zu konfigurieren, als das ältere Clojure Projekt.
Es unterstützt auch die &amp;ldquo;Data Extension API&amp;rdquo;, so dass wir nach dem Abgleich weitere Spalten aus der CSV Datei nachladen können.
&lt;del>Leider fehlt noch eine Vorschau, so dass kein visueller Abgleich zum Beispiel mit den Wirkdaten der Prokuratoren möglich ist.&lt;/del>
Ab &lt;a href="https://github.com/gitonthescene/csv-reconcile/releases/tag/v0.3.0" target="_blank" rel="noopener">Version 0.3.0&lt;/a> gibt es eine optionale Vorschau Funktion.&lt;/p>
&lt;h2 id="abgleich-mit-der-gnd">Abgleich mit der GND&lt;/h2>
&lt;p>Nachdem wir etwa 10 Prozent der Prokuratoren mit unseren lokalen Daten abgleichen konnten, können wir nun den Rest direkt mit der Gemeinsamen Normdatei (GND) abgleichen.
Darauf sind wir in &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/">Findbuch Index mit OpenRefine aufbereiten&lt;/a> genauer eingegangen und werden das daher hier nicht weiter vertiefen.&lt;/p>
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;div class="mermaid">---
title: Prozess
config:
look: handDrawn
theme: neutral
---
flowchart LR
text[fas:fa-file-alt Text]
code[fas:fa-code Code]
index[fas:fa-file-csv Index]
data[fas:fa-table Table]
partially[fas:fa-tasks Parts]
gnd[fas:fa-database GND]
semantic[fas:fa-project-diagram Graph]
text --> data --> partially --> semantic
code --> data
index --> partially
gnd --> semantic
&lt;/div>
&lt;p>Die Möglichkeit &lt;code>json&lt;/code> Schnippsel mit Verkettungen von Operationen für komplexe Aufgaben zu importieren gefällt uns, und wir werden diese Methode gegebenenfalls öfter verwenden.&lt;/p>
&lt;p>Für den komfortablen Abgleich mit einer lokalen CSV Datei fehlte den beiden getesteten Bibliotheken noch Funktionalität.&lt;/p>
&lt;p>Das auf Clojure basierende reconcile-csv lässt sich ohne großen Mehraufwand verwenden und bietet eine hilfreiche Vorschau Funktion.
Ohne eine Unterstützung der &amp;ldquo;Data Extension API&amp;rdquo; ist es für unsere Anwendungsfälle aber nur beschränkt nutzbar.&lt;/p>
&lt;p>Das auf Python basierende csv-reconcile benötigt eine lokale Python Installation und bietet noch keine Vorschau Funktion, ohne die sich der Datenabgleich teilweise mühsam gestaltet.&lt;/p>
&lt;p>Die Möglichkeit eigene Datenbanken in Form von CSV Dateien zu nutzen, oder wie im Falle der Indizes zu den Akten des Reichskammergerichts schrittweise aufzubauen, ist jedoch vorhanden und hat das Potential von großer Arbeitserleichterung.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Da wir bei der Bearbeitung des Prokuratoren Index der Akten in Wertheim nicht alle Prokuratoren mit einer GND-ID verknüpfen konnten,
haben wir den Daten eine Spalte Nr mit der &amp;ldquo;GREL expression&amp;rdquo; &lt;code>row.index + 1&lt;/code> hinzugefügt.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Eine Möglichkeit das &amp;ldquo;Data Extension Problem&amp;rdquo; zu umgehen, ist aus den abgeglichenen Daten eine neue Spalte mit der &amp;ldquo;GREL expression&amp;rdquo; &lt;code>cell.recon.match.id&lt;/code> zu erzeugen und die beiden Dateien anschließend mit einem anderen Werkzeug zusammenzuführen. Eine weitere Möglichkeit besteht darin, die andere CSV Datei in OpenRefine als Projekt zu laden und den Abgleich mit der Funktion &lt;a href="https://docs.openrefine.org/manual/grelfunctions#crosscell-s-projectname-s-columnname" target="_blank" rel="noopener">cross&lt;/a> durchzuführen.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Findbuch Index mit OpenRefine aufbereiten</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/</link><pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/</guid><description>&lt;p>In diesem Tutorial arbeiten wir mit OpenRefine und der Gemeinsamen Normdatei (GND) den Prokuratoren Index eines Findbuchs zu Akten des Reichskammergerichts auf.&lt;/p>
&lt;p>Wir haben bereits beschrieben, wie wir die &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuecher-mit-openrefine-in-datenbank-uebernehmen/">Einträge eines Findbuchs mit OpenRefine für den Datenbankimport aufbereiten&lt;/a>.
In diesem Beitrag geht es um die Aufarbeitung eines Indices von Findbüchern.
Wir beginnen mit dem Index der Prokuratoren.
Andere Indices folgen gegebenenfalls in weiteren Artikeln.&lt;/p>
&lt;h2 id="generelles-vorgehen">Generelles Vorgehen&lt;/h2>
&lt;p>Zur Übersichtlichkeit verwenden wir wieder das Findbuch &amp;ldquo;&lt;em>Akten des Reichskammergerichts im Staatsarchiv Wertheim - Inventar des Bestands R J 10&lt;/em>&amp;rdquo; aus dem Anhang von &amp;ldquo;&lt;em>Band 57: Akten des Reichskammergerichts im Staatsarchiv Sigmaringen - Inventar des Bestands R 7. Bearb. von Raimund J. Weber. Kohlhammer 2004&lt;/em>&amp;rdquo; mit 20 verzeichneten Archivalien.&lt;/p>
&lt;p>Die Findbücher zu den Akten des Reichskammergerichts enthalten verschiedene Indices.
Wir behandeln in diesem Tutorial den Index der Prokuratoren.&lt;/p>
&lt;figure id="figure-erste-seite-des-index-der-prokuratoren-im-findbuch-zu-bestand-r-j-10">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Erste Seite des Index der Prokuratoren im Findbuch zu Bestand R J 10." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/akten-rkg-band-57-wertheim-prokuratoren_hu597bc5995f23edb684e3f54eb4fc75ac_48878_65e2d36b450100349ac92bbb15a17fad.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/akten-rkg-band-57-wertheim-prokuratoren_hu597bc5995f23edb684e3f54eb4fc75ac_48878_5b1a2859b02cf3bae777fdfe54e40e26.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/akten-rkg-band-57-wertheim-prokuratoren_hu597bc5995f23edb684e3f54eb4fc75ac_48878_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/akten-rkg-band-57-wertheim-prokuratoren_hu597bc5995f23edb684e3f54eb4fc75ac_48878_65e2d36b450100349ac92bbb15a17fad.webp"
width="491"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Erste Seite des Index der Prokuratoren im Findbuch zu Bestand R J 10.
&lt;/figcaption>&lt;/figure>
&lt;p>Wie in Abbildung 1 zu sehen, handelt es sich bei dem Index um ein mehrspaltiges Layout, was das Einlesen in OpenRefine verkompliziert.
Zu den einzelnen Prokuratoren finden wir eine Zuordnung von Jahren auf die Findbuchnummer(n) der verzeichneten Archivalie(n).&lt;/p>
&lt;p>Zur Aufarbeitung des Index gehen wir wie folgt vor:&lt;/p>
&lt;ol>
&lt;li>Index aus Findbuch extrahieren&lt;/li>
&lt;li>Spalten zusammenführen&lt;/li>
&lt;li>Informationen zu Prokuratoren zusammenführen&lt;/li>
&lt;li>Abgleich mit der Gemeinsamen Normdatei (GND)&lt;/li>
&lt;li>Umwandlung in internes Deskriptorenformat&lt;/li>
&lt;/ol>
&lt;p>Dabei werden wir die einzelnen Schritte in OpenRefine nicht so detailliert beschrieben,
wie in unserem &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuecher-mit-openrefine-in-datenbank-uebernehmen/">letzten Tutorial&lt;/a>.
Bei Bedarf, können Details zu einzelnen Schritten dort noch einmal nachgelesen werden.&lt;/p>
&lt;h2 id="1-index-aus-findbuch-extrahieren">1. Index aus Findbuch extrahieren&lt;/h2>
&lt;p>Auch bei den Indices empfiehlt es sich schon diverse Vorarbeiten im Text selbst durchzuführen.&lt;/p>
&lt;blockquote>
&lt;p>💾 Wir stellen die aufgeräumte Datei zur Verfügung (Rechtsklick und &amp;ldquo;Ziel speichern unter&amp;hellip;&amp;rdquo;):&lt;/p>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-wertheim-prokuratoren.txt" target="_blank">
&lt;i class="fas fa-file-alt pr-1 fa-fw">&lt;/i>Index Prokuratoren Akten RKG Band 57 - Wertheim&lt;/a>
.
&lt;p>Wir möchten explizit dazu einladen diese Datei zu nutzen, um die einzelnen Schritte in OpenRefine selbst auszuprobieren und damit zu experimentieren.&lt;/p>
&lt;h2 id="2-spalten-zusammenführen">2. Spalten zusammenführen&lt;/h2>
&lt;p>Wie in unserem &lt;a href="%28/post/2021-07-findbuecher-mit-openrefine-in-datenbank-uebernehmen/%29">letzten Tutorial&lt;/a> erstellen wir mit OpenRefine ein neues Projekt mit &amp;ldquo;Create Project&amp;rdquo; und laden die heruntergeladene Datei als Text.&lt;/p>
&lt;p>Um das zweispaltige Layout in ein einspaltiges Layout zu überführen, gehen wir wie in Abbildung 2 schematisch dargestellt vor:&lt;/p>
&lt;ol>
&lt;li>Die Spalte &amp;ldquo;Column 1&amp;rdquo; benennen wir in Original um.&lt;/li>
&lt;li>Wir erstellen &amp;ldquo;records&amp;rdquo; aus den einzelnen Seiten.&lt;/li>
&lt;li>Wir trennen die Spalten zeilenweise auf.&lt;/li>
&lt;li>Wir fassen die &amp;ldquo;records&amp;rdquo; in einer Zeile zusammen.&lt;/li>
&lt;li>Wir fügen die Spalten wieder zusammen.&lt;/li>
&lt;li>Wir trennen die einzelnen Zeilen wieder auf.&lt;/li>
&lt;/ol>
&lt;figure id="figure-strategie-zur-zusammenführung-der-zwei-spalten-in-mehreren-schritten">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Strategie zur Zusammenführung der zwei Spalten in mehreren Schritten." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/spalten-strategie_huac24e46954a78881c0c12bf53bbc59f8_128861_b0ab3ae4678151f8adfbd700719ae521.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/spalten-strategie_huac24e46954a78881c0c12bf53bbc59f8_128861_8ee95a4ca4c044075125a283d62d3ae2.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/spalten-strategie_huac24e46954a78881c0c12bf53bbc59f8_128861_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/spalten-strategie_huac24e46954a78881c0c12bf53bbc59f8_128861_b0ab3ae4678151f8adfbd700719ae521.webp"
width="760"
height="698"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Strategie zur Zusammenführung der zwei Spalten in mehreren Schritten.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="1-spalte-in-original-umbennen">1 Spalte in Original umbennen&lt;/h3>
&lt;p>Die Umbenennung der Spalte Column 1 in Original funktioniert über &amp;ldquo;Column 1&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit column&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Rename this column&amp;rdquo;.&lt;/p>
&lt;p>Der geladene Datensatz sieht ansclhießend wie in Abbildung 3 aus.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-geladenen-daten-ohne-bearbeitung-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der geladenen Daten ohne Bearbeitung in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-original_hu2ba9a6aa0a914fbc6b8a73a50f93f70b_45924_6c4a32aeb7c334f22b91c1fcf1f42b9a.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-original_hu2ba9a6aa0a914fbc6b8a73a50f93f70b_45924_de0729515253ae4be322eb4ed4792921.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-original_hu2ba9a6aa0a914fbc6b8a73a50f93f70b_45924_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-original_hu2ba9a6aa0a914fbc6b8a73a50f93f70b_45924_6c4a32aeb7c334f22b91c1fcf1f42b9a.webp"
width="417"
height="623"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der geladenen Daten ohne Bearbeitung in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="2-seiten-als-records">2 Seiten als records&lt;/h3>
&lt;p>Um die einzelnen Seiten als &amp;ldquo;records&amp;rdquo; zu markieren, erstellen wir eine neue Spalte Seite via
&amp;ldquo;Original&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit column&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Add column based on this column&amp;hellip;&amp;rdquo;
und verwenden die folgende &amp;ldquo;expression&amp;rdquo; um die Seitennummer auszulesen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/.(\d+)\s+Anhang/&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Die Seite 519 tragen wir bei der Indexüberschrift &amp;ldquo;4. Prokuratoren&amp;rdquo; von Hand ein.
Die leeren Zeilen löschen wir über das &amp;ldquo;Blank row Facet&amp;rdquo;, das wir über &amp;ldquo;All&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Facet&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Facet by blank (null or empty string)&amp;rdquo; aktivieren.&lt;/p>
&lt;p>Die Spalte Seite verschieben wir anschließend an die erste Position, um pro Seite ein &amp;ldquo;record&amp;rdquo; zu haben.
Die nach Seiten organisierten &amp;ldquo;records&amp;rdquo; sehen anschließend wie in Abbildung 4 aus.&lt;/p>
&lt;figure id="figure-bildschirmfoto-von-seiten-als-records-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto von Seiten als &amp;#39;records&amp;#39; in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-page_huae02a450bdafa3ae6103af45075ec205_47396_a0e501f0defa4c3b63fa4ef57baafdf9.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-page_huae02a450bdafa3ae6103af45075ec205_47396_f4d30a2c3d656941e59915e614587b54.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-page_huae02a450bdafa3ae6103af45075ec205_47396_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-page_huae02a450bdafa3ae6103af45075ec205_47396_a0e501f0defa4c3b63fa4ef57baafdf9.webp"
width="485"
height="626"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto von Seiten als &amp;lsquo;records&amp;rsquo; in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="3-spalten-zeilenweise-auftrennen">3 Spalten zeilenweise auftrennen&lt;/h3>
&lt;p>Um die Spalten aufzuteilen, gibt es wie in Abbildung 5 gezeigt mehrere Möglichkeiten.
Es ist möglich ein Trennzeichen anzugeben, einen regulären Ausdruck zum Trennen zu verwenden, oder eine feste Spaltenbreite zu definieren.&lt;/p>
&lt;figure id="figure-dialog-zum-aufteilen-von-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Aufteilen von Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-columns_huc8717d9a9e80e4438e3151322f96bd62_16428_56099391c518f4ce8d97477bc0e48391.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-columns_huc8717d9a9e80e4438e3151322f96bd62_16428_a73d8e04cd2f9402b81e8bdc964c54f3.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-columns_huc8717d9a9e80e4438e3151322f96bd62_16428_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-columns_huc8717d9a9e80e4438e3151322f96bd62_16428_56099391c518f4ce8d97477bc0e48391.webp"
width="602"
height="320"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Aufteilen von Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Bei diesem Findbuch funktioniert die Auftrennung nach einer festen Spaltenbreite nicht, da zum Beispiel die linke Spalte auf Seite 519 größer ist als die linke Spalte auf Seite 520.
Also trennen wir an einer Folge von vier oder mehr Leerzeichen auf &lt;code>\s{4,}&lt;/code>.
Das hat den Nachteil, dass wir die Einrückungen in der zweiten Spalte verlieren.
Dies stört uns bei diesem Index nicht.&lt;/p>
&lt;p>Das Ergebnis ist in Abbildung 6 gezeigt.
Anschließend können wir mit &amp;ldquo;All&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Trim leading and trailing whitespace&amp;rdquo; alle unnötigen Leerzeichen in den Spalten entfernen.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-aufgeteilten-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der aufgeteilten Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-columns-separated_hu94e444ee27a95ea2c3b9fb9bbc095f17_48267_09d0753ef4861260c093db9e5ddc5513.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-columns-separated_hu94e444ee27a95ea2c3b9fb9bbc095f17_48267_64d5fbb0a824c839fdaac5d2597662f2.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-columns-separated_hu94e444ee27a95ea2c3b9fb9bbc095f17_48267_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-columns-separated_hu94e444ee27a95ea2c3b9fb9bbc095f17_48267_09d0753ef4861260c093db9e5ddc5513.webp"
width="486"
height="622"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der aufgeteilten Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="4-records-in-einer-zeile-zusammenfassen">4 Records in einer Zeile zusammenfassen&lt;/h3>
&lt;p>Um die Zeilen pro &amp;ldquo;record&amp;rdquo; zusammenzufassen, verwenden wir &amp;ldquo;Original 1&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join multi-valued cells&amp;hellip;&amp;rdquo; mit der Trennsequzent &lt;code>-:::-&lt;/code> und verfahren bei Spalte Original 2 ebenso.
Das Ergebnis ist in Abbildung 7 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-zusammengeführen-zeilen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der zusammengeführen Zeilen in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-rows_hue6af434e59adde981e531e3241be8714_37739_b13f5ce68eceddf748a276ad7ffc55a2.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-rows_hue6af434e59adde981e531e3241be8714_37739_aec968ad586e71d4b98229f933159e7d.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-rows_hue6af434e59adde981e531e3241be8714_37739_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-rows_hue6af434e59adde981e531e3241be8714_37739_b13f5ce68eceddf748a276ad7ffc55a2.webp"
width="760"
height="90"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der zusammengeführen Zeilen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="5-spalten-zusammenführen">5 Spalten zusammenführen&lt;/h3>
&lt;p>Die Spalten Original 1 und 2 werden über &amp;ldquo;Original 1&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit column&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join columns&amp;hellip;&amp;rdquo; wieder in der Spalte Original zusammengeführt.
Die Einstellungen sind in Abbildung 8 abgebildet.&lt;/p>
&lt;figure id="figure-dialog-zum-zusammenführen-der-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Zusammenführen der Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-join-columns_hueaf9c441b3f82f5fb28bfb42466915b2_23310_d29e3bf56b195ba43e412deec5f7f2d1.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-join-columns_hueaf9c441b3f82f5fb28bfb42466915b2_23310_e03b2e749eff89a53ef193a801bcca97.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-join-columns_hueaf9c441b3f82f5fb28bfb42466915b2_23310_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-join-columns_hueaf9c441b3f82f5fb28bfb42466915b2_23310_d29e3bf56b195ba43e412deec5f7f2d1.webp"
width="760"
height="436"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Zusammenführen der Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Das Ergebnis ist in Abbildung 9 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-zusammengeführten-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der zusammengeführten Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-columns_hue77fcfc52bdf2921ba6d7c053e933957_36587_1001698c14e2e14fada1b5b3c271f4b6.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-columns_hue77fcfc52bdf2921ba6d7c053e933957_36587_50c3b83504ad23b774cd54e7d7f03bd0.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-columns_hue77fcfc52bdf2921ba6d7c053e933957_36587_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-columns_hue77fcfc52bdf2921ba6d7c053e933957_36587_1001698c14e2e14fada1b5b3c271f4b6.webp"
width="760"
height="91"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der zusammengeführten Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="6-zeilen-auftrennen">6 Zeilen auftrennen&lt;/h3>
&lt;p>Um die einzelnen Zeilen wieder aufzutrennen, verwenden wir &amp;ldquo;Original&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Split multi-valued cells&amp;hellip;&amp;rdquo; mit der Trennsequenz &lt;code>-:::-&lt;/code>, wie im Dialog in Abbildung 10 abgebildet.&lt;/p>
&lt;figure id="figure-dialog-zum-auftrennen-der-zeilen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Auftrennen der Zeilen in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-rows_hufacaa21fef3d1c9115f4f306f0dce00d_16327_572a5f30105cee4a0447a486521408d1.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-rows_hufacaa21fef3d1c9115f4f306f0dce00d_16327_833623c8faed1a45a74b834d3ed65749.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-rows_hufacaa21fef3d1c9115f4f306f0dce00d_16327_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-rows_hufacaa21fef3d1c9115f4f306f0dce00d_16327_572a5f30105cee4a0447a486521408d1.webp"
width="603"
height="387"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Auftrennen der Zeilen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Das Ergebnis ist in Abbildung 11 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-aufgetrennten-zeilen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der aufgetrennten Zeilen in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-split-rows_hu8c6958d10e75822edc14971c48ff1f9b_34445_524485a2c51fbcfcfc5fd9d7fd9e8a40.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-split-rows_hu8c6958d10e75822edc14971c48ff1f9b_34445_6c30b673755eb4143cb36dd9b7467139.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-split-rows_hu8c6958d10e75822edc14971c48ff1f9b_34445_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-split-rows_hu8c6958d10e75822edc14971c48ff1f9b_34445_524485a2c51fbcfcfc5fd9d7fd9e8a40.webp"
width="328"
height="624"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der aufgetrennten Zeilen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Anschließend können wir alle Zeilen mit Seitennummern entfernen und die Spalte Seite löschen.
Dafür ein &amp;ldquo;Text Facet&amp;rdquo; auf der Spalte Seite erstellen und die entsprechenden Zeilen auswählen und löschen.&lt;/p>
&lt;h2 id="3-informationen-zu-prokuratoren-zusammenführen">3. Informationen zu Prokuratoren zusammenführen&lt;/h2>
&lt;p>Wir haben in den vorangegangenen Schritten das zweispaltige Layout in ein einspaltiges Layout überführt und wollen nun für jeden Prokurator ein &amp;ldquo;record&amp;rdquo; erzeugen.
Dafür trennen wir die Zeilen in einzelne Spalten für Name, (Wirkungs-)Jahre und Verweise auf.
Anschließend transformieren wir die einzelnen Spalten, um zum Beispiel die Jahre und Verweise zusammenzufassen.&lt;/p>
&lt;h3 id="informationen-auftrennen">Informationen auftrennen&lt;/h3>
&lt;h4 id="spalte-name">Spalte Name&lt;/h4>
&lt;p>Wir erzeugen von der Spalte Original aus eine neue Spalte Name mit einer &amp;ldquo;expression&amp;rdquo;.
Dafür suchen wir mit dem regulären Ausdruck &lt;code>[A-Z].+&lt;/code> nach Zeilen, die mit einem Großbuchstaben beginnen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/([A-Z].+)/&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="spalte-jahre">Spalte Jahre&lt;/h4>
&lt;p>Wir erzeugen von der Spalte Original aus eine neue Spalte Jahre mit einer &amp;ldquo;expression&amp;rdquo;.
Dafür suchen wir mit dem regulären Ausdruck &lt;code>(\d{4}):.+&lt;/code> nach Zeilen, die mit vier Zahlen gefolgt von einem Doppelpunkt beginnen.
Davon extrahieren wir die vier Zahlen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/(\d{4}):.+/&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="spalte-verweise">Spalte Verweise&lt;/h4>
&lt;p>Wir erzeugen von der Spalte Original aus eine neue Spalte Verweise mit einer &amp;ldquo;expression&amp;rdquo;.
Dafür suchen wir mit dem regulären Ausdruck &lt;code>\d{4}:(.+)&lt;/code> nach Zeilen, die mit vier Zahlen gefolgt von einem Doppelpunkt beginnen.
Davon extrahieren wir alles nach dem Doppelpunkt.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/\d{4}:(.+)/&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="spalten-umformatieren">Spalten umformatieren&lt;/h3>
&lt;p>Die Spalte Original benötigen wir nicht mehr und können sie löschen.
Wir verschieben anschließend die Spalte Name an den Anfang, da sie die &amp;ldquo;records&amp;rdquo; definiert.&lt;/p>
&lt;p>Das Ergebnis ist in Abbildung 12 gezeigt.
Anschließend formatieren wir die einzelnen Spalten.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-extrahierten-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der extrahierten Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-extracted_huf24f13b4eaa5b1b44d55a59148a18e6d_42704_e8c9f8d35d276175f17893548835d6f2.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-extracted_huf24f13b4eaa5b1b44d55a59148a18e6d_42704_01db1bb85ab1b6387ea6edd89738a44b.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-extracted_huf24f13b4eaa5b1b44d55a59148a18e6d_42704_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-extracted_huf24f13b4eaa5b1b44d55a59148a18e6d_42704_e8c9f8d35d276175f17893548835d6f2.webp"
width="410"
height="623"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der extrahierten Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h4 id="spalte-jahre-1">Spalte Jahre&lt;/h4>
&lt;p>Die Jahre im Beispiel &lt;code>1797, 1767, 1770, 1801&lt;/code> wollen wir als Zeitraum im Format &lt;code>1767 - 1801&lt;/code> zusammenfassen.
Dafür führen wir die Zeilen der Spalte Jahre via &amp;ldquo;Jahre&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join multi-valued cells&amp;hellip;&amp;rdquo; mit der Trennsequenz &lt;code>,\s+&lt;/code> zusammen.&lt;/p>
&lt;p>Die Spalte Jahre transfomieren wir anschließend via &amp;ldquo;Jahre&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Transform&amp;hellip;&amp;rdquo;.
Dafür bestimmen wir das Minimum und das Maximum in der Liste der Zahlen.
Leider gibt es in GREL keine Funktion, die das auf einer Liste (technisch &lt;a href="https://docs.openrefine.org/manual/grelfunctions#array-functions" target="_blank" rel="noopener">Array&lt;/a>) für uns übernehmen kann. Daher gehen wir wie folgt vor:&lt;/p>
&lt;ol>
&lt;li>Wir erzeugen eine Liste &lt;code>years&lt;/code>, indem wir mit &lt;code>split()&lt;/code> an der Sequenz &lt;code>,\s+&lt;/code> trennen.&lt;/li>
&lt;li>Die einzelnen Jahre &lt;code>year&lt;/code> wandeln wir in einer &lt;code>forEach&lt;/code> Schleife mit &lt;code>toNumber()&lt;/code> in Zahlen um, da sie sonst &amp;ldquo;fehlerhaft&amp;rdquo; sortiert werden (&lt;code>&amp;quot;1, 10, 11, 2, 20, ...&amp;quot;&lt;/code>).&lt;/li>
&lt;li>Wir sortieren die Liste &lt;code>years&lt;/code> mit &lt;code>sort()&lt;/code>.&lt;/li>
&lt;li>Hat die Liste &lt;code>years&lt;/code> nur ein Jahr, dann wandeln wir es mit &lt;code>toString()&lt;/code> in Text um.&lt;/li>
&lt;li>Hat die Liste &lt;code>years&lt;/code> mehrere Elemente, nehmen wir das erste (Minimum) und das letzte Element (Maximum). Durch die Verbindung über &lt;code>-&lt;/code> wird automatisch ein Text erzeugt.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">with&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">forEach&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/,\s+/&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">year&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">year&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">toNumber&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">sort&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">years&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">years&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">years&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">toString&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">years&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34; - &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">years&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="spalte-verweise-1">Spalte Verweise&lt;/h4>
&lt;p>Die Verweise führen wir ebenfalls via &amp;ldquo;Verweise&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join multi-valued cells&amp;hellip;&amp;rdquo; mit der Trennsequenz &lt;code>,\s+&lt;/code> zusammen.&lt;/p>
&lt;p>Die Spalte Verweise transfomieren wir anschließend via &amp;ldquo;Verweise&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Transform&amp;hellip;&amp;rdquo;.
Bei den Verweisen haben wir mehrere Probleme:&lt;/p>
&lt;ol>
&lt;li>Teilweise werden sie als Bereiche &lt;code>8-10&lt;/code> angegeben, die wir in &lt;code>8, 9, 10&lt;/code> überführen wollen.&lt;/li>
&lt;li>Es werden zwei verschiedene Bindestriche verwendet, die optisch gleich aussehen.&lt;/li>
&lt;li>Wir können Duplikate bei den Verweisen haben.&lt;/li>
&lt;li>Die Reihenfolge kann durcheinander sein.&lt;/li>
&lt;/ol>
&lt;p>Die &amp;ldquo;expression&amp;rdquo; um diese Probleme zu behandeln, ist daher komplex.
Hier eine Erklärung des Vorgehens:&lt;/p>
&lt;ol>
&lt;li>Wir trennen die Verweise mit dem regulären Ausdruck &lt;code>,\s+&lt;/code> in eine Liste (technisch Array).&lt;/li>
&lt;li>Jeden der Verweise &lt;code>v&lt;/code> in der Liste trennen wir anschließend mit dem regulären Ausdruck &lt;code>–|\-&lt;/code> (unterschiedliche Bindestriche) und nennen das Ergebnis &lt;code>v2&lt;/code>.&lt;/li>
&lt;li>Wenn der Verweis &lt;code>v2&lt;/code> mehrere Elemente hat (es also ein Bereich mit Bindestrich war), dann erzeugen wir mit &lt;a href="https://docs.openrefine.org/manual/grel#forrangen-from-n-to-n-step-v-e" target="_blank" rel="noopener">forRange&lt;/a> eine Zahlenliste über diesem Bereich, und verbinden die Zahlen mit &lt;code>join(&amp;quot;,&amp;quot;)&lt;/code> zu einem Text.&lt;/li>
&lt;li>Jetzt haben die Bereiche und die einzelnen Verweise das gleiche Format. Also verbinden wir sie ebenfalls mit &lt;code>join(&amp;quot;,&amp;quot;)&lt;/code>.&lt;/li>
&lt;li>Den verbundenen Text trennen wir anschließend wieder mit &lt;code>,&lt;/code> in eine Liste mit einzelnen Verweisen und wandeln die einzelnen Verweise &lt;code>v&lt;/code> mit &lt;code>toNumber()&lt;/code> in Zahlen um.&lt;/li>
&lt;li>Da wir nun eine Liste mit Zahlen haben, können wir mit &lt;code>uniques()&lt;/code> die doppelten Verweise entfernen und sie mit &lt;code>sort()&lt;/code> sortieren.&lt;/li>
&lt;li>Die bereinigte Liste wandeln wir mit &lt;code>join(&amp;quot;, &amp;quot;)&lt;/code> anschließend wieder in einen Text um.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">forEach&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">forEach&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/,\s+/&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">with&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/–|\-/&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">forRange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">v2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">toNumber&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="nx">v2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">toNumber&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;,&amp;#34;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;,&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/,/&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">toNumber&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">uniques&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">sort&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;, &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="spalte-name-1">Spalte Name&lt;/h4>
&lt;p>Diese Spalte bearbeiten wir als letzte, da wir ansonsten die &amp;ldquo;record&amp;rdquo; Struktur verloren hätten.
Die &amp;ldquo;record&amp;rdquo; Struktur haben wir in den vorherigen Schritten benötigt, um die Jahre und Verweise in einer Zeile zusammenzufassen.&lt;/p>
&lt;p>Wir wollen die Spalte Name in Vorname, Nachname und Titel trennen.
Das erleichtert uns das Überführen in andere Formate zum Beispiel für den Abgleich mit der GND oder das Umwandeln in ein Deskriptorenformat.
Dafür trennen wir die Spalte Name via &amp;ldquo;Name&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Split into several columns&amp;hellip;&amp;rdquo; in drei Spalten am Trennzeichen &lt;code>,&lt;/code> auf und lassen sie auch gleich entfernen.
Die entsprechenden Einstellungen sind in Abbildung 13 gezeigt.&lt;/p>
&lt;figure id="figure-dialog-zum-aufsplitten-von-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Aufsplitten von Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-column-name_hu894663371f90b460a688eefaf20992fa_15393_a6180ff96d4f3374acfdc708b3abc96e.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-column-name_hu894663371f90b460a688eefaf20992fa_15393_d3017a1ee830c862c8bab71926fc3b92.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-column-name_hu894663371f90b460a688eefaf20992fa_15393_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-column-name_hu894663371f90b460a688eefaf20992fa_15393_a6180ff96d4f3374acfdc708b3abc96e.webp"
width="593"
height="317"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Aufsplitten von Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Die Daten sind nun sauber aufgetrennt und können zur weiteren Verarbeitung verwendet werden.
Das Ergebnis ist in Abbildung 14 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-aufgeräumten-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der aufgeräumten Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-cleaned_hu463aff085d4174e8170a431698eacc5c_83868_4ff6b55f5b5ba19b5d9bfd1f305bb17a.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-cleaned_hu463aff085d4174e8170a431698eacc5c_83868_f8a707d7346a0e0e0f872a9ae41b7d2f.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-cleaned_hu463aff085d4174e8170a431698eacc5c_83868_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-cleaned_hu463aff085d4174e8170a431698eacc5c_83868_4ff6b55f5b5ba19b5d9bfd1f305bb17a.webp"
width="433"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der aufgeräumten Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h2 id="4-abgleich-mit-der-gemeinsamen-normdatei">4. Abgleich mit der Gemeinsamen Normdatei&lt;/h2>
&lt;div class="mermaid">---
title: Abgleich mit GND
config:
look: handDrawn
theme: neutral
---
flowchart LR
text[fas:fa-file-alt Text]
data[fas:fa-table Table]
gnd[fas:fa-database GND]
semantic[fas:fa-project-diagram Graph]
text --> data --> semantic
gnd --> semantic
&lt;/div>
&lt;p>Als Bonus gleichen wir die Prokuratoren mit der Gemeinsamen Normdatei (GND) ab.
Der Vorgang wird in OpenRefine &lt;a href="https://docs.openrefine.org/manual/reconciling" target="_blank" rel="noopener">Reconciling&lt;/a> genannt.
Dafür verwenden wir den &lt;a href="https://lobid.org/gnd/reconcile" target="_blank" rel="noopener">GND Reconciliation Service von lobid&lt;/a>.
Die Verwendung ist in einem &lt;a href="https://blog.lobid.org/2018/08/27/openrefine.html" target="_blank" rel="noopener">lobid Blogeintrag&lt;/a> ausführlich erklärt.&lt;/p>
&lt;p>Bei uns hat sich das folgende Vorgehen bewährt.&lt;/p>
&lt;p>Zuerst erzeugen wir via &amp;ldquo;Nachname&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit column&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join columns&amp;hellip;&amp;rdquo; eine neue Spalte Name, wo wir die Namensstruktur &amp;ldquo;Nachname, Vorname&amp;rdquo; der GND übernehmen. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>
Anschließend können wir via &amp;ldquo;Name&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Reconcile&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Start reconciling&amp;rdquo; den Vorgang starten.&lt;/p>
&lt;p>Falls noch nicht geschehen, den &amp;ldquo;lobid gnd service&amp;rdquo; via &amp;ldquo;Add Standard Service&amp;hellip;&amp;rdquo; mit der URL &lt;code>https://lobid.org/gnd/reconcile&lt;/code> hinzufügen und auswählen.&lt;/p>
&lt;p>Die entsprechenden Einstellungen für den Abgleichvorgang sind in Abbildung 15 abgebildet.
Wir fügen den Titel als separate Spalte hinzu, da wir dadurch bessere Ergebnisse erzielen konnten.
Leider können wir die (Wirkungs-)Jahre nicht berücksichtigen, da es keine kleiner/größer Operation für den &amp;ldquo;Reconciliation Service&amp;rdquo; gibt.&lt;/p>
&lt;figure id="figure-dialog-zum-abgleich-der-daten-mit-dem-lobid-gnd-service">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Abgleich der Daten mit dem &amp;#39;lobid gnd service&amp;#39;." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-reconciling_hu65f1cead5469c2f390a184a0aa06890a_31389_6fe0942761dbfe137f3afb91b3b90f91.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-reconciling_hu65f1cead5469c2f390a184a0aa06890a_31389_52b33c06393eb5fcc169f76fb4bcee6f.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-reconciling_hu65f1cead5469c2f390a184a0aa06890a_31389_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-reconciling_hu65f1cead5469c2f390a184a0aa06890a_31389_6fe0942761dbfe137f3afb91b3b90f91.webp"
width="760"
height="508"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Abgleich der Daten mit dem &amp;rsquo;lobid gnd service'.
&lt;/figcaption>&lt;/figure>
&lt;div class="alert alert-warning">
&lt;div>
Beim &amp;ldquo;reconciling&amp;rdquo; werden die Inhalte der ausgewählten Spalten an einen Webservice übertragen!
Sollte das nicht gewünscht sein, ist es auch möglich einen &lt;a href="https://docs.openrefine.org/manual/reconciling#sources" target="_blank" rel="noopener">lokalen &amp;ldquo;reconciliation services&amp;rdquo; einzurichten&lt;/a>.
&lt;/div>
&lt;/div>
&lt;p>Das Ergebnis ist in Abbildung 16 gezeigt.
Jetzt können mit einer Mischung aus Heuristik (zum Beispiel alle Treffer mit Übereinstimmung von mehr als 95 % automatisch übernehmen) und manueller Prüfung die einzelnen Personen verknüpft werden.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-abzugleichenden-daten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der abzugleichenden Daten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling_hu793d3893f9916509064db87505e42eac_60998_2d92aa2f705b1d471c46593b3451f1cb.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling_hu793d3893f9916509064db87505e42eac_60998_906788d58e206443d83af025a5b42261.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling_hu793d3893f9916509064db87505e42eac_60998_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling_hu793d3893f9916509064db87505e42eac_60998_2d92aa2f705b1d471c46593b3451f1cb.webp"
width="760"
height="674"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der abzugleichenden Daten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Anschließend wollen wir die GND-ID als zusätzliche Spalte in unserem Datensatz haben.
Das funktioniert über &amp;ldquo;Name&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit columns&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Add columns from reconciled values&amp;hellip;&amp;rdquo;, wo wir die GND-ID wie in dem in Abbildung 17 dargestellten Dialog auswählen können.&lt;/p>
&lt;figure id="figure-dialog-zum-auswählen-zusätzlicher-spalten-von-abgeglichenen-daten">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Auswählen zusätzlicher Spalten von abgeglichenen Daten." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-add-reconciled-values_hud22c0c49ded872e458cd53d27161c8bc_42820_d83127f15f475b64d5e1f8fbf97918bf.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-add-reconciled-values_hud22c0c49ded872e458cd53d27161c8bc_42820_338758e2eb8cc7252e2400a01c6ffc57.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-add-reconciled-values_hud22c0c49ded872e458cd53d27161c8bc_42820_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-add-reconciled-values_hud22c0c49ded872e458cd53d27161c8bc_42820_d83127f15f475b64d5e1f8fbf97918bf.webp"
width="760"
height="562"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Auswählen zusätzlicher Spalten von abgeglichenen Daten.
&lt;/figcaption>&lt;/figure>
&lt;p>Wir konnten 18 der 37 Prokuratoren aus unserem Datensatz in der GND identifizieren und verknüpfen.
Das Ergebnis ist in Abbildung 18 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-abgeglichenen-daten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der abgeglichenen Daten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling-finished_hu69702fd179a6954bc1dbe11caa8f1ddd_84094_fe3a14533460e500c4e185162eede35b.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling-finished_hu69702fd179a6954bc1dbe11caa8f1ddd_84094_7576ed1a9417270918eb1447b1e3f13d.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling-finished_hu69702fd179a6954bc1dbe11caa8f1ddd_84094_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling-finished_hu69702fd179a6954bc1dbe11caa8f1ddd_84094_fe3a14533460e500c4e185162eede35b.webp"
width="760"
height="527"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der abgeglichenen Daten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h2 id="5-umwandlung-in-deskriptorenformat">5. Umwandlung in Deskriptorenformat&lt;/h2>
&lt;p>Aus den einzelnen Datenbestandteilen können wir nun einen Deskriptor für unser AFIS zusammensetzen.
Dafür gehen wir zu einer beliebigen Spalte, um von dort aus mit einer &amp;ldquo;expression&amp;rdquo; eine neue Spalte Deskriptor im Format &lt;code>Nachname, Vorname Titel; Prokurator am Reichskammergericht {Wirkungsjahre} | {Optionale GND-ID}&lt;/code> zu erzeugen. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Nachname&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;, &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Vorname&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34; &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Titel&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;; Prokurator am Reichskammergericht &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Jahre&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">+&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">isNonBlank&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;GND-Nummer&amp;#34;&lt;/span>&lt;span class="p">]),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34; | &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;GND-Nummer&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Das Endergebnis ist in Abbildung 19 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-umgewandelten-und-abgeglichenen-daten-mit-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der umgewandelten und abgeglichenen Daten mit OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-finished_hu29bcaf6f7a4df5698297eae91e3ec768_92027_5450e0a3e5e5dbca8bc688f9c2d566d4.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-finished_hu29bcaf6f7a4df5698297eae91e3ec768_92027_de83b705a2b7158d2ffab4062fb2ed45.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-finished_hu29bcaf6f7a4df5698297eae91e3ec768_92027_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-finished_hu29bcaf6f7a4df5698297eae91e3ec768_92027_5450e0a3e5e5dbca8bc688f9c2d566d4.webp"
width="760"
height="452"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der umgewandelten und abgeglichenen Daten mit OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;blockquote>
&lt;p>💾 Die einzelnen Arbeitsschritte im OpenRefine Format:&lt;/p>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-wertheim-openrefine-prokuratoren.json" target="_blank">
&lt;i class="fas fa-file-archive pr-1 fa-fw">&lt;/i>Index Prokuratoren Akten RKG Band 57 - Wertheim als OpenRefine Arbeitsschritte&lt;/a>
.
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;p>Wir haben mit OpenRefine den Prokuratoren Index eines Findbuchs zu Akten des Reichskammergerichts aus einem zweispaltigen Layout in ein einspaltiges Layout überführt, den Datensatz aufbereitet und die einzelnen Prokuratoren mit der GND abgeglichen.&lt;/p>
&lt;p>Die Operationen zum Aufräumen der Daten (Jahre und Verweise) waren diesmal komplex, lassen sich jedoch auf ähnliche Probleme übertragen.&lt;/p>
&lt;p>Es bleibt die Erkenntnis, dass der Abgleich von Personen mit dem &amp;ldquo;Reconciliation Service&amp;rdquo; von lobid deutlich komfortabler wäre, wenn es möglich wäre eine zeitliche Einschränkung der Lebens- und Wirkungsdaten vorzunehmen. &lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Die Zuordnung der Daten erfolgt über den &amp;ldquo;Reconciliation Service&amp;rdquo;. Manche verwenden Verfahren, bei denen eine Übereinstimmung im Format relevant ist und zu besseren Ergebnissen führt. Andere verwenden Verfahren, bei denen die Reihenfolge der Suchbegriffe komplett ignoriert wird.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Uns ist gegen Ende aufgefallen, dass wir noch überflüssige Leerzeichen in den einzelnen Spalten haben. Anstatt sie im Deskriptor mit &lt;code>trim()&lt;/code> zu entfernen, wäre es sinnvoller gewesen sie vorher mit &amp;ldquo;All&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Trim leading and trailing whitespace&amp;rdquo; zu entfernen.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:3">
&lt;p>&lt;strong>Update April 2022&lt;/strong>: Durch ein Update in dem lobid GND API für OpenRefine kann nun eine zeitliche Einschränkung beim Reconciliation vorgenommen werden. Details dazu finden sich unter &lt;a href="https://github.com/hbz/lobid-gnd/issues/304" target="_blank" rel="noopener">Using range query parameter via OpenRefine Reconciliation&lt;/a> auf GitHub und unter &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-fortgeschrittene/15-erweiterter-gnd-abgleich-mit-lobid/">Erweiterter GND Abgleich mit lobid&lt;/a> auf unserem Blog.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Erste Experimente mit der GND</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/</link><pubDate>Tue, 29 Jun 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/</guid><description>&lt;p>Die &lt;em>Gemeinsame Normdatei&lt;/em> (GND) enthält unter anderem semantische Daten zu Personen und Orten.
In diesem Beitrag verwenden wir &lt;em>SPARQL&lt;/em> um die Daten und die Ontologie dahinter besser kennen zu lernen.&lt;/p>
&lt;p>Wir versuchen mit der GND die folgende Frage zu beantworten:&lt;/p>
&lt;blockquote>
&lt;p>Welche Berufe gab es Nürnberg im 17. Jahrhundert.&lt;/p>
&lt;/blockquote>
&lt;p>Zur Beantwortung dieser Frage verwenden wir &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/">unseren lokalen Apache Jena Server&lt;/a>.
Die SPARQL-Anfragen können entweder in der Web GUI von Apache Jena ausgeführt werden, oder mit einer der vielen SPARQL-Clients&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.&lt;/p>
&lt;h2 id="lade-beispielperson">Lade Beispielperson&lt;/h2>
&lt;p>In der &lt;a href="https://d-nb.info/standards/elementset/gnd" target="_blank" rel="noopener">GND Ontology&lt;/a> sind einige Beispiel &lt;em>Entities&lt;/em> genannt.
Wir laden hier das Beispiel für eine &lt;em>Individualisierte Person&lt;/em> der &lt;em>GND ID&lt;/em> &lt;code>118514091&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">118514091&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>p&lt;/th>
&lt;th>o&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" target="_blank" rel="noopener">http://www.w3.org/1999/02/22-rdf-syntax-ns#type&lt;/a>&lt;/td>
&lt;td>gndo:DifferentiatedPerson&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="http://www.w3.org/2002/07/owl#sameAs" target="_blank" rel="noopener">http://www.w3.org/2002/07/owl#sameAs&lt;/a>&lt;/td>
&lt;td>&lt;a href="http://www.wikidata.org/entity/Q5383" target="_blank" rel="noopener">http://www.wikidata.org/entity/Q5383&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:gndIdentifier&lt;/td>
&lt;td>118514091&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:preferredNameForThePerson&lt;/td>
&lt;td>Bowie, David&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:biographicalOrHistoricalInformation&lt;/td>
&lt;td>spielt zahlreiche Instrumente&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:homepage&lt;/td>
&lt;td>&lt;a href="http://www.davidbowie.com" target="_blank" rel="noopener">http://www.davidbowie.com&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:placeOfBirth&lt;/td>
&lt;td>gnd:4074335-4&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:placeOfDeath&lt;/td>
&lt;td>gnd:4042011-5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:dateOfBirth&lt;/td>
&lt;td>1947-01-08&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:dateOfDeath&lt;/td>
&lt;td>2016-01-10&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4040841-3&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4032009-1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4052154-0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4124099-6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4167564-2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:7628944-8&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&amp;hellip;&lt;/td>
&lt;td>&amp;hellip;&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Die Anzahl der Trippel wurde aus Darstellungsgründen gekürzt.
Bei der Person handelt es sich um &lt;em>David Bowie&lt;/em>.
Wir erhalten unter anderem weitere Verweise auf andere Graphen mit Informationen über &lt;em>David Bowie&lt;/em>, persönliche Daten über ihn, sowie eine Liste in der &lt;em>GND&lt;/em> definierter &lt;em>Berufe&lt;/em> und &lt;em>Tätigkeiten&lt;/em>, die er ausgeübt hat.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-von-david-bowie">Berufe und Tätigkeiten von David Bowie&lt;/h2>
&lt;p>Als Nächstes suchen wir die Berufe und Tätigkeiten von &lt;em>David Bowie&lt;/em> und berücksichtigen dabei auch alternativen Schreibweisen und Bezeichnungen der Berufe.
Dafür verwenden wir die Verbindung &lt;a href="https://d-nb.info/standards/elementset/gnd#professionOrOccupation" target="_blank" rel="noopener">professionOrOccupation&lt;/a>.
Alternativ gibt es die Verbindung &lt;a href="https://d-nb.info/standards/elementset/gnd#professionOrOccupationAsLiteral" target="_blank" rel="noopener">professionOrOccupationAsLiteral&lt;/a>, die in unseren Tests aber einige fehlerhaft geparste Daten beinhaltete (Zahlen, Buchstaben, &amp;hellip;) oder Zusatzinformationen lieferte (z.B. Zeitraum in der eine Tätigkeit ausgeübt wurde).
Der Beruf ist in der &lt;em>GND&lt;/em> als &lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeading" target="_blank" rel="noopener">Schlagwort&lt;/a> (engl. &lt;em>subject heading&lt;/em>) hinterlegt.
Daher holen wir uns für das Schlagwort die bevorzugte Bezeichnung und alternative Bezeichnungen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">118514091&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Musiker, Musikschaffender, Komponist, Tonsetzer, Schauspieler, Darsteller (Schauspieler), Sänger, Konzertsänger, Librettist, Textdichter (Librettist), Bandleader, ld&lt;/p>
&lt;/blockquote>
&lt;p>Zur Übersichtlichkeit haben wir an dieser Stelle eine Listendarstellung für die Ergebnisse gewählt.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-in-nürnberg-fixiert">Berufe und Tätigkeiten in Nürnberg (fixiert)&lt;/h2>
&lt;p>Nachdem wir herausgefunden haben, wie wir die Berufe und Tätigkeiten einer Person aus der GND auslesen können,
verknüpfen wir diese Information mit einem Ort. Konkret mit dem Ort Nürnberg, welches die &lt;em>GND ID&lt;/em> &lt;code>4042742-0&lt;/code> hat.
Hierfür suchen wir zuerst nach Personen, die über eine Auswahl von Eigenschaften (z.B. Geburtsort) mit Nürnberg verknüpft sind
und suchen dann nach deren Berufsbezeichnungen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">placeOfBirth&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">placeOfDeath&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">placeOfActivity&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">placeOfExile&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">characteristicPlace&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4042742-0&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">LIMIT&lt;/span> &lt;span class="mi">20&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Künstler, Bildender Künstler, Künstlertum, Kunstschaffender, Grafiker, Graphiker, Kupferstecher, Maler, Mathematiker, Diplommathematiker, Zeichner, Musiker, Musikschaffender, Dirigent, Orchesterleiter, Chorleiter, Chorregent, Chordirektor, Chormeister, Chordirigent&lt;/p>
&lt;/blockquote>
&lt;p>Um eine übersichtliche Ergebnismenge zu erhalten, haben wir die Anzahl der Ergebnisse auf 20 limitiert.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-in-nürnberg-frei">Berufe und Tätigkeiten in Nürnberg (frei)&lt;/h2>
&lt;p>In der letzten Anfrage haben wir die Art der Verknüpfung von Personen mit dem Ort Nürnberg fixiert.
Dazu gehört ein intensives Studieren der GND Ontoloy.&lt;/p>
&lt;p>Es geht auch einfacher. In der folgenden Anfrage suchen wir nach Personen,
die in irgendeiner Beziehung zu Nürnberg stehen (&lt;code>?person ?p gnd:4042742-0&lt;/code>)
und suchen dann die Berufsbezeichnungen.&lt;/p>
&lt;p>Theoretisch erhöhen wir dadurch die Trefferquote, verringern aber die Genauigkeit.
Praktisch spielte das in unseren Experimenten keine Rolle.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?person&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4042742-0&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">LIMIT&lt;/span> &lt;span class="mi">20&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Künstler, Bildender Künstler, Künstlertum, Kunstschaffender, Grafiker, Graphiker, Kupferstecher, Maler, Mathematiker, Diplommathematiker, Zeichner, Physiker, Astronom, Astronomen, Kartograf, Kartograph, Pfarrer, Pastor, Evangelischer Theologe, Theologe / Evangelische Kirche&lt;/p>
&lt;/blockquote>
&lt;p>Die Ergebnisse dieser Vorschau unterscheiden sich von der letzten Abfrage, da der Graph in einer anderen Reihenfolge traversiert wird.
Vergleicht man die Gesamtmenge der Ergebnisse, dann unterscheiden sie sich nur in der Reihenfolge der Elemente.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-in-nürnberg-im-17-jahrhundert">Berufe und Tätigkeiten in Nürnberg im 17. Jahrhundert&lt;/h2>
&lt;p>Um die Anfrage aus dem letzten Beispiel auf das 17. Jahrhundert einzuschränken,
fügen wir einen Filter für das Geburtsdatum und das Sterbedatum der Personen hinzu.&lt;/p>
&lt;p>Der Vollständigkeit halber, haben wir &lt;code>gndo:dateOfBirth&lt;/code> und &lt;code>gndo:dateOfDeath&lt;/code> optional gesetzt.
Das verhindert, dass wir ungewollt Personen filtern, bei denen eines der beiden Daten fehlt.
Daher brauchen wir noch ein extra Filterkriterium, welches das Geburtsdatum nach unten und das Todesdatum nach oben beschränkt&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2001/XMLSchema#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?person&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4042742-0&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">dateOfBirth&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">dateOfDeath&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?birthDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?deathDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?birthDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="s">&amp;#34;1501-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1701-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?deathDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="s">&amp;#34;1601-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1801-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">LIMIT&lt;/span> &lt;span class="mi">20&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Kupferstecher, Zeichner, Künstler, Bildender Künstler, Künstlertum, Kunstschaffender, Maler, Radierer, Buchhändler, Buchführer, Drucker, Buchdrucker, Verleger, Verlagsbuchhändler, Verlagsleiter, Musikverleger, Pfarrer, Pastor, Jurist, Rechtswissenschaftler&lt;/p>
&lt;/blockquote>
&lt;h2 id="methodische-probleme">Methodische Probleme&lt;/h2>
&lt;p>Bevor wir mit diesen Ergebnissen versuchen spezifische Aussagen zu treffen, sollten wir zuerst einige methodische Probleme betrachten.&lt;/p>
&lt;h3 id="-beruf-und--ort">💼 Beruf und 🏠 Ort&lt;/h3>
&lt;p>Die Verknüpfung von Beruf und Ort lässt sich in der GND nur über eine 👤 Person herstellen.
Mit den vorliegenden Daten kann jedoch nicht festgestellt werden, ob die 👤 Person den Beruf (oder die Tätigkeit) auch an diesem Ort ausgeübt hat.
Zum Beispiel wurde Albert Einstein in Ulm geboren, hat den Beruf des Physikers dort jedoch nie ausgeübt.&lt;/p>
&lt;h3 id="-zeit-und--ort">📅 Zeit und 🏠 Ort&lt;/h3>
&lt;p>Mit dem Filter auf Geburtsdatum und Sterbedatum haben wir zwar eine grobe Einschränkung getroffen.
Es ist jedoch nicht zu bestimmen, ob eine 👤 Person mit Sterbedatum 1601 ihren Beruf im 17. Jahrhundert noch ausgeübt hat.
Es ist sicherlich auszuschließen, dass die meisten 👥 Personen mit einem Geburtsdatum von 1699 ihren Beruf im 17. Jahrhundert schon ausgeübt haben.&lt;/p>
&lt;h3 id="-datengrundlage">📜 Datengrundlage&lt;/h3>
&lt;p>Die GND beinhaltet (noch) keinen repräsentative Darstellung der Gesamtbevölkerung.
Es gibt einen starken Bias in Richtung 👥 Personen, die schriftliche Erzeugnisse produzierten, oder künstlerisch tätig waren.
Das wird im folgenden Beispiel deutlich.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-in-nürnberg-im-17-jahrhundert-mit-häufigkeit">Berufe und Tätigkeiten in Nürnberg im 17. Jahrhundert mit Häufigkeit&lt;/h2>
&lt;p>Anstatt wie zuvor alle Berufe und Tätigkeiten mit alternativen Bezeichnungen zu sammeln, schreiben wir hier eine Auswertung, die die Häufigkeit der einzelnen Berufe und Tätigkeiten bestimmt. Die alternativen Bezeichnungen, werden in einer separaten Spalte der Ausgabetabelle gesammelt.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2001/XMLSchema#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">COUNT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?job&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">AS&lt;/span> &lt;span class="nv">?count&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">GROUP_CONCAT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?jobAlternative&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nf">SEPARATOR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;, &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">AS&lt;/span> &lt;span class="nv">?alternatives&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?person&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4042742-0&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?jobAlternative&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">dateOfBirth&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">dateOfDeath&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?birthDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?deathDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?birthDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="s">&amp;#34;1501-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1701-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?deathDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="s">&amp;#34;1601-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1801-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">GROUP BY&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">ORDER BY&lt;/span> &lt;span class="k">DESC&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>job&lt;/th>
&lt;th>count&lt;/th>
&lt;th>alternatives&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Kaufmann&lt;/td>
&lt;td>270&lt;/td>
&lt;td>Kaufleute, Fernkaufmann, Fernhandelskaufmann, Großkaufmann, Handelsmann&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Jurist&lt;/td>
&lt;td>270&lt;/td>
&lt;td>Rechtswissenschaftler, Juristischer Beruf, Juristen&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Patriziat&lt;/td>
&lt;td>164&lt;/td>
&lt;td>Patrizier, Stadtadel&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Schriftsteller&lt;/td>
&lt;td>156&lt;/td>
&lt;td>Dichter, Literaturproduzent, Literat, Homme de lettres&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hochschullehrer&lt;/td>
&lt;td>120&lt;/td>
&lt;td>Professor (Hochschule), Lehrkörper / Hochschule, Lehrpersonal / Hochschule, Universitätsprofessor, Hochschulprofessor&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Verleger&lt;/td>
&lt;td>104&lt;/td>
&lt;td>Verlagsbuchhändler, Verlagsleiter&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Pfarrer&lt;/td>
&lt;td>94&lt;/td>
&lt;td>Pastor&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Arzt&lt;/td>
&lt;td>76&lt;/td>
&lt;td>Mediziner, Ärzte&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Künstler&lt;/td>
&lt;td>72&lt;/td>
&lt;td>Bildender Künstler, Künstlertum, Kunstschaffender&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Unternehmer&lt;/td>
&lt;td>57&lt;/td>
&lt;td>Industrieller, Fabrikant, Entrepreneur&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&amp;hellip;&lt;/td>
&lt;td>&amp;hellip;&lt;/td>
&lt;td>&amp;hellip;&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Zur Übersichtlichkeit haben wir die Tabelle auf 10 Einträge reduziert, sie kann als&lt;/p>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/nuernberg-jobs-1700.csv">
&lt;i class="fas fa-file-csv pr-1 fa-fw">&lt;/i>CSV komplett&lt;/a>
heruntergeladen werden.
&lt;figure id="figure-silhouette-der-kaiserburg-in-nürnberg-mit-nach-häufigkeit-gewichteter-wortwolke-der-in-der-gnd-gelisteten-berufe-und-tätigkeiten-im-17-jahrhundert-mit-einer-verbindung-zu-nürnberg">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Silhouette der Kaiserburg in Nürnberg, mit nach Häufigkeit gewichteter Wortwolke, der in der GND gelisteten Berufe und Tätigkeiten im 17. Jahrhundert, mit einer Verbindung zu Nürnberg." srcset="
/post/2021-06-erste-experimente-mit-der-gnd/featured_hu9de53fc8c4372273836a8ef7220996a7_256456_ab851dcc72f12f70d2a42e79273a6701.webp 400w,
/post/2021-06-erste-experimente-mit-der-gnd/featured_hu9de53fc8c4372273836a8ef7220996a7_256456_657d5e2dc1cc3c72e35f578ecc54008b.webp 760w,
/post/2021-06-erste-experimente-mit-der-gnd/featured_hu9de53fc8c4372273836a8ef7220996a7_256456_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/featured_hu9de53fc8c4372273836a8ef7220996a7_256456_ab851dcc72f12f70d2a42e79273a6701.webp"
width="760"
height="505"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Silhouette der Kaiserburg in Nürnberg, mit nach Häufigkeit gewichteter Wortwolke, der in der GND gelisteten Berufe und Tätigkeiten im 17. Jahrhundert, mit einer Verbindung zu Nürnberg.
&lt;/figcaption>&lt;/figure>
&lt;p>Wenn man einen Blick auf diese Auswertung wirft, wird schnell klar, dass dies weder eine repräsentative, noch eine vollständige Darstellung der Berufe und Tätigkeiten im 17. Jahrhundert in Nürnberg darstellt.
Für unseren Streifzug durch die Daten der GND war die Fragestellung jedoch sehr hilfreich.
Und auch im Archivalltag haben wir immer wieder Rechercheaufgaben, in denen konkret nach Personen mit einem bestimmten Beruf gesucht werden, die in einem bestimmten Zeitraum in einer Stadt gelebt haben.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Wir verwenden &lt;a href="https://pypi.org/project/sparql-dataframe/" target="_blank" rel="noopener">sparql_dataframe&lt;/a>.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Die 100 Jahre sind etwas großzügig, wir erhöhen damit die Trefferquote und verringern die Genauigkeit.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>GND in lokale Datenbank laden</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/</link><pubDate>Tue, 22 Jun 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/</guid><description>&lt;p>Normdaten sind hilfreiche und notwendige Datenquellen zum Aufbereiten, Erschließen und Finden von Archivmaterial.
In diesem Beitrag laden wir die &lt;em>Gemeinsame Normdatei&lt;/em> (GND) zur Weiterverarbeitung in einen lokalen &lt;em>Triple Store&lt;/em> von &lt;em>Apache Jena&lt;/em>.&lt;/p>
&lt;figure class="float-right" id="figure-gnd-logohttpswwwdnbdegnd-von-derdnb-unter-cc-by-sa-lizenzhttpscreativecommonsorglicensesby-sa40">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="[GND Logo](https://www.dnb.de/gnd) von der
DNB unter [CC BY-SA Lizenz](https://creativecommons.org/licenses/by-sa/4.0/)." srcset="
/post/2021-06-gnd-in-lokale-datenbank-laden/gnd_hubf082f7bbdaac622ea39cd2aed6726e1_38178_89e8517eb08384fb4e1deb9cb8ec3e07.webp 400w,
/post/2021-06-gnd-in-lokale-datenbank-laden/gnd_hubf082f7bbdaac622ea39cd2aed6726e1_38178_1b5aa3fd08c0facd7faebc94c2e45e69.webp 760w,
/post/2021-06-gnd-in-lokale-datenbank-laden/gnd_hubf082f7bbdaac622ea39cd2aed6726e1_38178_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/gnd_hubf082f7bbdaac622ea39cd2aed6726e1_38178_89e8517eb08384fb4e1deb9cb8ec3e07.webp"
width="200"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
&lt;a href="https://www.dnb.de/gnd" target="_blank" rel="noopener">GND Logo&lt;/a> von der&lt;br>DNB unter &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener">CC BY-SA Lizenz&lt;/a>.
&lt;/figcaption>&lt;/figure>
&lt;h2 id="über-die-gemeinsame-normdatei">Über die Gemeinsame Normdatei&lt;/h2>
&lt;p>Die &lt;a href="https://www.dnb.de/gnd" target="_blank" rel="noopener">GND&lt;/a> ist ein von der Deutschen National Bibliothek (DNB) betreuter Dienst zur kooperativen Nutzung von Normdaten.
Im Archivbereich interessieren wir uns insbesondere für eindeutig zu identifizierende Personen, Orte und Dinge.&lt;/p>
&lt;p>Die GND liegt im Format &lt;a href="https://www.loc.gov/marc/" target="_blank" rel="noopener">MARC 21&lt;/a> und in &lt;a href="https://www.w3.org/RDF/" target="_blank" rel="noopener">RDF&lt;/a> vor und kann über unterschiedliche Schnittstellen abgerufen werden.
Wir konzentrieren uns hier auf die &lt;a href="https://www.dnb.de/DE/Professionell/Metadatendienste/Datenbezug/LDS/lds_node.html" target="_blank" rel="noopener">GND Daten im RDF Format&lt;/a>, da wir diese effektiver durchsuchen können.
Zum heutigen Stand gibt es von Seiten der DNB keinen SPARQL Endpoint für den Zugriff auf die Daten&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.
Daher spielen wir einen Daten Dump in eine lokale Datenbank ein.
Die Verwendung der Daten in einem Memory basierten Graphen z.B. mit &lt;a href="https://rdflib.readthedocs.io" target="_blank" rel="noopener">RDFlib&lt;/a> funktioniert auf Grund der Größe des Graphen nicht.&lt;/p>
&lt;h2 id="datenbank-apache-jena-fuseki">Datenbank: Apache Jena Fuseki&lt;/h2>
&lt;figure class="float-right" id="figure-apache-jena-logohttpsjenaapacheorg-von-derapache-software-foundation">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="[Apache Jena Logo](https://jena.apache.org/) von der
Apache® Software Foundation." srcset="
/post/2021-06-gnd-in-lokale-datenbank-laden/jena_hu2356985c631d3f3d54e2729962d749aa_49736_9d3ca77f0e108edf462976f508cce2a0.webp 400w,
/post/2021-06-gnd-in-lokale-datenbank-laden/jena_hu2356985c631d3f3d54e2729962d749aa_49736_097e5ee1d49ca7c0cf8db86174ba32cd.webp 760w,
/post/2021-06-gnd-in-lokale-datenbank-laden/jena_hu2356985c631d3f3d54e2729962d749aa_49736_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/jena_hu2356985c631d3f3d54e2729962d749aa_49736_9d3ca77f0e108edf462976f508cce2a0.webp"
width="200"
height="525"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
&lt;a href="https://jena.apache.org/" target="_blank" rel="noopener">Apache Jena Logo&lt;/a> von der&lt;br>Apache&lt;sup>®&lt;/sup> Software Foundation.
&lt;/figcaption>&lt;/figure>
&lt;p>Als lokale Datenbank für unser Experiment haben wir uns für &lt;a href="https://jena.apache.org/" target="_blank" rel="noopener">Apache Jena&lt;/a> entschieden.
Das Projekt vereint einen Triple Store (TDB) zum Speichern und Verwalten der RDF Triple der GND,
eine Implementierung von &lt;a href="https://www.w3.org/TR/sparql11-overview/" target="_blank" rel="noopener">SPARQL&lt;/a> namens ARQ, sowie einen SPARQL Endpoint mit Fuseki.
Zusätzlich gib es auch noch Tools zum Arbeiten mit RDF und &lt;a href="https://www.w3.org/OWL/" target="_blank" rel="noopener">OWL&lt;/a>, die wir erstmal nicht nutzen werden.
Da wir &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-wie-wir-docker-einsetzen/">gerne mit Docker arbeiten&lt;/a>,
es aber kein offizielles Docker Image des Apache Projektes gibt,
verwenden wir das Docker Image &lt;a href="https://hub.docker.com/r/stain/jena-fuseki" target="_blank" rel="noopener">stain/jena-fuseki&lt;/a> aus dem Docker Hub&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>.&lt;/p>
&lt;h2 id="einlesen-der-daten">Einlesen der Daten&lt;/h2>
&lt;div class="alert alert-note">
&lt;div>
Da das Einlesen der Daten mehrere Stunden dauern kann, empfehlen wir den Workflow zuerst mit einem kleineren Testdatensatz auszuführen.
&lt;/div>
&lt;/div>
&lt;p>Zum Einlesen haben wir uns die Datei &lt;code>authorities_lds.nt.gz&lt;/code> aus dem &lt;a href="https://data.dnb.de/opendata/" target="_blank" rel="noopener">DNB Data Dump&lt;/a> heruntergeladen&lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>.&lt;/p>
&lt;p>Wir arbeiten mit der folgenden Ordnerstruktur:&lt;/p>
&lt;div class="mermaid">---
title: Ordnerstruktur
config:
look: handDrawn
theme: neutral
---
flowchart TD
subgraph data[far:fa-folder-open data]
fuseki[far:fa-folder fuseki]
fuseki_test[far:fa-folder fuseki_test]
gnd_triples[far:fa-folder gnd_triples]
test_triples[far:fa-folder test_triples]
end
root[far:fa-folder-open gnd_test] --> data
root --> README[far:fa-file README.md]
&lt;/div>
&lt;ul>
&lt;li>&lt;strong>README.md&lt;/strong>: Überblick über das Projekt und die Daten geben!&lt;/li>
&lt;li>&lt;strong>fuseki&lt;/strong>: Ordner zum Persistieren der Datenbank von Apache Jena.&lt;/li>
&lt;li>&lt;strong>fuseki_test&lt;/strong>: Ordner für den Test mit Apache Jena.&lt;/li>
&lt;li>&lt;strong>gnd_triples&lt;/strong>: Speicherort der &lt;code>.nt.gz&lt;/code> Datei.&lt;/li>
&lt;li>&lt;strong>test_triples&lt;/strong>: Speicherort von Testdateien im &lt;code>.ttl&lt;/code> Format.&lt;/li>
&lt;/ul>
&lt;h3 id="testdaten-einlesen">Testdaten einlesen&lt;/h3>
&lt;p>Als erstes starten wir einen Docker Container mit dem Namen &lt;code>fuseki&lt;/code>,
machen die Web GUI verfügbar über &lt;a href="http://localhost:8080" target="_blank" rel="noopener">http://localhost:8080&lt;/a>, setzen
das Administrator Passwort auf &lt;code>123123&lt;/code> und &lt;em>mounten&lt;/em> unsere Testordner in den Container&lt;sup id="fnref:4">&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref">4&lt;/a>&lt;/sup>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-name&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="n">fuseki&lt;/span> &lt;span class="n">-p&lt;/span> &lt;span class="mf">8080&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">3030&lt;/span> &lt;span class="n">-e&lt;/span> &lt;span class="n">ADMIN_PASSWORD&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="mf">123123&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\test_triples:/staging&amp;#34;&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\fuseki_test:/fuseki&amp;#34;&lt;/span> &lt;span class="n">stain&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="nb">jena-fuseki&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Den Docker Container lassen wir laufen und öffnen ein zweites Terminal (Shell, PowerShell, &amp;hellip;).
Von diesem aus können wir uns mit dem Container verbinden und den Einlesevorgang starten.
Hierfür gibt es zwei Varianten. In der ersten wird das bereitgestellte &lt;code>load.sh&lt;/code> Skript verwendet, welches auf &lt;code>tdbloader&lt;/code> verweist.
Wir verzichten darauf dem &lt;code>load.sh&lt;/code> Skript spezifische Dateien vorzugeben, sondern lesen alle kompatiblen Formate im &lt;code>fuseki_test&lt;/code> Ordner in die &lt;code>test&lt;/code> Datenbank ein.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">exec&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="n">fuseki&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">bash&lt;/span> &lt;span class="n">-c&lt;/span> &lt;span class="s1">&amp;#39;./load.sh test&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Abschließend wird der geladene Datensatz in der Web GUI angelegt. In dem folgenden Bildschirmfoto in Abbildung 1 wird ein &lt;code>TDB&lt;/code> Datensatz mit dem Namen &lt;code>test&lt;/code> angelegt. Hier ist der gleiche Bezeichner zu wählen, wie er auch beim Laden verwendet wurde.&lt;/p>
&lt;figure id="figure-hinzufügen-des-test-datensatzes-in-der-web-gui">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Hinzufügen des Test Datensatzes in der Web GUI." srcset="
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-test-dataset_hu7de0ec55cdf555c075315fa09a7828f7_31568_3ebcb8e78b5e65817acfcaa7832ab045.webp 400w,
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-test-dataset_hu7de0ec55cdf555c075315fa09a7828f7_31568_44ec608008c18bf6afac67dd2ee66eec.webp 760w,
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-test-dataset_hu7de0ec55cdf555c075315fa09a7828f7_31568_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-test-dataset_hu7de0ec55cdf555c075315fa09a7828f7_31568_3ebcb8e78b5e65817acfcaa7832ab045.webp"
width="760"
height="249"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Hinzufügen des Test Datensatzes in der Web GUI.
&lt;/figcaption>&lt;/figure>
&lt;p>Anschließend kann entweder in der Web GUI im Tab &lt;em>info&lt;/em> oder mit dem folgenden SPARQL-Befehl die Anzahl der eingelesenen Trippel bestimmt werden.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nf">COUNT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?s&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="alternative-mit-tdb2">Alternative mit TDB2&lt;/h4>
&lt;p>Alternativ kann auch der &lt;a href="https://jena.apache.org/documentation/tdb2/" target="_blank" rel="noopener">tdbloader2&lt;/a> verwendet werden. Hier werden explizit nur Dateien im &lt;code>*.ttl&lt;/code> Format eingelesen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">exec&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="n">fuseki&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">bash&lt;/span> &lt;span class="n">-c&lt;/span> &lt;span class="s1">&amp;#39;./tdbloader2 --loc=/fuseki/databases/test /staging/*.ttl&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In der Web GUI darauf achten, den Datensatz als &lt;code>TDB2&lt;/code> anzulegen.&lt;/p>
&lt;h3 id="gnd-einlesen">GND einlesen&lt;/h3>
&lt;p>Nach einem erfolgreichen Test lesen wir nun die komplette GND ein.
Wir haben uns für &lt;code>TDB2&lt;/code> entschieden, da wir planen den Datensatz länger zu verwenden. Das Einlesen benötigt mit 6 Stunden und 15 Minuten etwa eine Viertelstunde länger als mit der Vorgängerversion &lt;code>TDB&lt;/code>.&lt;/p>
&lt;h4 id="1-starten-des-containers-mit-daten-zum-einlesen">1. Starten des Containers mit Daten zum Einlesen&lt;/h4>
&lt;p>Der folgende Befehl startet einen Docker Container mit dem Verzeichnis der Daten zum Einlesen und einem Verzeichnis zum Speichern der Datenbank von Apache Jena.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-name&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="n">fuseki&lt;/span> &lt;span class="n">-p&lt;/span> &lt;span class="mf">8080&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">3030&lt;/span> &lt;span class="n">-e&lt;/span> &lt;span class="n">ADMIN_PASSWORD&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="mf">123123&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\gnd_triples:/staging&amp;#34;&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\fuseki:/fuseki&amp;#34;&lt;/span> &lt;span class="n">stain&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="nb">jena-fuseki&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="2-einlesen-der-daten-im-tdb2-format">2. Einlesen der Daten im &lt;code>TDB2&lt;/code> Format&lt;/h4>
&lt;p>In einem separaten Terminal starten wir den Einlesevorgang der GND Daten mit dem &lt;code>tdbloader2&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">exec&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="n">fuseki&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">bash&lt;/span> &lt;span class="n">-c&lt;/span> &lt;span class="s1">&amp;#39;./tdbloader2 --loc=/fuseki/databases/gnd /staging/*.nt.gz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="3-anlegen-des-datensatzes-in-der-web-gui">3. Anlegen des Datensatzes in der Web GUI&lt;/h4>
&lt;p>Nach dem erfolgreichen Einlesen legen wir den Datensatz in der Weg GUI an.
Hierbei achten wir darauf, den gleichen Bezeichner zu verwenden, wie beim Einlesen und als Format &lt;code>TDB2&lt;/code> zu wählen.&lt;/p>
&lt;figure id="figure-hinzufügen-des-gnd-datensatzes-in-der-web-gui">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Hinzufügen des GND Datensatzes in der Web GUI." srcset="
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-gnd-dataset_hu5d67e5c0519dade124681b5a02d949f1_31074_e44833b33d84e25ec3294609e448e6a8.webp 400w,
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-gnd-dataset_hu5d67e5c0519dade124681b5a02d949f1_31074_cc005c6d4dc61bb81a6064c541a09cb3.webp 760w,
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-gnd-dataset_hu5d67e5c0519dade124681b5a02d949f1_31074_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-gnd-dataset_hu5d67e5c0519dade124681b5a02d949f1_31074_e44833b33d84e25ec3294609e448e6a8.webp"
width="760"
height="249"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Hinzufügen des GND Datensatzes in der Web GUI.
&lt;/figcaption>&lt;/figure>
&lt;h4 id="4-exemplarisches-testen-der-eingelesenen-daten">4. Exemplarisches Testen der eingelesenen Daten&lt;/h4>
&lt;p>Anschließend testen wir exemplarisch, ob die Daten nutzbar sind.
Hierfür verwenden wir eine SPARQL Abfrage mit einem Standardbeispiel aus der &lt;a href="https://d-nb.info/standards/elementset/gnd" target="_blank" rel="noopener">GND Ontology&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/118514091&amp;gt;&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Falls zu diesem Zeitpunkt noch keine Ergebnisse angezeigt werden, den Container beenden und wie in Schritt 5 starten.&lt;/p>
&lt;h4 id="5-wiederverwendung-des-containers">5. Wiederverwendung des Containers&lt;/h4>
&lt;p>Um einen neuen Apache Jena Docker Container zu starten und die eingelesenen Daten wiederzuverwenden, kann der folgende Befehl verwendet werden.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-name&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="n">fuseki&lt;/span> &lt;span class="n">-p&lt;/span> &lt;span class="mf">8080&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">3030&lt;/span> &lt;span class="n">-e&lt;/span> &lt;span class="n">ADMIN_PASSWORD&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="mf">123123&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\fuseki:/fuseki&amp;#34;&lt;/span> &lt;span class="n">stain&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="nb">jena-fuseki&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="zusammenfassung-und-ausblick">Zusammenfassung und Ausblick&lt;/h2>
&lt;p>Zu Beginn war es etwas frustrierend, einen funktionierenden Workflow zum Einlesen der Daten in den Docker Container von Apache Jena aufzubauen.
Kleine Abweichungen der obigen Beschreibung oder der Reihenfolge sorgen dafür, dass der komplette Einlesevorgang neu gestartet werden muss.&lt;/p>
&lt;p>Die Einlesezeit wird sich auf anderen Systemen drastisch unterscheiden.
Das liegt unter anderem daran, dass wir bei unseren Tests die Dateien von einem Windows Dateisystem in ein Linux-Dateisystem im Docker Container eingelesen und dann wieder auf das Windows Dateisystem herausgeschrieben haben.&lt;/p>
&lt;p>Mit der Kombination aus Apache Jena, Docker und GND haben wir jetzt eine lokale Testdatenbank, mit der wir intensiv mit den Daten arbeiten können,
ohne durch Bandbreiten- oder API-Beschränkungen ausgebremst zu werden.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Alternativ gibt es den Dienst &lt;a href="https://lobid.org/gnd" target="_blank" rel="noopener">lobid&lt;/a> des hbz NRW.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Zum Zeitpunkt unseres Tests gab es mehrere Probleme, die mit &lt;a href="https://github.com/stain/jena-docker/pull/50" target="_blank" rel="noopener">stain/jena-docker#50&lt;/a> gefixt werden sollten.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:3">
&lt;p>Die Daten werden auch im für die Kompression optimierten &lt;a href="https://www.rdfhdt.org/" target="_blank" rel="noopener">HDT&lt;/a> Format angeboten, jedoch hätten wir dafür &lt;a href="https://www.rdfhdt.org/manual-of-hdt-integration-with-jena/" target="_blank" rel="noopener">Apache Jena für HDT anpassen&lt;/a> müssen.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:4">
&lt;p>Die Sicherheit des Passworts ist hier nicht relevant, da wir die Anwendung lokal auf unserem Rechner testen.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item></channel></rss>