Skip to content

Wikidata Matchingverfahren

Adrian edited this page Jul 18, 2018 · 72 revisions

Um wie hier beschrieben, Wikidata für die Ortsverschlagwortung in der NWBib benutzen zu können, müssen zunächst die in der NWBib enthaltenen Textstrings (derzeit in lobid im Feld "coverage" enthalten) auf Wikidata-Einträge gematcht werden. Auf dieser Wikiseite wird das dabei angewendete Verfahren sowie seine Ergebnisse beschrieben.

Übersicht: Textstrings nach Notation

Die folgende Übersicht stellt dar, zu welchen Notationen es überhaupt GSW gibt, wieviele das jeweils sind und welche distinkten Strings (GSW) vergeben sind.

Notation Content # Titel mit Notation # Titel mit zusätzlicher GSW enthaltene Textstrings n/a/m
99 Städte, Kreisfreie Städte, Gemeinden, Ortsteile plus teilweise Stadtbezirke und (leider auch andere wie z.B. Klöster etc.) 276139 276139 hier a
97 (Land)Kreise 14368 14429 hier a
96 Regierungsbezirke 1562 1565 hier a
74 Kleinere weltliche Territorien in Westfalen 534 515 hier m
72 Kleinere geistliche Territorien in Westfalen 41 39 "Hochstift Corvey" (38), "Höxter" (8), "Corvey" (2), "Herford (Reichsstift)" (1) m
54 Kleinere weltliche Territorien im Rheinland 130 109 hier m
52 Kleinere geistliche Territorien im Rheinland 51 37 "Stift Essen" (26), "Kloster Werden" (6), "Reichsabtei Kornelimünster" (4), "Reichsabtei Burtscheid" (2) m
37 Katholische Kirche. Dekanate 28 28 hier n
36 Katholische Kirche. Diözesen 1993 1969 hier a
35 Evangelische Kirche. Kirchenkreise 212 200 hier a
28 Eifel 2715 688 "Nordeifel" (389), "Hohes Venn" (130), "Monschauer Land" (76), "Rureifel" (52), "Kalkeifel (33), "Mechernicher Voreifel" (13), "Kalterherberg" (1), Eifel" (1) m
24 Niederrhein-Gebiet 6333 1259 hier
14 Sauerland 3173 512 hier
12 Weserbergland 1850 1469 hier
10 Westfälische Bucht 4521 4313 hier

Das Matching-Verfahren

