Tokenisieren!

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
lolo
User
Beiträge: 3
Registriert: Montag 25. April 2011, 18:31

Hallo leute !!!

Ich muss einen Text z.b :

Es war einmal ein Mann und eine Frau, die wünschten sich schon lange vergeblich ein Kind, endlich machte sich die Frau Hoffnung der liebe Gott werde ihren Wunsch erfüllen. Die Leute hatten in ihrem Hinterhaus ein kleines Fenster, daraus konnte man in einen prächtigen Garten sehen, der voll der schönsten Blumen und Kräuter stand;

Und diesen Text muss ich tokenisieren ich muss die Groß- und Kleinschreibung normalisieren z.b. Wörter die normalerweise klein geschrieben werden (für) und die nur am Satzanfang oder nach Punkt großgeschrieben werden sollen klein anfangen aber die Nomen sollen so sein und am Ende muss die Ausgabe muss so aussehen z.b:

es
war
einmal
ein
Mann
und
Frau
,


und so weiter

ich weiß aber nicht WIE

Danke im Voraus
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Falls ihr reguläre Ausdrücke benutzen dürft und `s` für den Satz steht:

Code: Alles auswählen

import re
re.split(r'\W+', s)
Dies passt auf alle nicht-alphanummerischen Zeichen, dh alles, was kein Buchstabe, kein Unterstrich und keine Zahl ist (`\W`). Zudem können mehrere solcher Zeichen aufeinander folgen (`+`). All diese Fundstellen werden nun als Trenner benutzt, an dem eben gesplittet wird. Übrig bleibt das, was links und rechts von den Trennern steht, also die eigentlichen Wörter. Zum Nachlesen siehe re.

Den Part mit dem Normalisieren habe ich aus deinem Kauderwelsch leider nicht übersetzen können. ;)
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@lolo: Wie sähe denn folgendes Beispiel normalisiert aus: "Beim Fallen über Fallen fallen!"?
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Oder: "Wenn hinter Fliegen Fliegen fliegen fliegen Fliegen Fliegen nach." 8)
lolo
User
Beiträge: 3
Registriert: Montag 25. April 2011, 18:31

Hallo

Also Wörter, die normalerweise kleingeschrieben werden und nur am Satzanfang mit großem Anfangsbuchstaben vorkommen, sollen am Satzanfang mit einem Kleinbuchstaben beginnen
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

lolo hat geschrieben: Also Wörter, die normalerweise kleingeschrieben werden und nur am Satzanfang mit großem Anfangsbuchstaben vorkommen, sollen am Satzanfang mit einem Kleinbuchstaben beginnen
Das stelle ich mir sehr schwierig vor:
"Fallen sind immer blau, oder?"
"Fallen wir gerade aus dem 20. Stock?"

Wie kommt man also auf das "normalerweise"?
lolo
User
Beiträge: 3
Registriert: Montag 25. April 2011, 18:31

also ich habe das mit dem auflisten hingekriegt :

for tag in textliste:
print tag + ' ',
print

aber ich kann das mit klein- und großschreibung nicht.

Also ich meine damit das hier :

Text vor der Tokenisierung und Normalisierung:

In den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön, aber die jüngste war so schön, daß die Sonne selber, die doch so vieles gesehen hat, sich verwunderte so oft sie ihr ins Gesicht schien. Nahe bei dem Schlosse des Königs lag ein großer dunkler Wald, und in dem Walde unter einer alten Linde war ein Brunnen: wenn nun der Tag recht heiß war, so ging das Königskind hinaus in den Wald und setzte sich an den Rand des kühlen Brunnens: und wenn sie Langeweile hatte, so nahm sie eine goldene Kugel, warf sie in die Höhe und fieng sie wieder; und das war ihr liebstes Spielwerk.
Nun trug es sich einmal zu, daß die ...

Text nach der Tokenisierung und Normalisierung:

in den alten Zeiten, wo das Wünschen noch geholfen hat, lebte ein König, dessen Töchter waren alle schön, aber die jüngste war so schön, daß die Sonne selber, die doch so vieles gesehen hat, sich verwunderte so oft sie ihr ins Gesicht schien. nahe bei dem Schlosse des Königs lag ein großer dunkler Wald, und in dem Walde unter einer alten Linde war ein Brunnen: wenn nun der Tag recht heiß war, ...
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eigentlich würde ich erwarten, dass ihr bei so einer Aufgabe zumindest etwas an linguistischem Grundwissen vermittelt bekommen habt. Keine Ahnung, wie da die Techniken sind. Aus dem Bauch heraus würde ich mir eine Liste von Wörtern der deutschen Sprache besorgen und damit dann jedes einzelne Wort abgleichen und ggf verändern. Für die Veränderung stehen die Methoden `capitalize()` bzw `lower()` zur Verfügung, welche auf Zeichenketten anwendbar sind.

EDIT: Wobei ihr ja nur bei Bedarf das Wort klein schreiben sollt, daher also nur `lower()` nehmen müsst.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

lolo hat geschrieben:Text nach der Tokenisierung und Normalisierung:[...]
Hier passt etwas nicht. Wenn die einzelnen Wörter Token sein sollen, dann hast du doch am Ende keinen kompletten Text, sondern eine Liste mit Wörtern.

Mich wundert es im Moment nicht, dass du Schwierigkeiten hast. Du konntest bisher weder die Aufgabe, noch das gewünschte Ergebnis richtig beschreiben. So lange das so bleibt, wirst du auch keinen passenden Algorithmus entwickeln können.
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Zumal ich unter Token in dem Kontext ja eher "Wort oder Satzzeichen oder Whitespace" verstehen würde. Aber lassen wir das mal so stehen... ;P
Dingels
User
Beiträge: 61
Registriert: Dienstag 23. Dezember 2008, 19:50

Hallo lolo,

ich hab noch eine andere Idee, wie Du das mit dem Normalisieren machen könntest. Überprüfe doch einfach für jedes Wort, das an einem Satzanfang steht, ob es auch als kleingeschriebene Variante irgendwo im Text auftaucht. Wenn dem so ist, ist es recht wahrscheinlich, dass es sich bei dem Wort am Satzanfang nicht um ein Substantiv handelt, sondern eben um ein Wort, was normalerweise kleingeschrieben wird. Zwar kannst Du mit diesem Ansatz nicht zwischen Fallen/fallen und Fliegen/fliegen unterscheiden, aber im Durchschnitt solltest Du damit schon gute Ergebnisse erzielen.
Antworten