Hallo miteinander,
in einem XML-File habe ich die Sprache verschiedener Sätze gegeben inkl. zu jedem Wort die Wortart.
In einem deutschen Satz habe ich also die Wortarten-Abkürzungen SUBS (Substantiv), ADJ (Adjektiv), ADV (Adverb), V (Verb).
Bei einem englischen Satz sehen die Abkürzungen so aus: S, AD, ADV, V.
Bei einem französischen Satz so: NOM, ADJ, ADV, V.
Nun sind die Sprachangaben leider nicht immer korrekt. Ich habe also ein Korrekturskript geschrieben, das die jeweilige Sprachangabe korrigiert. Mit der Korrektur sollten dann aber auch die Wortarten-Abkürzungen entsprechend angepasst werden. Gibt es da eine elegante Lösung, ohne immer "replace" zu benutzen?
Ich dachte, dass evtl. ein Dictionary nützlich sein könnte...
Was meint ihr?
Danke und eine gute Nacht,
Marcel
Verschiedene Tags sprachabhängig setzen
Also vielleicht ist meine Beschreibung etwas verwirrend.
Momentan mache ich folgendes:
...und so weiter. Das obige Beispiel ist nur für die Richtung DE --> EN. Für die Gegenrichtung muss ich dann natürlich nochmals eine entsprechende Abfrage machen, plus für jede andere Sprachpaarung ebenfalls.
Meine Frage also: Kann man das schöner bzw. kompakter machen?
Lieben Dank,
Marcel
Momentan mache ich folgendes:
Code: Alles auswählen
if sLang == "de" and mostProbLang == "en":
for w in s.findall('.//w'):
if w.get("pos") == "SUBS":
w.set("pos", "S")
elif w.get("pos") == "ADJ":
w.set("pos", "AD")Meine Frage also: Kann man das schöner bzw. kompakter machen?
Lieben Dank,
Marcel
nimm doch ein Dictionary:
Wobei sich natürlich die Frage stellt, warum die Wortart überhaupt sprachabhängig ist?
Code: Alles auswählen
for w in s.findall('.//w'):
w.set('pos', WORD_TYPE_MAP[sLang][mostProbLang][w.get('pos')])Das ist evtl. ein wenig off-topic, aber aus linguistischer Sicht ist es eigentlich sogar nicht ganz verkehrt, derart vorzugehen, weil es die Position gibt, dass 'Wortarten' nicht universell, sondern jeweils sprachabhängig zu sehen sind; 'Verb' ist im Deutschen nicht dasselbe wie z.B. im Mandarin oder Navajo.Sirius3 hat geschrieben: Wobei sich natürlich die Frage stellt, warum die Wortart überhaupt sprachabhängig ist?
Ich denke allerdings, dass man in praktischen Anwendungen diese Generalisierung durchaus vornehmen kann, wenn sie keinen Unterschied macht.
-
BlackJack
Vor allem wenn wie im vorliegenden Fall offenbar eine 1:1 Abbildung gemacht werden kann oder zumindest wird, scheint es da ja keinen Unterschied zu geben.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das musst DU doch wissen! Sirius3 hat Dir ja Hinweise durch die Benennung gegeben, wie er sich das vorstellt, aber vom Prinzip kannst ja nur Du wissen, was Du wo nachschlagen willst (denn das muss ja irgend wie *vor* dem Reparieren gefüllt werden...)MarcelF6 hat geschrieben: @Sirius3: Wie soll das dictionary denn aufgebaut sein?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Also ich hätte mir das so vorgestellt, dass ich Listen benutze (da ich auf die Reihenfolge baue) und pro Sprache eine Liste benutze, die ich mit den verschiedenen Wortartenbenennungen fülle, d.h. z.B.:
de = ["SUBS", "ADJ"]
en = ["S", "AD"]
usw.
Die Dictionary-Lösung scheint mir nun aber doch etwas besser.
Aber auch hier gäbe es ja diverse Möglichkeiten, z.B.:
de_en = {"SUBS":"S", "ADJ":"AD"}
Für drei Sprachen hätte ich dann also 6 dictionaries. Oder ginge es noch kompakter?
de = ["SUBS", "ADJ"]
en = ["S", "AD"]
usw.
Die Dictionary-Lösung scheint mir nun aber doch etwas besser.
Aber auch hier gäbe es ja diverse Möglichkeiten, z.B.:
de_en = {"SUBS":"S", "ADJ":"AD"}
Für drei Sprachen hätte ich dann also 6 dictionaries. Oder ginge es noch kompakter?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich würde ja nicht schon wieder anfangen, separate Datenstrukturen aufzubauen, sondern *alles* in eine integrieren.MarcelF6 hat geschrieben: Für drei Sprachen hätte ich dann also 6 dictionaries. Oder ginge es noch kompakter?
Du kannst Dir dabei überlegen, wie "der Weg" sinnvoller ist, also erst über die Sprache trennen und dann über die Bestandteile oder umgekehrt. Also z.B.:
Code: Alles auswählen
semantics = {
"en": {
"SUBS": "S", ...
},
"de": {
...
}
}
// oder so:
semantics = {
"SUBS": {
"en": "S",
"de": "S",
},
"VERB": {
...
}
}encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