Im hbz wurde für das Matching folgendes Verfahren entwickelt:

  1. Alle Verwaltungseinheiten in NRW werden per SPARQL mit dieser Query aus Wikidata abgezogen.
  2. Mit den Wikidata-Enträgen aus 1.) wird ein Elasticsearch-Index gebaut, in dem sich folgende Informationen wiederfinden: Wikidata-ID, Typ, Name und Aliasse des Eintrags (nur die deutschsprachigen), Geokoordinaten sowie der Name der übergeordneten Verwaltungseinheit. Ein Beispiel:
{
  "hits":{
    "total":1,
    "max_score":6.1295004,
    "hits":[
      {
        "_index":"geo_nwbib-20180626-0909",
        "_type":"wikidata-geo",
        "_id":"Q897382",
        "_score":6.1295004,
        "_source":{
          "spatial":{
            "id":"http://www.wikidata.org/entity/Q897382",
            "label":"Ehrenfeld",
            "geo":{
              "lat":50.9464,
              "lon":6.91833
            },
            "type":[
              "http://www.wikidata.org/entity/Q15632166"
            ]
          },
          "aliases":[
            {
              "language":"de",
              "value":"Köln/Ehrenfeld"
            },
            {
              "language":"de",
              "value":"Köln-Ehrenfeld"
            }
          ],
          "locatedIn":{
            "language":"de",
            "value":"Köln-Ehrenfeld"
          }
        }
      }
    ]
  }
}
  1. Beim Aufbau des lobid-Indexes wird der Suchindex aus 2.) mit den Orts-Texteinträgen aus der NWBib abgefragt, wobei die Suche für eine bestimmte Notation auf einen oder mehrere Wikidata-Klassen beschränkt wird (siehe https://git.io/fNsLq). Das erste Ergebnis wird – soweit es einen Score von > x hat – in die lobid Daten übernommen.

Gewichtung

Bei der schrittweisen Verbesserung des Verfahrens wurde die Gewichtung der einzelnen Felder angepasst. Momentan wird das Label etwa fünfmal so stark gewichtet wie variante Name, die wiederum doppelt so stark gewichtet sind wie das Label der übergeordneten Einheit (siehe die momentane ElasticSearch-Indexing-Konfiguration).

Ergebnis

Abdeckung

Mit diesem Matchingverfahren und einem Mindestscore wird von den 289.607 NWBib-Titeln mit coverage-Feld 287.242 Titeln ein Wikidata-Eintrag zugeordnet, das sind über 99%. Die Matchings sind dokumentiert in einer CSV-Datei, die alle gematchten Strings, deren Vorkommen in den Daten, die gematchtete QID und den Score enthält.

Es gibt 2365 Titel ohne Wikidata-Match** (1014 Textstrings). Hier eine Liste der nicht gematchten Textstrings nach der Häufigkeit ihres Vorkommens in NWBib-Titeln sortiert. Die Ursache von Nicht-Matchings ist zumeist, dass die entsprechende Einheit nicht (mehr) eine von den administrativen Einheiten ist, die für das Matching von Wikidata geholt werden (Regierungsbezirk, Landkreis, kreisfreie Stadt, Gemeinde, Ortsteil, Stadtteil von Düsseldorf oder Köln) oder dass es schlicht keinen entsprechenden Wikidata-Eintrag gibt. Unten gibt es eine strukturierte Übersicht über die Ursachen für ein nicht erfolgtes Matching.

Bewertung

Die Ergebnisse sind zu einem großen Teil sehr zufriedenstellend. Wir gehen davon aus, dass die meisten Matchings automatisiert übernommen werden können.

Wir haben alle Matchings von Strings mit einem Vorkommnis in NWBib-Titeln von ≥20 überprüft. Derzeit ist der höchste Score eines nicht (ganz) korrekten Matchings – die genannte Landkreisproblematik ausgenommen – 3,88. Das Problem ist hier aber nicht das Verfahren, sondern dass es schlicht keinen vollständig zum String passenden Eintrag in Wikidata gibt. (In diesem Fall wurde "Köln-Süd" auf Neustadt-Süd, Köln gematcht, was ja nicht unbedingt falsch ist. Es gibt einfach keine Verwaltungseinheit names "Köln-Süd", weshalb der Match eigentlich besser nicht sein kann.)

Das heißt, dass ein niedriger Matchingscore Hinweis auf Strings sein kann, zu denen es – aus verschiedenen Gründen – keinen passenden Wikidata-Eintrag einer Verwaltungseinheit in NRW gibt.

Fehlerarten

Stadtbezirke

Klöster

Burgen & Schlösser

Wohnplätze

Sonstiges

Kein Wikidata-Eintrag

  • Ennepetal-Milspe
  • Gladbeck-Butendorf
  • "Sevelen " und "Issum-Sevelen" (Issum ist vorhanden: https://www.wikidata.org/wiki/Q243337)
  • Sennelager-Thune (Sennelager gibt es: https://www.wikidata.org/wiki/Q883649)
  • Mönchengladbach-Hermges
  • Heid <Wenden, Olpe>
  • Hagen-Nahmer
  • "Arrode <Werther, Westfalen>" bzw. "Werther-Arrode"
  • Kirchlinde
  • Heiligenhaus-Hofermühle
  • Remscheid-Bliedinghausen
  • Köln-Hohenlind
  • Feldhausen
  • Ahle
  • Spork <Bocholt, Borken, Borken>
  • Rahm
  • Müssingen
  • Mönchengladbach-Geistenbeck
  • Hagen-Halden
  • Gerlingen <Wenden, Olpe>
  • Esbeck
  • Barendorf
  • Anröchte-Klieve
  • Wunderthausen-Diedenshausen (Für Wunderthausen und Diedenshausen existieren separate Einträge)
  • Stockum
  • Soest-Ardey
  • Recklinghausen-Hillen
  • Münster-Gittrup
  • Köln-Severinsviertel
  • Herscheid-Kiesbert
  • Hagen-Oege

Historische Einheit aus Preußen

Wurden mittlerweile ergänzt, siehe https://github.com/hbz/lobid-resources/pull/854

?

  • Kamp <Düsseldorf>
  • Hamm-Nord -> vielleicht "Hamm-Norden" (https://www.wikidata.org/wiki/Q19687910)?
  • Hagen-Kabel
  • Bonn- Bad Honnef
  • Grevenbroich-Welchenberg (ist Berg, Pfarrei, Kloster, Kinderheim...)