Reguläre Ausdrucke

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.
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

http://paste.pocoo.org/show/125112/

Code: Alles auswählen

# Definition des reg. Ausdrücks zur klassifizierung von Nomen
# Annahme: Nomen werden mit dem 1. Buchstaben groß geschrieben
nomen = re.compile(r'[A-ZÄÖÜ][a-zöäü]+')
Kann ich den reg. Ausdruck so ändern, dass er Wörter die max. 2 bzw. 3 Zeichen lang sind ignoriert und den rest aufnimmt??

Oder muss ich noch einen reg. Ausdruck erstellen.

Ich habs immer noch nicht so mit den Ausdrücken :(

Andere Frage:

Abwechslung F
Ablehnung F

aber

Zurückhaltung [n.d.]


Warum eigentlich? Ich habe ung als Endung für Feminin gemacht...
Zuletzt geändert von CiveX am Donnerstag 25. Juni 2009, 17:43, insgesamt 2-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ja: {m,}
Das Leben ist wie ein Tennisball.
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

Das hilft mir jetzt nicht EyDu, da ich nicht verstehe WO.

nomen = re.compile(r'[A-ZÄÖÜ][a-zöäü]+')

Sucht ja jedes Wort, wo die 1. Buchstabe groß ist. Soweit, so gut.

Nun möchte ich aber zusätzlich noch, dass er dabei Wörter mit max. 2 Buchstaben (So, Ab, An, Am) bzw. 3 (Als, Dem, Den, Der, Die, Das) überspringt.

Klar fallen dabei auch Nomen Ruß, Sex, Aal, Aas, aber die sind vernachlässigbar.

Ich möchte also nomen = re.compile(r'[A-ZÄÖÜ][a-zöäü]+') erweitern. Geht das? Oder muss ich einen neuen Ausdrück formulieren?

Ich dachte an r'[A-ZÄÖÜ]{4,}[a-zöäü]+' aber das scheint nicht zu gehen. Wie du siehst, ich kapier die schreibweise der reg. Ausdrücken überhaupt nicht :(

Edit:

Okay, r'[A-ZÄÖÜ][a-zöäü]{3,}' funktioniert schon viel besser. Allerdings auch nicht ganz richtig.

Es werden zwar 2 und 3 Buchstabige Wörter gefiltert, aber auch:
Abfälle, Abfällen, Klänge, Klöster, Komödie, Kräfte, etc.

Wenn ich mir das richtig anschaue, alle Wörter die mehr als 3 Buchstabe haben, aber das 3. oder 4. Buchstabe ein äöüß ist, wird rausgeworfen.
Zuletzt geändert von CiveX am Donnerstag 25. Juni 2009, 17:59, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Doku hat geschrieben: {m,n}
Causes the resulting RE to match from m to n repetitions of the preceding RE, attempting to match as many repetitions as possible. For example, a{3,5} will match from 3 to 5 'a' characters. Omitting m specifies a lower bound of zero, and omitting n specifies an infinite upper bound. As an example, a{4,}b will match aaaab or a thousand 'a' characters followed by a b, but not aaab. The comma may not be omitted or the modifier would be confused with the previously described form.
Probiers doch mal in ner Shell aus! Fang mit einem kleinen RegExp an und erweitere den dann.
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

Ja, das versuche ich ja gerade....

r'[A-ZÄÖÜ][a-zöäü]+'

Erster Buchstabe A-Z+ÄÖÜ gefolgt vom Rest in Kleinbuchstaben.

Laut Beispiel:

a{4,}b = aaaab aber nicht aaab oder aaab.

Okay dachte ich: Müsste dann ja einfach sein:

r'[A-ZÄÖÜ][a-zöäü]{4,}', also müsste das ja Wörter rausfiltern, die weniger als 4 Buchstaben haben.

Was ist? Es werden Wörter gefiltert mit 4 Buchstaben.Alles ab 5 Buchstaben wird aufgenommen. Hää?

Ok, dann ändern wir mal in r'[A-ZÄÖÜ][a-zöäü]{3,}', Ausgabedatei geguckt. Uii, klasse, schon viel besser.

Dann aktuelle Ausgabedatei mit alter Ausgabedatei geprüft, und was ist?
Abfälle, Abfällen, Klänge, Klöster, Komödie, Kräfte, etc. werden rausgeworfen, weil die zwar alle länger als 3 Buchstaben sind, ABER deren 3. bzw. 4. Buchstabe ist ein äöü oder ß.

:cry:
BlackJack

@CiveX: Du hast da keine Buchstaben, sondern Bytes. Und ich vermute mal das die Buchstaben, die Du eingegeben hast, als UTF-8 kodiert sind. Damit ist alles ausserhalb von ASCII als zwei Bytes kodiert. Und damit kannst Du dann reguläre Ausdrücke und *Buchstaben* vergessen. Du solltest konsequent mit Unicode arbeiten, wenn Du mit Text arbeitest.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du musst den hinteren Teil "gruppieren". Somit kannst Du dort die Mindestlänge festlegen:

Code: Alles auswählen

In [24]: nomen = re.compile(r"[A-ZÄÖÜ]([a-zöäü]+){2,}")

In [25]: re.match(nomen, "Eins")
Out[25]: <_sre.SRE_Match object at 0x2722648>

In [26]: re.match(nomen, "Ei")

In [27]: re.match(nomen, "Ein")
Out[27]: <_sre.SRE_Match object at 0x2722738>
Du sollest so etwas am besten in ner Shell oder einem Editor für Python RegExps testen. Z.B. Kodos
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

Nicht laut meiner Ausgabe, BlackJack:

Nomenlexikon
set([u'Chlodwigs', u'Folge', u'Wohltun', u'Weile', u'Mauer'...

Nomentoken-Liste
[u'Chlodwigs', u'Folge', u'Wohltun', u'Weile',....

Nomendictionary
{u'Chlodwigs': '[n.d.]', u'Folge': 'F', u'Wohltun': 'N', u'Weile': 'F', u'Mauer': 'M', u'Paris': 'N'....

Scheint alles in Unicode zu sein!

@Hyperion: OMG! :oops: :shock: me = dumm :oops: ! Danke das geht schonmal besser.

Jetzt muss ich nur noch rausfinden, warum der Kräfte, Geräusche, Städte, etc. rauswirft.

Also der wirft Wörter raus, die zwar mind. 3 Buchstaben lang sind,a ber deren 3. bzw. 4. Buchstabe ein ä,ö,ü, oder ß ist. Das macht überhaupt keinen Sinn :(
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

Okay, das muss an meinem Code liegen: http://paste.pocoo.org/show/125126/ !

Laut Shell, wie Hyperion wollte, liegt es nicht am reg. Ausdrück:
Bild

Ich glaube Blackjack hat recht, eventuell. Liegt vielleicht am UTF-8/Unicode Gedöns.

Könnte jemand mal schauen bitte? Ich bin ratlos :(

Meine Ausgaben oben zeigen ja, dass es Unicode ist am u'blablub'
BlackJack

@CiveX: Deine *regulären Ausdrücke* sind kein Unicode, nur die Daten auf die Du sie anwendest.
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

jo, u'blablub' statt r'blablub', recht haste!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Am besten ``ur``, damit die Raw-Einstellung beibehalten wird.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten