Seite 1 von 1

Wort zählen in einem String

Verfasst: Donnerstag 15. Dezember 2005, 20:44
von rabby
hallo welt!
(in diesem fall kann ich nicht auf regexp verzichten, da das ganze noch erweitert wird...falls Ihr mich davon abbringen wollt...)
zum ermitteln aller wörter verwende ich: re.compile('[\wäüöÄÜÖ]+',re.I)
das klappt auch bestens. doch wie kann ich nun noch die anzahl eines jeden wortes ermitteln.
hab hier mal eine funktion gebastelt, welche einfach die häufigkeit der buchstabenfolge angibt; also ohne berücksichtigung, ob es teil eines wortes ist oder ob es ein ganzes wort ist(strenge=0). wird bei dieser funktion stattdessen verlangt, die tatsächliche anzahl von vorkommnissen dieses wortes, zu ermitteln(streng=1), fehlt mir der passende regexp.

Code: Alles auswählen

def wort_zaehlen(wort_x,txt,streng=0):
	if(streng==0):
		wort=re.compile(wort_x+'+',re.I)
	#if(streng==1):
		#wort=re.compile('[\wäüöÄÜÖ]+'wort_x+'+',re.I)
	woerter=wort.findall(txt)
	return len(woerter)
entscheidend ist eben, dass im prinzip ja alles außer \wäüöÄÜÖ bzw. alles außer gültigen Buchstaben vor und auch nach dem wort kommen dürfen. und das ist nicht NUR auf leerzeichen und punk, komma, etc bezogen.
dann hoff ich mal auf Eure hilfe.
danke schonmal
schönen tag noch

Edit (Leonidas): Code in Python-Tags gesetzt.

Re: Wort zählen in einem String

Verfasst: Donnerstag 15. Dezember 2005, 21:38
von joe
Ich habe dieses wort_x nicht verstanden. Ist das das wort, das du zählen willst? Kannst du mal dafür ein beispiel geben? Und warum wird das letzte zeichen von wort_x mit einem + versehen? Funktionieren tuts natürlich:
print wort_zaehlen("abc","abccccababccbabcaaaa") gibt 3 aus.
Was müsste da rauskommen für streng==1?
joe

Verfasst: Donnerstag 15. Dezember 2005, 21:53
von Leonidas
Ich hatte um erhrlich zu sein Probleme deine Frage zu verstehen. Könntest du das nächste mal Code in Python-Tags setzten? Danke.

Code: Alles auswählen

#!/usr/bin/python
# -*- encoding: latin-1 -*- 
import re

def wort_zaehlen(wort_x, txt, streng=0):
    if streng == 0:
        wort = re.compile(wort_x + '+', re.I)
    elif streng == 1:
        rex = r'( |^)' + wort_x
        wort = re.compile(rex, re.I)
    
    return len(wort.findall(txt))

t1 = "Jagt jägt jägt verjägt"
t2 = "jagt verjagt jagt jagt"

print wort_zaehlen('jägt', t1, streng=1)
print wort_zaehlen('jagt', t2, streng=1)
Änderungen: PEP8 angepasst, Rawstrings benutzt, Javastyle losgeworden.

Verfasst: Donnerstag 15. Dezember 2005, 23:11
von rabby
danke.
vor und nach ...: wort=re.compile(r'( |^)'+wort_x+'( |^)',re.I)
klappt bestens!

joe: 0 müsste rauskommen, da in dem text kein einziges mal abc alleine auftritt ohne buchstaben davor/danach

Verfasst: Donnerstag 15. Dezember 2005, 23:24
von joe
rabby hat geschrieben:klappt bestens!
Aber bei weitem nicht immer. Die 2. klammer müsste ( |$) lauten. Aber auch dann wirst du häufig genug probleme haben. "jagt jagt jagt jagt" ergibt z.b. nur 2 treffer. Irgenwie hatte ich auch verstanden, daß z.b. auch komma und punkt das wort gültig einschließen können, oder? Und spielt deine zeichenmenge [\wäöüÄÖü] keine rolle mehr?
joe

Verfasst: Freitag 16. Dezember 2005, 13:17
von Leonidas
joe hat geschrieben:Aber bei weitem nicht immer. Die 2. klammer müsste ( |$) lauten.
Ja, das habe ich mir auch gedacht, als ich ( |^) geschrieben habe, nur sind meine Versuche mit ( |$) danach gescheitert.