Datum des CBS-Abzugs: 2026-08-01
Dieser Bericht wurde automatisiert mit R Markdown erstellt. Der pica-rs-Code für die Abfrage aller Tc-Sätze und der R-Code für die Berechnung der Ausgabetabelle können durch Aufklappen der Codeblöcke eingesehen werden.
Von allen Datensätzen mit 002@.0 == 'Tc' ohne 050C.a =^ 'GND-kein-Schlagwort' werden die Unterfelder $2 und $4 der PICA+-Felder 022P, 028P, 029P, 030P, 041P und 065P ausgelesen und die IDN-Anzahlen für alle Kombinationen der Werte {‘agrovoc’, ‘lcsh’, ‘ram’, ‘mesh’, ‘stw’, ‘thesoz’, ‘embne’, ‘nsbncf’, ‘tpro’, ‘etiras’} in $2 und {‘ftaa’, ‘ftae’, ‘ftai’, ‘ftao’, ‘ftau’, ‘ftob’, ‘ftub’, ‘ftvb’, ‘ftnu’} in $4 berechnet.
Eine äquivalente Abfrage in der WinIBW für den ersten Rückgabewert lautete f bbg tc crt agrovoc-ftaa NOT rdb GND-kein-Schlagwort*.
#!/bin/bash
set -euo pipefail
# set -x
# Datenformat GND - Crosskonkordanzen zu externen Vokabularen/Thesauri:
# https://wiki.dnb.de/x/lgy6Dw
dnb_dump=/srv/aen-data/pica/T.dat
# Tc-Sätze "f bbg Tc NOT rdb GND-kein-Schlagwort*"
pica filter -s "002@.0 == 'Tc'" --not "050C.a =^ 'GND-kein-Schlagwort'" $dnb_dump -o Tc.dat
# 028P (700) - "p" - Person
# 029P (710) - "b" - Körperschaft
# 030P (711) - "f" - Konferenz
# 022P (730) - "u" - Einheitstitel
# 041P (750) - "s" - Sachbegriff
# 065P (751) - "g" - Geografikum
pica select -H "IDN, Feld, Thesaurus, Relation" "003@.0, '028P', 028P{2, 4}" \
--where "028P.4?" Tc.dat -o Tc.csv
# ohne Header anhängen
pica select "003@.0, '029P', 029P{2, 4}" --where "029P.4?" Tc.dat --append -o Tc.csv
pica select "003@.0, '030P', 030P{2, 4}" --where "030P.4?" Tc.dat --append -o Tc.csv
pica select "003@.0, '022P', 022P{2, 4}" --where "022P.4?" Tc.dat --append -o Tc.csv
pica select "003@.0, '041P', 041P{2, 4}" --where "041P.4?" Tc.dat --append -o Tc.csv
pica select "003@.0, '065P', 065P{2, 4}" --where "065P.4?" Tc.dat --append -o Tc.csv
Anzahl der Tc-Sätze gruppiert nach Thesaurus und Relation:
# Crosskonkordanzen einlesen
ck <- read_csv('Tc.csv', col_types = 'cccc')
# Wertebereiche gemäß Wiki-Seiten definieren
thesauri <- read_csv('Thesauri.csv', col_types = 'cc')
relationen <- read_csv('Relationen.csv', col_types = 'cc')
# Crosskonkordanzen filtern und zählen
rslt <- ck %>%
filter(Thesaurus %in% thesauri$Code & Relation %in% relationen$Code) %>%
mutate(
Thesaurus = factor(Thesaurus,
levels = thesauri$Code, labels = thesauri$Thesaurus),
Relation = factor(Relation,
levels = relationen$Code, labels = relationen$Relation)
) %>%
# GESAMT als Summe über alle Relationen
rbind((.) %>% mutate(Relation = factor('GESAMT'))) %>%
# auch alle leeren Levels jeweils mit Anzahl 0 anzeigen
group_by(Thesaurus, Relation, .drop = FALSE) %>%
# jede Kombination (Thesaurus, Relation) je IDN nur einmal zählen
summarise(n = n_distinct(IDN)) %>%
pivot_wider(id_cols = Relation, names_from = Thesaurus, values_from = n)
# Formatierte Ausgabetabelle
rslt %>%
mutate_at(.vars = setdiff(colnames(.), 'Relation'), .funs = ~ formatC(
., format = 'd', big.mark = '.', decimal.mark = ',')) %>%
knitr::kable(align = c('l', rep('r', ncol(.)-1)))
| Relation | AGROVOC | LCSH | RAMEAU | MeSH | STW | TheSoz | EMBNE | NSogg | T-PRO | ET |
|---|
| Äquivalenz (ftaa) | 90 | 52.219 | 49.443 | 58 | 0 | 101 | 13.383 | 12.223 | 2 | 669 |
| exakte Äquivalenz (ftae) | 5.464 | 1.559 | 1.004 | 6.518 | 5.895 | 7.324 | 17 | 24 | 36 | 3.501 |
| inexakte Äquivalenz (ftai) | 5 | 902 | 919 | 407 | 0 | 198 | 550 | 25 | 29 | 2.362 |
| ODER-Äquivalenz (ftao) | 4 | 208 | 129 | 65 | 0 | 0 | 6 | 40 | 8 | 1.409 |
| UND-Äquivalenz (ftau) | 1.293 | 2.330 | 4.741 | 120 | 434 | 1.614 | 1 | 0 | 0 | 0 |
| Oberbegriff-Relation (ftob) | 2.109 | 0 | 0 | 55 | 7.881 | 2.936 | 0 | 0 | 0 | 0 |
| Unterbegriff-Relation (ftub) | 182 | 0 | 0 | 12 | 396 | 382 | 0 | 0 | 0 | 0 |
| Verwandter-Begriff-Relation (ftvb) | 754 | 0 | 0 | 11 | 3.815 | 931 | 0 | 0 | 0 | 0 |
| Null-Relation (ftnu) | 168 | 20.471 | 23.190 | 0 | 520 | 888 | 2 | 11 | 0 | 0 |
| GESAMT | 10.069 | 77.689 | 79.426 | 7.246 | 18.941 | 14.374 | 13.959 | 12.323 | 75 | 7.941 |