Anfänger braucht Hilfe zur Arbeit mit Korpus - Anfängerfrage(n)

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.
Antworten
emmielayka
User
Beiträge: 5
Registriert: Donnerstag 24. März 2016, 14:06

Hallo,

Ich bin noch ziemlich neu auf dem Gebiet der Programmierung und mache wahrscheinlich ganz simple Fehler, aber ich probiere schon seit gestern morgen herum und komme einfach nicht drauf, was ich falsch mache.

Ich habe ein Korpus, also eine Textsammlung ("my_corpus") erstellt, mit Songtexten von Michael Jackson und diese kategorisiert in "erfolgreich" und "nicht_erfolgreich". Die Textdateien in meinem Ordner sehen also so aus: erfolgreich_001, erfolgreich_002 etc. (insgesamt 10 Stück) und nicht_erfolgreich_001, nicht erfolgreich_002 etc. (9 Stück).

Mein code sieht bisher so aus:

Code: Alles auswählen

from nltk.corpus import CategorizedPlaintextCorpusReader
my_corpus = CategorizedPlaintextCorpusReader('C:\Python34\my_corpus',
r'.*', cat_pattern=r'(.*)_.*')

files_erfolgreich = my_corpus.fileids(categories = "erfolgreich")
files_nicht_erfolgreich = my_corpus.fileids(categories = "nicht_erfolgreich")
print(files_erfolgreich)
print(files_nicht_erfolgreich)
Wie gewünscht erhalte ich auch als Ausgabe meine Textdateien nach Kategorien geordnet:

['erfolgreich_001.txt', 'erfolgreich_002.txt', 'erfolgreich_003.txt', 'erfolgreich_004.txt', 'erfolgreich_005.txt', 'erfolgreich_006.txt', 'erfolgreich_007.txt', 'erfolgreich_008.txt', 'erfolgreich_009.txt', 'erfolgreich_010.txt']
['nicht_erfolgreich_001.txt', 'nicht_erfolgreich_002.txt', 'nicht_erfolgreich_003.txt', 'nicht_erfolgreich_004.txt', 'nicht_erfolgreich_005.txt', 'nicht_erfolgreich_006.txt', 'nicht_erfolgreich_007.txt', 'nicht_erfolgreich_008.txt', 'nicht_erfolgreich_009.txt']
['erfolgreich', 'nicht_erfolgreich']


Mein Problem ist aber, dass ich damit nichts machen kann. Ob ich mir einfach die Dateien öffnen will

Code: Alles auswählen

