Seite 2 von 2
Re: ---
Verfasst: Montag 5. April 2010, 19:37
von Darii
shuang hat geschrieben:Meine Herren , ich mache da was falsch

)))))))))))))
[...]
Gibts Dich auch in intelligent? Du hast einen IQ von 6... bei 8 grunzt die Sau!
Was falsch ist, dass sich selbst nach solchen Posts immer noch Leute finden, die dir antworten(:K@INFACT), da fehlt mir das Verständnis für.
Re: ---
Verfasst: Montag 5. April 2010, 20:09
von Hyperion
Darii hat geschrieben:shuang hat geschrieben:Meine Herren , ich mache da was falsch

)))))))))))))
[...]
Gibts Dich auch in intelligent? Du hast einen IQ von 6... bei 8 grunzt die Sau!
Was falsch ist, dass sich selbst nach solchen Posts immer noch Leute finden, die dir antworten(:K@INFACT), da fehlt mir das Verständnis für.
Naja, er hat es ja immerhin noch eingesehen:
shuang hat geschrieben:
habs gelöst, sehr nett dankeschön... Wink
Ok, ein Wort des guten Willens vermisse ich auch - etwa "Sorry, hatte nen Brett vorm Kopf. Danke, jetzt hab ich es endlich kapiert..."
Aber was solls.
Ich werde das Gefühl auch immer noch nicht los, dass es da eine Sprachbarriere gibt... der Nickname und die Art erinnern mich leider immer noch an gewisse Leute, die einem hier an der Uni Tag täglich das Leben schwer machen. Leider äußert sich der OP ja nicht zu Rückfragen...
Verfasst: Montag 5. April 2010, 20:15
von shuang
Code: Alles auswählen
import glob
count=0
while count != ????:
for fname in glob.glob("C://**/**/Desktop/Korpus/*.txt"):
with open(fname, "r") as infile:
for line in infile:
for word in line.split():
if word == word[1]:
count+= 1
print line, count
1. Was muss an den Stellen an denen ich die Fragezeichen gesetzt habe hin, damit die Worte in den Texten gezählt werden?
2. Wie kann ich obwohl ich mit Glob alle Textdateien einlese, dennoch die Texte trennen?
Danke
Re: ---
Verfasst: Montag 5. April 2010, 20:17
von shuang
Hyperion hat geschrieben:Darii hat geschrieben:shuang hat geschrieben:Meine Herren , ich mache da was falsch

)))))))))))))
[...]
Gibts Dich auch in intelligent? Du hast einen IQ von 6... bei 8 grunzt die Sau!
Was falsch ist, dass sich selbst nach solchen Posts immer noch Leute finden, die dir antworten(:K@INFACT), da fehlt mir das Verständnis für.
Naja, er hat es ja immerhin noch eingesehen:
shuang hat geschrieben:
habs gelöst, sehr nett dankeschön... Wink
Ok, ein Wort des guten Willens vermisse ich auch - etwa "Sorry, hatte nen Brett vorm Kopf. Danke, jetzt hab ich es endlich kapiert..."
Aber was solls.
Ich werde das Gefühl auch immer noch nicht los, dass es da eine Sprachbarriere gibt... der Nickname und die Art erinnern mich leider immer noch an gewisse Leute, die einem hier an der Uni Tag täglich das Leben schwer machen. Leider äußert sich der OP ja nicht zu Rückfragen...
Entschuldige mich mal, aber was ist eigl dein Problem ?
Ist dir langweilig? Oder willst du einfach nur meine Nr?

