Seite 2 von 2

Verfasst: Montag 5. April 2010, 21:22
von lunar
@Hyperion: Deine Geduld ist wahrlich unendlich.

Verfasst: Montag 5. April 2010, 21:31
von INFACT
shuang hat geschrieben:oh ein Missverständnis. Die Anzahl des selbigen Wortes sollen gezählt werden. Nicht die Sätze.

Code: Alles auswählen

import glob

count=0
breakNow = False

woerter = {}

for fname in glob.glob("C://**/**/Desktop/Korpus/*.txt"):
    if breakNow:
        break
    with open(fname, "r") as infile:
        woerter[fname] = {}
        for line in infile:
            if breakNow:
                break
            for word in line.split():
                if count >= 2000: #wenn 200 worte eingelesen wurden
                    breakNow = True # ende
                    break
                if word in woerter[fname]:
                    woerter[fname][word] += 1
                    # ich weiß jetzt nicht ob du
                    # count hochzählen willst
                    # wenn das wort schon drin ist
                    # oder du es addest.
                    # Musst du dann selber
                    # editieren
                    count += 1
                    print word, count
                else:
                    woerter[fname][word] = 1

Verfasst: Montag 5. April 2010, 21:48
von shuang
Jungs also ich hab da mal was gecoded. So in etwa stelle ich mir das ganze vor. Jedoch möchte ich das ganze jetzt noch mit glob für alle Dateien zusammen nutzen, wie binde ich das nur ein?

Code: Alles auswählen




import sys
from string import maketrans
import time

def einlesen():
    count = {}
    
    leer = "!\"$%&/()[]{}=?\\@*+~#'<>|,.-;:_0987654321"
    trans = maketrans(leer, len(leer)* " ")
    for line in file('C:/Users/Sharon/Desktop/prozess.txt','r'):
        line = line.translate(trans).lower()
        line.strip()
        for word in line.split():
           try:
               count[word]+=1
           except KeyError:
               count[word] =1
    items = count.items()
    items.sort(key=lambda x: x[1], reverse=True)
    for item in items:
        
        print "%-20s %20d" % item
        
        time.sleep(0.01)
              

Verfasst: Dienstag 6. April 2010, 09:56
von Hyperion
Du gehst die Sache nach wie vor falsch an. Auf einmal taucht das ganze verpackt in einer Funktion auf (was prinzipiell gut ist!), allerdings ohne klare Benennung, Aufgabe und Parameterübergabe und -rückgabe.

Dann hast Du eine Sortierfunktion eingebaut und dann noch eine Ausgabe - wobei das time.sleep() hier arg irritiert!

Wieso zerlegst Du das ganze nicht klarer in einzelne Schritte?

Ich würde so vorgehen; nicht unbedingt sortiert, sondern nur faktische Aufgaben:
1.) Funktion zum "Parsen" einer Datei. Wörter zählen und als Dictionary zurückgeben. Je nach Parsing, sich wiederholende Preparation auslagern.
2.) Funktion zum Bestimmen aller Dateien, die geparst werden sollen. Entweder Übergabe der Parsing-Funktion oder Rückgabe einer Liste von Dateinamen
3.) Funktion zum Speichern / Exportieren. Zur Not eben reines "print"

Daher mal hier mein Ansatz: Link

Verfasst: Dienstag 6. April 2010, 20:24
von shuang
was genau ist eigl der Unterschied zwischen:

Code: Alles auswählen

File= open("....
und

Code: Alles auswählen

 with blabla.open(filename, "r", encoding=coding) as infile:
Danke

Verfasst: Dienstag 6. April 2010, 20:29
von lunar

Verfasst: Dienstag 6. April 2010, 22:03
von INFACT
Geht denn

Code: Alles auswählen

with blablabla.open(filename) as fobj
?
Ich dachte es geht nur mit

Code: Alles auswählen

with open(filename) as fobj

Verfasst: Dienstag 6. April 2010, 22:07
von lunar
Ausprobieren :) Aber wieso sollte es auch nicht gehen?

Verfasst: Mittwoch 7. April 2010, 07:30
von snafu
@INFACT: Arbeite dich etwas in das Thema "Contextmanager" ein, dann solltest du schnell verstehen, wieso das auch gehen kann. Wichtig sind halt nur die `__enter__()` und `__exit__()` Methode des Objekts.