(f=open('files_erfolgreich','rU')
raw=f.read()
tokens = nltk.word_tokenize(raw)
text = nltk.Text(tokens)
oder ob ich die Konkordanz, also den Kontext eines bestimmten Wortes anzeigen lassen will

Code: Alles auswählen

(erfolgreich_001.concordance("part"))

Ich erhalte z.B. im letzten Fall die Fehlermeldung:

Traceback (most recent call last):
File "C:\Python34\hausarbeit.py", line 20, in <module>
erfolgreich_001.concordance("part")
NameError: name 'erfolgreich_001' is not defined

Ich kapier auch nie, ob ich dem Programm sagen muss, dass ich die Konkordanz (als Bsp.) einer bestimmten Datei (z.B. erfolgreich_001.txt) oder aller Dateien einer Kategorie (files_erfolgreich) haben will. Hilfreich wäre beides.

Wäre total toll, wenn mir jemand helfen könnte. Ich bin kurz vorm Verzweifeln. Wenn noch etwas unklar ist oder ihr mehr Infos braucht, fragt.
Zuletzt geändert von Anonymous am Donnerstag 24. März 2016, 14:35, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
BlackJack

@emmielayka: Am besten arbeitest Du erst einmal ein Grundlagentutorial für Python durch. Damit Du Dich von der falschen Vorstellung befreist das Zeichenketten und Namen irgendwie das gleiche oder austauschbar sind, oder irgendwelche Namen ausser den dokumentierten, eingebauten Namen auf magische Weise zu existieren beginnen, oder das `open()` eine Liste mit Dateinamen als erstes Argument bekommt.

`CategorizedCorpusReader` scheint mir keine geeignete Klasse zu sein um einen Korpus zu lesen, denn das ist laut Dokumentation nur eine Mixin-Klasse für Reader die Kategorien enthalten können. Das kannst Du also verwenden um eigene Reader-Klassen zu implementieren.
emmielayka
User
Beiträge: 5
Registriert: Donnerstag 24. März 2016, 14:06

Erstmal danke für die Antwort.

Ich habe keine Zeit für ein solches Tutorial, da ich in einigen Tagen meine Hausarbeit abgeben muss. Das NLTK-Buch von Steven Bird habe ich gelesen.

Den Vorschlag, den CategorizedCorpusPlaintextReader zu verwenden, habe ich von meiner Dozentin.

Ich bin sicher, wenn man mir einmal zeigt, an welchen stellen ich welchen Fehler begangen habe, dass es dann klick bei mir macht. Ich beschäftige mich nur schon seit Tagen damit und hab das Gefühl einfach den Wald vor lauter Bäumen nicht mehr zu sehen.

Wenn ich die open Funktion anhand einer ganz bestimmten Datei verwende anstatt der Dateiliste files_erfolgreich

open('erfolgreich_001', 'r')

er halte ich ebenso kein Ergebnis.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

emmielayka hat geschrieben:open('erfolgreich_001', 'r')
Soweit ich Deine Angaben richtig deute, existiert bei Dir auch keine Datei `erfolgreich_001`.
emmielayka hat geschrieben:[…] er halte ich ebenso kein Ergebnis.
Und welches Ergebnis erwartest Du denn?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
emmielayka
User
Beiträge: 5
Registriert: Donnerstag 24. März 2016, 14:06

mutetella hat geschrieben:
emmielayka hat geschrieben:open('erfolgreich_001', 'r')
Soweit ich Deine Angaben richtig deute, existiert bei Dir auch keine Datei `erfolgreich_001`.
emmielayka hat geschrieben:[…] er halte ich ebenso kein Ergebnis.
Und welches Ergebnis erwartest Du denn?
Doch, die Datei befindet sich in meinem Korpus-Ordner "my_corpus".

Ich möchte einfach nur die Datei lesen, also einfach nur den gesamten Text, der darin enthalten ist, ausgegeben bekommen.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@emmielayka
Ok, laut Deinem Einstiegspost heißt die Datei 'erfolgreich_001.txt', aber nun gut. Wenn dem so ist, dann erhältst Du via `open()` ein fileobject. Und was genau ist jetzt Dein Problem?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@emmielayka: Du willst also eine Programmiersprache verwenden ohne die Programmiersprache zu lernen. Das wird nicht funktionieren, denn programmieren durch ”raten” und wild herum probieren funktioniert nur zu einem gewissen Grad und sicher nicht bei so komplexen und umfangreichen Rahmenwerken wie NLTK.

Dein Fehler ist, das Du keine Ahnung hast wie Python funktioniert. Das kann nicht einfach so ”klick” machen, das muss man sich erarbeiten.
emmielayka
User
Beiträge: 5
Registriert: Donnerstag 24. März 2016, 14:06

mutetella hat geschrieben:@emmielayka
Ok, laut Deinem Einstiegspost heißt die Datei 'erfolgreich_001.txt', aber nun gut. Wenn dem so ist, dann erhältst Du via `open()` ein fileobject. Und was genau ist jetzt Dein Problem?
Ja, im Ordner wird der Dateiname ohne die Endung .txt angezeigt, da war ich nicht deutlich genug. In meinem Code hab sie jedenfalls erfolgreich_001.txt genannt.

Mein Problem ist, dass die open-Funktion nichts ausgibt, sondern ich die Fehlermeldung

Traceback (most recent call last):
File "C:\Python34\hausarbeit.py", line 38, in <module>
open('erfolgreich_001.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'erfolgreich_001.txt'

erhalte, obwohl sich die Datei definitiv im angegebenen Ordner befindet.



Hier nochmal der Code:

Code: Alles auswählen

import nltk
from nltk.corpus import CategorizedPlaintextCorpusReader
my_corpus = CategorizedPlaintextCorpusReader('C:\Python34\my_corpus',
r'.*', cat_pattern=r'(.*)_.*')

files_erfolgreich = my_corpus.fileids(categories = "erfolgreich")
files_nicht_erfolgreich = my_corpus.fileids(categories = "nicht_erfolgreich")
print(files_erfolgreich)
print(files_nicht_erfolgreich)

print(open('erfolgreich_001.txt', 'r'))
Zuletzt geändert von Anonymous am Donnerstag 24. März 2016, 17:49, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
BlackJack

@emmielayka: Dann ist das Verzeichnis nicht das aktuelle Arbeitsverzeichnis und Du musst beim öffnen den Pfad zu der Datei angeben, entweder absolut oder relativ zum aktuellen Arbeitsverzeichnis. Pfadteile zusammensetzen geht mit `os.path.join()`.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

emmielayka hat geschrieben:[…] obwohl sich die Datei definitiv im angegebenen Ordner befindet.
Sei mir nicht böse, aber ich glaube den Angaben im Traceback mehr… :wink: In dem Verzeichnis, innerhalb dessen Du `open()` aufrufst (→ `C:\Python34\') befindet sich keine `erfolgreich_001.txt`. Definitiv!

Und wenn dann das open-Problem gelöst ist, was erwartest Du von ``print(open('erfolgreich_001.txt', 'r'))``?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
emmielayka
User
Beiträge: 5
Registriert: Donnerstag 24. März 2016, 14:06

mutetella hat geschrieben:
emmielayka hat geschrieben:[…] obwohl sich die Datei definitiv im angegebenen Ordner befindet.
Sei mir nicht böse, aber ich glaube den Angaben im Traceback mehr… :wink: In dem Verzeichnis, innerhalb dessen Du `open()` aufrufst (→ `C:\Python34\') befindet sich keine `erfolgreich_001.txt`. Definitiv!
Verständlich, würde mir umgekehrt genauso gehen ;)

Ich habe ein Foto vom Ordner gemacht:
http://www.bilder-upload.eu/show.php?fi ... 840592.jpg

Bild

(Sorry, dass es auf dem Kopf steht)

Das Verzeichnis heißt doch C:\Python34\my_corpus?! Den Pfad sieht man auch auf dem Bild.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

emmielayka hat geschrieben:Das Verzeichnis heißt doch C:\Python34\my_corpus?!
Du musst Dir unsere Antworten schon auch genau durchlesen. Ich habe Dir geschrieben, dass sich in dem Verzeichnis, aus dem heraus Du versuchst, `erfolgreich_001.txt` zu öffnen, diese Datei nicht befindet. Und BlackJack hat Dir eine Lösung dazu gegeben. `C:\Python34\my_corpus\` ist eben nicht `C:\Python34\`… :wink:
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
miracle173
User
Beiträge: 127
Registriert: Samstag 6. Februar 2016, 00:28

Noranora hat geschrieben:(...)
ich bin leider nicht so der Pro
(...)
Daher habeich es nun mit NLTK versucht.
(...)
merve28 hat geschrieben: (...)
Ich mache es nach dem Beispiel in Bird´s NLTK book:
(...)
Ich bin Programmieranfänger
(...)
emmielayka hat geschrieben: (...)
Ich bin noch ziemlich neu auf dem Gebiet der Programmierung

(...)
Das NLTK-Buch von Steven Bird habe ich gelesen.
(...)
Da fällt mir ein Muster auf. Vielleicht ist es sinnvoll, wenn ihr euch gegenseitig unterstützt, ihr arbeitet mit den gleichen Tools und habt ähnliche Phyton und nltk Kenntnisse. Ich habe keine Thread von euch gefunden, bei denen ein anderer von euch etwas geposted hat.
Antworten