hehehehe
Verfasst: Montag 5. April 2010, 20:26
von Hyperion
shuang hat geschrieben:Code: Alles auswählen
import glob
count=0
while count != ????:
for fname in glob.glob("C://**/**/Desktop/Korpus/*.txt"):
with open(fname, "r") as infile:
for line in infile:
for word in line.split():
if word == word[1]:
count+= 1
print line, count
1. Was muss an den Stellen an denen ich die Fragezeichen gesetzt habe hin, damit die Worte in den Texten gezählt werden?
Gar nichts! Wozu das while? Das hat doch mit dem Zählen überhaupt nichts zu tun!
Das hier ergibt auch keinen Sinn:
Diese Bedingung kann niemals wahr werden:
Code: Alles auswählen
In [1]: s = "fo"
In [2]: if s == s[1]:
...: True
...:
...:
In [3]: s[1]
Out[3]: 'o'
s[1] ist der zweite Buchstabe von s. Logisch, dass der niemals dem gesamten Wort entsprechen kann.
Was versuchst Du eigentlich zu erreichen?
2. Wie kann ich obwohl ich mit Glob alle Textdateien einlese, dennoch die Texte trennen?
Was heißt das nun? Willst Du die Wörter für die Texte getrennt zählen? Oder was? "fname" ist ja in jedem Durchlauf ein andererDateiname. Diese könntest Du Dir ja ggf. in einer Datenstruktur merken... für das getrennte Zählen von Worten böte sich da ein dict an:
Code: Alles auswählen
counts = {}
# dann for
# und die ganze Zählerei
# ganz am Ende der äußeren Schleife:
counts[fname] = count
Damit hättest Du dann in counts eine Übersicht von Dateien und deren Wortanzahl.
Re: ---
Verfasst: Montag 5. April 2010, 20:27
von Hyperion
shuang hat geschrieben:
Entschuldige mich mal, aber was ist eigl dein Problem ?
Ist dir langweilig? Oder willst du einfach nur meine Nr?

hehehehe
Ok. Schade, dass ich das erst nach meinem letzten Post gelesen habe... der Fairness für andere spätere Leser lasse ich meine Lösung mal stehen.
@OP: *plonk*
Verfasst: Montag 5. April 2010, 20:34
von shuang
Verfasst: Montag 5. April 2010, 20:51
von INFACT
shuang hat geschrieben:Code: Alles auswählen
import glob
count=0
while count != ????:
for fname in glob.glob("C://**/**/Desktop/Korpus/*.txt"):
with open(fname, "r") as infile:
for line in infile:
for word in line.split():
if word == word[1]:
count+= 1
print line, count
1. Was muss an den Stellen an denen ich die Fragezeichen gesetzt habe hin, damit die Worte in den Texten gezählt werden?
2. Wie kann ich obwohl ich mit Glob alle Textdateien einlese, dennoch die Texte trennen?
Danke
Code: Alles auswählen
import glob
count=0
breakNow = False
for fname in glob.glob("C://**/**/Desktop/Korpus/*.txt"):
if breakNow:
break
with open(fname, "r") as infile:
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 == word[1]: # keine ahnung was das soll!?
count+= 1
print line, count
if len(word) > 1: # vielleicht sollen das keine einzelnen Buchstaben sein?
count += 1
print line, count
@Darii: Mir gings früher genauso mit meinen `Auseinandersetzungen` mit Dauerbaustelle.
Edit: sry hab gerade einen fehler gesehen
Edit2: Habs berichtigt... ist vielleicht nicht ganz so schön aber es geht
Verfasst: Montag 5. April 2010, 20:54
von Hyperion
*seufz* Weil ich zu lieb für diese Welt bin...
Link
Die Idee basiert eben auch auf Dicts.
Letztlich musst Du das für jede datei "neu" binden und Dir nach der Auswertung, bevor Du die nächste Datei vornimmst in das von mir bereits oben vorgeschlagene Dict reinschreiben, so dass Du am Schluss o ne Struktur hast
Code: Alles auswählen
corpus_stats = {
"file1.txt": {
"lorem": 8,
"...": 3
},
"file2.txt": {
...
}
}
Verfasst: Montag 5. April 2010, 20:57
von shuang
oh ein Missverständnis. Die Anzahl des selbigen Wortes sollen gezählt werden. Nicht die Sätze.
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:
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
?
Ich dachte es geht nur mit
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.