ich habe eine Frage zu meinem Code hier:
Zum einen sollen die Ergebnisse auf der Konsole ausgegeben werden, aber leider weiß ich nicht wie ich das umändern kann. Hab das in einer Textdatei ausgeben lassen.
Zum anderen ist das Programm nur eingeschränkt lauffähig bzw. muss man da Python 2 verwenden und ein Encoding angeben. Wie kann ich das umgehen, sodass es überall lauffähig wird?
Und die Ausgabe soll in Spalten sein, was hier nicht der Fall ist.
Die Aufgabe war hierzu: Ein Programm schreibem, dass den Benutzer zur Aufgabe eines Suchworts auffordeert und dann eine KWIC-Analyse ausgibt.
Man soll auf die Stopwords zugreifen und das Korpus aus der Datei poe.txt. einlesen. Dabei soll auch beim Lesen von UTF-8 Dateien das Encoduing explizit angegeben werden
Nach der Suchwort-Eingabe, soll das Programm alle Stellen finden, an denen dieses Suchwort im Korpus steht. Diese Fundstellen sollen mit einem Kontext von jeweils 5 Token vor und 5 Token hinter dem Suchwort auf die Konsole ausgegeben werden.Eine Fundstelle pro Zeile
Und zum schluss soll folgendes ausgegeben werden:
- Gesamtzahl der Fundstellen des Suchwortes (d.h. wie viele Treffer gab es insgesamt?)
- Tabelle mit den fünf häufigsten Kollokaten (Worttypen im Kontext) absteigendsortiert nach der Häufigkeit, mit der sie im Kontext des Suchwortes aufgetreten sind.
Code: Alles auswählen
# Menge mit Stopwords
stopwords = set(["I", "i", "me", "my", "mine", "myself", "you",
"your", "yours", "yourself", "he", "him", "his",
"himself", "she", "her", "herself", "it", "its",
"itself", "we", "us", "our", "ours", "ourselves",
"yourselves", "they", "them", "their", "theirs",
"themselves", "that", "this", "those", "these",
"the", "a", "an", "is", "was", "are", "am", "will",
"would", "can", "could", "may", "might", "ought",
"to", "too", "and", "or", "either", "neither",
"also", "nor", "of", "no", "not", "none", "some",
"any", "few", "much", "less", "be", "as", "than",
"but", "'s", "has", "have", "had", "were", "been",
"in", "into", "for", "with", "to", "by", "on", "at",
"upon", "about", "around", "within", "without", "through",
"from", "out", "so", "there", "here", "where",
"who", "which", "that", "one", "two", "three",
"up", "down"])
# Text einlesen und unnötige Zeichen entfernen
text = unicode(open('poe.txt','Ur').read(),'utf-8')
text = text.replace("\t"," ").replace("\n"," ")
import re
text = re.sub("[ ]+", " ", text)
textListe = text.split()
# Suchwort-Eingabe
Suchwort = raw_input("Bitte Suchwort eingeben: ").lower()
# Variablen deklarieren:
# Dictionary für die Wörter in der Umgebung des Suchwortes
kollokateDict = { }
# Umgebungsgröße festsetzen (Tokenanzahl)
umgebung = 5
# Anzahl des gesuchten Wortes im Text
Wortanzahl = 0
# Anzahl der Ausgabe von Wörter
AusgabeGrenze = 5
# Ausgabedatei
outfile = open('ergebnis.txt', 'w')
i=0
# eine Iteration über jedes Wort des Textes
while (i < len(textListe)):
wort = textListe[i].lower()
# Wenn das gesuchte Wort gleich aktuellem Wort ist
if (wort == Suchwort):
# dann wird die Wortanzahl um 1 erhöht
Wortanzahl += 1
# dann wird die Umgebung vor und nach 5 Wörter ins Dict geschrieben
for k in range(0,(2*umgebung)+1):
if (i-umgebung+k >= 0 and i-umgebung+k < len(textListe)):
umgebungswort = textListe[i-umgebung+k].lower()
if umgebungswort in kollokateDict:
kollokateDict[umgebungswort] += 1
else:
kollokateDict[umgebungswort] = 1
#Die ganze Umgebung, also 11 Wörter werden in der Ausgabedatei geschrieben
print >> outfile, " ".join(textListe[max(i-umgebung,0):min(i+umgebung+1,len(textListe))])
i = i + 1
print >> outfile, "\nTabelle mit den 5 haeufigsten Kollokaten"
# Absteigende Sortierung der Liste nach der Häufigkeit
kollokateListe = sorted(kollokateDict, key=kollokateDict.get, reverse=True)
i=0
while (i < AusgabeGrenze):
# Ausgabe der 5 häufigsten Kollokaten (ohne Stopwords)
if ((kollokateListe[i] == Suchwort) or (kollokateListe[i] in stopwords)):
AusgabeGrenze += 1
else:
print >> outfile, str(kollokateListe[i]) + "\t\t" + str(kollokateDict[kollokateListe[i]])
i += 1
print >> outfile, "\nDas gesuchte Wort '" + Suchwort + "' kommt " + str(Wortanzahl) + " mal vor."
outfile.close()
print "Das Ergebnis befindet sich in der Datei 'ergebnis.txt'."
Danke
Gruß
Mary