In Bonn verwenden ein paar Institutsbibliotheken RVK-Signaturen. I.d.R. besteht eine RVK-Signatur aus der RVK-Feingruppe + Cutter + ggf. Auflagenbezeichnung (z.B. +2), Bandanhänger ((1)) oder Mehrfachexemplarkennzeichen (eingeleitet durch Raute #). Es gibt ein paar Synntax-Varianten (fingierte Beispiele):
Einfache RVK-Signatur: CD 1234 A123 (1) + 2 #1
Einfache RVK-Signatur + Zusatzcutter, um Doppelungen zu vermeiden: CD 1234 A123 B1
Es gibt RVK-Klassen für Serien, z.B. FX 005000 Patrologia Latina (Migne). Hier würde man an die Feingruppe nur noch den Bandanhänger ohne weiteren Cutter hängen: FX 005000 (22).
Problematisch in der RVK sind Autorenstellen. Hier liegen z.B. für die Fachsystematiken G und H detaillierte Signatursynthese-Anweisungen vor, z.B. GM 2657 - GM 2660 Brecht, Bertolt, Gesamtausgaben. Bei anderen Autorenstellen, z.B. Romanistik fehlen solche Signaturanweisungen.
Hier sind solche Konstrukte möglich:
CD 12234.986
CD 1234.2004
CD 1235 T56.967
CD 1245 T56.2004
Dann gibt es bei den Autorenstellen noch Klassen für sonstige oder übrige Autoren, die keine eigene RVK-Klasse haben. Hier sind dann zwei Cutter nacheinander möglich.
Daneben gibt es auch Sachklassen mit Signaturanweisungen, z.B. EC 5410 oder bei AH. Ich habe für die Signaturkontrolle reguläre Ausdrücke erstellt, mit denen ich die RVK-Signaturen aus einem Datenset, in den auch keine RVK-Signaturen sind, extrahieren kann. Das funktioniert ganz gut, bis auf Signaturgruppen, die den RVK-Signaturen ähneln, aber keine RVK-Signaturen sind:
def rvk_check (value):
if re.search(‚^([A-Z]{2}\s\d{3,}\s[A-Z]\d{1,3})‘, value):
return ‚rvk_einfach‘
if re.search(‚^([A-Z]{2}\s\d{3,}.\d{3,4})‘, value):
return ‚rvk_gesamtausgabe‘
if re.search(‚^([A-Z]{2}\s\d{3,}\s(\w.*))‘, value):
return ‚rvk_feingruppe_band‘
if re.search (‚^(CDA|CDR|DIA|DVD|KAS|MFC|MFL|PLA|VID)\s[A-Z]{2}‘, value):
return ‚rvk_nbm‘
else: return 'nicht_rvk
Bei den Nicht-Buch-Materialien wird bei den Bonner RVK-Signaturen noch CDA usw. vorgesetzt.
Mit einer weiteren Funktion prüfe ich, welche Fehler in RVK-Signaturen vorkommen. Das basiert auf Erfahrungswerten:
def rvk_check_falsch (value):
if re.search(‚^([A-Z][a-z]\s\d{3,}\s[A-Z]\d{1,3})‘, value): #feingruppe mit kleinbuchstaben
return ‚feingruppe mit kleinbuchstaben pos2‘
elif re.search(‚^([a-z][A-Z]\s\d{3,}\s[A-Z]\d{1,3})‘, value): #feingruppe mit kleinbuchstaben
return ‚feingruppe mit kleinbuchstaben pos 1‘
elif re.search(‚^([a-z][a-z]\s\d{3,}\s[A-Z]\d{1,3})‘, value): #feingruppe mit kleinbuchstaben
return ‚feingruppe mit 2 kleinbuchstaben‘
elif re.search(‚^([A-Z]{2}\d{3,}\s[A-Z]\d{1,3})‘, value): #feingruppe ohne leerstelle
return ‚feingruppe ohne leerstelle‘
elif re.search(‚^([A-Z]{2}\s\d{3,}[A-Z]\d{1,3})‘, value): #ohne leerstelle vor cutter
return ‚ohne leerstelle vor cutter‘
elif re.search(‚^([A-Z]{2}\s\d{3,}[a-z]\s[A-Z]\d{1,3})‘, value): #kleinbuchstabe nach feingruppe
return ‚kleinbuchstabe nach feingruppe‘
elif re.search(‚^([A-Z]{2}\s\d{3,}\s[a-z]\d{1,3})‘, value): #kleinbuchstabe im cutter
return ‚kleinbuchstabe im cutter‘
elif re.search(‚^([A-Z]{2}\s\d{3,}\s[A-Z]\s\d{1,3})‘, value): #blank im cutter
return ‚blank im cutter‘
elif re.search(‚^([A-Z]{2}\s\d{3,}\s[0-9]\d{1,3})‘, value): #cutter ohne buchstaben
return ‚cutter ohne buchstaben‘
else:
return ‚rvk_korrekt_oder_altsignatur‘
Kurzum: Die Varianten bei den Bonner RVK-Signatur sind überschaubar und man kann die über Regex ganz gut extrahieren. Schöne Grüße, Kai