Wort zählen in einem String

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.
rabby
User
Beiträge: 7
Registriert: Dienstag 13. Dezember 2005, 21:27
Kontaktdaten:

Wort zählen in einem String

Beitragvon rabby » Donnerstag 15. Dezember 2005, 20:44

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.
joe

Re: Wort zählen in einem String

Beitragvon joe » Donnerstag 15. Dezember 2005, 21:38

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 15. Dezember 2005, 21:53

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
rabby
User
Beiträge: 7
Registriert: Dienstag 13. Dezember 2005, 21:27
Kontaktdaten:

Beitragvon rabby » Donnerstag 15. Dezember 2005, 23:11

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
joe

Beitragvon joe » Donnerstag 15. Dezember 2005, 23:24

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 16. Dezember 2005, 13:17

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]