Seite 1 von 1

aufeinanderfolgende Worte aus Text filtern

Verfasst: Dienstag 23. Februar 2016, 11:53
von Noranora
Hallo! Ich möchte einen Text einlesen und jeweils die Wörter, die aufeinanderfolgen ausgeben lassen.

Code: Alles auswählen


worte=''Max und Moritz – Eine Bubengeschichte in sieben Streichen ist eine Bildergeschichte des deutschen humoristischen Dichters und Zeichners Wilhelm Busch. Sie wurde Ende Oktober 1865[1] erstveröffentlicht und zählt damit zum Frühwerk von Wilhelm Busch. Im Handlungsgefüge weist sie auffällige Gesetzmäßigkeiten und Grundmuster inhaltlicher, stilistischer und wirkungsästhetischer Art auf, die sich auch in den späteren Arbeiten von Wilhelm Busch wiederholen.[2] Viele Reime dieser Bildergeschichte wie „Aber wehe, wehe, wehe!"


erstmal=[]
zwei_worte=[]  # Wortfolgen aus 2 wörtern
drei_worte=[] # wortfolgen aus 3 
vier_worte=[]

index=0
einzeln=worte.split()        # also gibt es jetzt eine Liste, die die einzelnen Wörter als Elementa beinhaltet.
for i in einzeln

    while zaehler<3:                      # <3, da ich nur Wortfolgen prüfen möchte, die aus maximal 4 wörtern bestehen

        index=index+1
        index2=index+1  # hier wird jeweils der Index verändert, um nachher die Liste entsprechend zu füllen.
        index3=index+2   # jeweils für  drei-aufeinander folgende Worte
        zwei_worte.append(i+' '+einzeln[index])
        drei_worte.append(i+' '+einzeln[index]+' '+einzeln[index2])
        vier_worte.append(i+' '+einzeln[index]+' '+einzelnt[index2]+' '+einzeln[index3])


        wortfolge2=(zwei_worte[0])
        wortfolge3=(drei_worte[0])      # hier werden jeweils die Wortketten, die in dem Text present sind ausgegeben.
	wortfolge4=(vier_worte[0])
print(wortfolge2,wortfolge3,wortfolge4)


So, die Idee funktioniert für das erste Wort.
Also wortfolge2 ist: 'Max und
wortfolge3: 'Max und Moritz
wortfolge4: 'Max und Moritz –


Jedoch macht die Schleife dann nicht weiter. Die Ausgaben für die anderen Worte erfolgen nicht. Und ich möchte dass für jedes einzelne Wort die folgenden Wörter in dieser Form ausgegeben werden.
Aber wo hakt die Schleife?

Würde mich sehr über eure Tipps freuen! LG

Re: aufeinanderfolgende Worte aus Text filtern

Verfasst: Dienstag 23. Februar 2016, 12:55
von chpo7234
Hallo Noranora,

bei mir funktioniert dein ganzer Code nicht. Es wäre schön, wenn du den angepasst noch mal posten könntest, denn:
- Der string worte wird bei dir mit zwei Apostrophen ' ' eingeleitet und endet mit einem Anführungszeichen ".
- Beim Einleiten der for-Schleife fehlt ein Doppeltpunkt.
- Die Variable zaehler , die in der while-Schleife abgefragt wird, hat keinen Wert. Sie wird auch im folgenden Code nicht verändert.
- Die Zeile wortfolge4=(vier_worte[0]) hat den falschen Seitenabstand: 3 statt 4 Leerzeichen.
- ...



Ansonsten hast du hier meinen Code-Vorschlag:

Code: Alles auswählen

zwei_woerter = list()
drei_woerter = list()
vier_woerter = list()
 
def zersetze_text(text):
    einzelne_woerter = text.split(" ")
    anzahl_der_woerter = len(einzelne_woerter)
 
    for i in range(0, anzahl_der_woerter-1):
 
        zwei_woerter.append(
            einzelne_woerter[i] + " " + einzelne_woerter[i+1]
        )
 
        if i < anzahl_der_woerter-2:
            drei_woerter.append(
                einzelne_woerter[i] + " " + einzelne_woerter[i+1] + " " + einzelne_woerter[i+2]
            )
 
        if i < anzahl_der_woerter-3:
            vier_woerter.append(
                einzelne_woerter[i] + " " + einzelne_woerter[i+1] + " " + einzelne_woerter[i+2] + " " + einzelne_woerter[i+3]
            )
 
