Verschiedene Tags sprachabhängig setzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

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
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Also vielleicht ist meine Beschreibung etwas verwirrend.
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")
...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
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

nimm doch ein Dictionary:

Code: Alles auswählen

for w in s.findall('.//w'):
    w.set('pos', WORD_TYPE_MAP[sLang][mostProbLang][w.get('pos')])
Wobei sich natürlich die Frage stellt, warum die Wortart überhaupt sprachabhängig ist?
nezzcarth
User
Beiträge: 1793
Registriert: Samstag 16. April 2011, 12:47

Sirius3 hat geschrieben: Wobei sich natürlich die Frage stellt, warum die Wortart überhaupt sprachabhängig ist?
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.

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.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@nezzcarth: die Definition von Verb in Mandarin unterscheidet sich jetzt nicht stark von europäischen Sprachen. Bei Navajo kann ich dazu aber nichts sagen.
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Danke für eure Antworten!
@Sirius3: Wie soll das dictionary denn aufgebaut sein?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

MarcelF6 hat geschrieben: @Sirius3: Wie soll das dictionary denn aufgebaut sein?
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...)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

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?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

MarcelF6 hat geschrieben: Für drei Sprachen hätte ich dann also 6 dictionaries. Oder ginge es noch kompakter?
Ich würde ja nicht schon wieder anfangen, separate Datenstrukturen aufzubauen, sondern *alles* in eine integrieren.

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
Antworten