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

habs gelöst, sehr nett dankeschön... ;)
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

shuang hat geschrieben:Ich möchte einfach nur wissen, wieso mein Ordner= Korpus
nicht eingelesen wird.
Ich möchte doch einfach nur die Textdateien im Ordner Korpus auf dem Desktop einlesen lassen, sonst nichts.


Wenn ich das ganze über die Eingabeaufforderung durchführe, bekomme ich eine txt datei aus dem Eigene Dateien Ordner aufgelistet. Obwohl ich doch den genauen Pfad auf meinem Desktop zeige.
Kenne glob zwar nicht aber das sollte funtkionieren:

Code: Alles auswählen

import glob, os

path = "C:\\Users\Sharon\Desktop\Korpus"



for fname in glob.glob("*.txt"):
    with open(os.path.join(path, fname), "r") as infile:
        for line in infile:
            print line 
Habs nicht ausprobiert.
[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

Ist es möglich, nachdem ich die z.b 10 verschiedenen Texte mit glob eingelesen habe, den Inhalt jedes einzelnen Textes separat zu zählen?
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Also, wenn ich das genauso in der Form eingebe, liest er die Textdateien ein, jedoch kann ich die Worte in den Textdateien nicht zählen lassen.
Für jede einzelne Textdatei > Zahl der Worte.

Code: Alles auswählen

import glob

count=0

for fname in glob.glob("C://**/**/Desktop/Korpus/*.txt"):
    with open(fname, "r") as infile:
        for line in infile:
            for word in line:
                count+= 1
                print line
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

shuang hat geschrieben:Also, wenn ich das genauso in der Form eingebe, liest er die Textdateien ein, jedoch kann ich die Worte in den Textdateien nicht zählen lassen.
Für jede einzelne Textdatei > Zahl der Worte.

Code: Alles auswählen

import glob

count=0

for fname in glob.glob("C://**/**/Desktop/Korpus/*.txt"):
    with open(fname, "r") as infile:
        for line in infile:
            for word in line:
                count+= 1
                print line

Code: Alles auswählen

import glob

count=0

for fname in glob.glob("C://**/**/Desktop/Korpus/*.txt"):
    with open(fname, "r") as infile:
        for line in infile:
            for word in line.split():
                count+= 1
                print line
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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

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

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

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

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:

Code: Alles auswählen

if word == word[1]:
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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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

@ Hyperion ich möchte mich doch gar nicht mit dir streiten. Du bist gut im coden ich nicht so gut. Klasse das du mir hilfst.

Also ich erkläre dir mal was ich die ganze Zeit versuche zu tun.

Ich möchte ein Program schreiben, das einen Korpus, also alle meine Texte einliest. Das Programm soll dabei einen Index erstellen, der für jeden Text eine " Liste" vorkommenden Wörter und ihre Häufigkeiten zeigt
:) ;) ;) ;) ;)
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

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
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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

oh ein Missverständnis. Die Anzahl des selbigen Wortes sollen gezählt werden. Nicht die Sätze.
lunar

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

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

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: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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

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
Antworten