def main():
    worte="Max und Moritz - "
    worte+="Eine Bubengeschichte in sieben Streichen ist eine Bildergeschichte des deutschen humoristischen "
    worte+="Dichters und Zeichners Wilhelm Busch. Sie wurde Ende Oktober 1865[1] erstveroeffentlicht und zaehlt "
    worte+="damit zum Fruehwerk von Wilhelm Busch. Im Handlungsgefuege weist sie auffaellige Gesetzmoegkeiten und "
    worte+="Grundmuster inhaltlicher, stilistischer und wirkungsaesthetischer Art auf, die sich auch in den spaeteren "
    worte+="Arbeiten von Wilhelm Busch wiederholen.[2] Viele Reime dieser Bildergeschichte wie - Aber wehe, wehe, wehe!"
   
    zersetze_text(worte)
   
    print "Ausgabe der Zweier-Kombinationen:"
    for kombination in zwei_woerter:
        print kombination 
       
    print "Ausgabe der Dreier-Kombinationen:"
    for kombination in drei_woerter:
        print kombination 

    print "Ausgabe der Vierer-Kombinationen:"
    for kombination in vier_woerter:
        print kombination 
       
if __name__ == main():
    main()

Re: aufeinanderfolgende Worte aus Text filtern

Verfasst: Dienstag 23. Februar 2016, 13:08
von Noranora
Super, Danke! Aber darf ich noch fragen, wofür du "def main" machst? Also das mit worte= und worte+= ist mir nicht so ganz verständich ...:/

Re: aufeinanderfolgende Worte aus Text filtern

Verfasst: Dienstag 23. Februar 2016, 13:16
von chpo7234
Klar, kein Problem.

Mit

Code: Alles auswählen

worte="Hallo"
legst du den string erst mal fest (initialisieren).

Mit

Code: Alles auswählen

worte+=" du da"
erweiterst du den string. "du da" wird an das "Hallo" ran gehangen.

Ich habe das nur gemacht, damit ich eine bessere Übersicht auf den Text habe und der Rest vom Text nicht irgendwo rechts außerhalb des Bildschirm hängt. Du brauchst das nicht machen und kannst auch direkt alles in einem machen:

Code: Alles auswählen

worte="Hallo du da"
Mit "def" werden Methodennamen bezeichnet. Die erste Methode heißt bei mir "zersetze_text". Die zweite Methode "main" ist die Einstiegsmethode. Hier heraus wird der Programm-Ablauf gesteuert. Die letzte Abfrage "if __name__ == main()" startet die Einstiegsmethode lediglich.

MfG

Re: aufeinanderfolgende Worte aus Text filtern

Verfasst: Dienstag 23. Februar 2016, 13:26
von Noranora
Ich bin Dir sehr dankbar, du hast mir echt weitergeholfen! DANKE!!!!

Re: aufeinanderfolgende Worte aus Text filtern

Verfasst: Dienstag 23. Februar 2016, 13:27
von Sirius3
@chpo7234: globale Variablen machen Code schwer wartbar, fehleranfällig und nicht wiederverwendbar. Daten betreten Funktionen über Parameter und verlassen sie wieder als Rückgabewerte. Über den Index einer Liste zu iterieren, ist ein Python-Anti-Pattern, Codewiederholungen möchte man als Programmierer möglichst vermeiden und man möchte möglichst allgemeine Funktionen schreiben, also welche, die n Wörter zurückgeben können. Statt Strings zusammenzustückeln sollte man format benutzen, oder wie hier ' '.join:

Code: Alles auswählen

from itertools import izip, islice

def zersetze_text(text, anzahl_worte):
    einzelne_woerter = text.split()
    return [" ".join(w) for w in izip(*(islice(einzelne_woerter,i,None) for i in range(anzahl_worte)))]
 
def main():
    worte=(
        "Max und Moritz - "
        "Eine Bubengeschichte in sieben Streichen ist eine Bildergeschichte des deutschen humoristischen "
        "Dichters und Zeichners Wilhelm Busch. Sie wurde Ende Oktober 1865[1] erstveroeffentlicht und zaehlt "
        "damit zum Fruehwerk von Wilhelm Busch. Im Handlungsgefuege weist sie auffaellige Gesetzmoegkeiten und "
        "Grundmuster inhaltlicher, stilistischer und wirkungsaesthetischer Art auf, die sich auch in den spaeteren "
        "Arbeiten von Wilhelm Busch wiederholen.[2] Viele Reime dieser Bildergeschichte wie - Aber wehe, wehe, wehe!")
   
    for anzahl, ausgabe in enumerate(["Zweier", "Dreier", "Vierer"], 2):
        woerter = zersetze_text(worte, anzahl)
        print "Ausgabe der {0}-Kombinationen:".format(ausgabe)
        for kombination in woerter:
            print kombination 
       
if __name__ == main():
    main()