Automatische Transliteration nichtlateinischer Alphabete

Jonathan R. hinzugefügt 2 Monaten her
erledigt

Liebes Support-Team,


ich würde mich über eine Möglichkeit sehr freuen, Titelangaben von Werken in Sprachen, welche nicht das lateinische Alphabet verwenden, über eine zusätzliche Funktion einem vorgegebenem Stil folgend zu transliterieren.


In meiner Datenbank habe ich Hunderte Titel in Russisch, Ukrainisch und Weißrussisch, deren Titelangaben ich in lateinischen Buchstaben eingegeben und dabei das in Deutschland übliche wissenschaftliche Transliterationssystem verwendet habe. Allerdings schreibe ich auch auf Englisch und benötige dafür ein anderes Transliterationssystem. Um dafür nicht jedesmal die Titelangaben der zitierten Titel zu ändern, verwende ich Freitextfelder und andere Behelfsmittel, die sehr aufwändig sind und mit jedem neuen Zitationsstil noch aufwändiger werden.


Ich bin mir sicher, dass viele andere Citavi-Benutzer das gleiche Problem haben (Verwendung von Titeln in nichtlateinischen Alphabeten, Übertragung in unterschiedliche Sprachen & Transliterationssysteme). Wäre es nicht möglich, eine automatische Transliterationsfunktion hinzuzufügen? Diese könnte vorgegebenen Transliterationssystemen folgen, die mit wenigen Klicks ausgewählt und nach Belieben angepasst werden könnten – ganz wie dies bereits mit Zitationsstilen hervorragend klappt. Bei der Einpflegung neuer Titel könnte man dann die Titelangaben zunächst im originalen Alphabet belassen, um sie erst unmittelbar bei der Zitation automatisch – dem jeweils vorgegebenen Transliterationsstil folgend – in lateinische Buchstaben übertragen zu lassen.


Eine solche Funktion würde mir – und ich bin mir sicher, zahlreichen anderen Benutzern ebenso – die Arbeit ungemein erleichtern. Das bisherige Vorgehen ist ein großes Ärgernis und mein einziges Problem mit Citavi. Vielen Dank!


Mit freundlichen Grüßen

Jonathan

Beste Antwort
Foto

Hallo, Jonathan,

insgesamt ist eher wenig zu ändern. Ich habe im Anhang (ungetestet) mal Jan Jakobs Vorschläge umgesetzt. Ich hoffe, es bringt Sie auf den richtigen Weg.

Viele Grüße

Sebastian

Kommentare (10)

Foto
1

Hallo, Jonathan,

das ist leider alles etwas komplizierter als es auf den ersten Blick scheint, selbst wenn wir nicht-alphabet-basierte Systeme wie Chinesisch, für das es auch wiederum verschiedene Transliterationssysteme (Wade-Giles, Pinyin, ...) gibt, außen vor lassen.

Allein für das Russische gibt es offenbar eine Vielzahl von möglichen Transliterationen. Eine für alle Nutzer brauchbare Lösung in der Citavi-Oberfläche selsbt zu finden, die sich obendrein noch einfach bedienen lässt, dürfte der Quadratur des Kreises gleichkommen.

Prinzipiell ist der Funktionswunsch aber schon erfüllt, aber über den Zitationsstil-Editor und nicht im Hauptprogramm. Wenn der Titel im kyrillischen Alphabet eingegeben ist, könnte man auf Basis dieses Codes die Eingabe z.B. des Titelfeldes ins lateinische Alphabet umgewandeln und ausgeben lassen. Die Zuordnungen müssten dann aber für jedes Transliteration angepasst werden und dafür jeweils ein anderer Zitationsstil (bzw. eine andere programmierte Komponente) genutzt werden.

Viele Grüße

Sebastian

Foto
1

Lieber Sebastian,


vielen Dank für die rasche Antwort, das klingt gut. An welcher Stelle des Programmcodes einer Komponente füge ich einen solchen Code denn ein? Ich kenne mich leider überhaupt nicht mit Programmiersprachen aus.

Viele Grüße,

Jonathan

Foto
2

Lieber Jonathan,

hier im Handbuch erfahren Sie, wie Sie eine programmierte Komponente Ihrem Zitationsstil hinzufügen können: https://www1.citavi.com/sub/manual6/de/index.html?cse_programmable_components.html

Im Anhang finden Sie einen "proof of concept" basierend auf dem hier gefundenen Code.

Viele Grüße

Sebastian

Foto
1

Lieber Sebastian,

