Neuling, viele Korpus öffnen.

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

Montag 5. April 2010, 21:22

@Hyperion: Deine Geduld ist wahrlich unendlich.
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Montag 5. April 2010, 21:31

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
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Montag 5. April 2010, 21:48

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)
              
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 6. April 2010, 09:56

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
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Dienstag 6. April 2010, 20:24

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
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Dienstag 6. April 2010, 22:03

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
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
lunar

Dienstag 6. April 2010, 22:07

Ausprobieren :) Aber wieso sollte es auch nicht gehen?
Benutzeravatar
snafu
User
Beiträge: 5494
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mittwoch 7. April 2010, 07:30

@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.
shcol (Repo | Doc | PyPi)
Antworten