wunderbar – das klappt ganz ausgezeichnet. Die restlichen Anpassungen für verschiedene Zitationsstile sollte ich alleine hinbekommen. Vielen Dank!

Herzliche Grüße,

Jonathan

Foto
1

Lieber Sebastian,

ich habe inzwischen den Code meinem Transliterationsstil angepasst. Ein Problem habe ich aber noch – es gibt einen Buchstaben (И bzw. cap_ee im Code), der unterschiedlich transliteriert werden soll, je nachdem, ob es sich bei der ursprünglichen Sprache um Russisch oder um Ukrainisch handelt. Um dieses Problem zu lösen, möchte ich in Zeile 191 (siehe angefügte Datei) eine Bedingung einfügen, die den Inhalt des Feldes "Sprache" des Titels abfragt: wenn in diesem Feld "Ukrainisch" steht, wird dieser Buchstabe (И) als Y transliteriert, andernfalls als I. Wie definiere ich diese Bedingung?


Herzliche Grüße,

Jonathan

Foto
2

Innerhalb der Methode DisplayInEnglish steht die Sprache derzeit nicht zur Verfügung, weil als einzige Variable "text" in die Methode eingegeben wird (siehe Zeile 80 und 136, die Methode ist so definiert). Man könnte nun entweder die Variable languageResolved mit in die Methode übergeben oder aber man splittet DisplayInEnglishzwei Methoden, eine DisplayRussianInEnglish für Russisch, eine DisplayUkrainianInEnglish für Ukrainisch, und wählt anhand des Wertes für languageResolved die richtige Methode aus. M.E. ist das zweite der "sauberere" Weg, aber auch im Zeilenumfang länger. Ich würde das so machen, dass ich eine termsList "Russisch", eine "Ukrainisch" anlege, und dann regEx nutze, um "bool IsRussian" oder "bool IsUkrainian" auf true zu setzen, um dann in Z. 74 ff. entweder die Methode für Russisch, die für Ukrainisch auszuführen, oder aber, wenn beide false, return null. Man könnte auch überlegen, ob man statt 40 else if lieber einen switch nimmt, ist wohl schneller (was ich bis gerade eben auch nicht wusste, aber für diese Antwort ergoogelt habe). Das heißt, genau genommen…

/ed164e2752f4eec0519ea9332c971f54

… müßte man mal auswerten, ob die 5 meist genutzten Buchstaben des kyrillischen Alphabets annähernd 100% aller Buchstaben in einem kyrillischen Text sind. Oder man kombiniert: das kyrillische Äquivalent zu e als erstes per if, alles andere per switch. Die sprachanalytischen Probleme der Optimierung begeistern selbst mich, den Juristen. (Sorry, das klang jetzt nicht sonderlich zielführend, war aber ernst gemeint: den meistgenutzten Buchstaben per if abfragen, alles andere per switch wäre wahrscheinlich echt am schnellsten.)

Foto
1

Wenn man sich https://www.sttmedia.com/characterfrequency-ukrainian so anschaut, ist Switch-Case vermutlich wirklich effizienter. Ich stimme Jan Jakob zu: man sollte zwei Methoden implementieren, sonst wird die Verwirrung groß. Der Zeilenumfang an sich spielt nicht so die Rolle für die Geschwindigkeit.

Viele Grüße

Sebastian

Foto
Foto
1

Vielen Dank! Ich kann leider so gut wie gar kein C# und tue mich daher schwer damit, die Funktionsweise der einzelnen Bestandteile in den Zeilen 22 bis 87 richtig zu verstehen und diese Anleitung umzusetzen. Was genau soll ich wo einfügen? Wenn möglich, ohne auf Wahrscheinlichkeitstabellen zu setzen, das scheint mir aufgrund der Ähnlichkeit zwischen Russisch und Ukrainisch keine gute Idee zu sein, vgl. https://www.sttmedia.com/characterfrequency-russian (möglicherweise habe ich diesen Punkt – ohne C#-Kenntnisse – aber auch einfach nicht richtig verstanden).


Viele Grüße,

Jonathan

Foto
2

Hallo, Jonathan,

insgesamt ist eher wenig zu ändern. Ich habe im Anhang (ungetestet) mal Jan Jakobs Vorschläge umgesetzt. Ich hoffe, es bringt Sie auf den richtigen Weg.

Viele Grüße

Sebastian

Foto
1

Lieber Sebastian,

das funktioniert ganz hervorragend. Damit sollte das Problem insgesamt gelöst sein. Herzlichen Dank!

Viele Grüße,

Jonathan