2017-02-17 4 views
0

Ich habe einen preußischen Zeitungskorpus für die Jahre 1863 bis 1894 und möchte das Wort Nutzung im Zeitverlauf darstellen. Das Korpus besteht aus ungefähr 2400 xml Dateien, eine Datei für jedes Problem. Wenn ich die ConditionalFreqDist plotten würde, würde ich einen Graphen mit 2400 Datenpunkten auf der x-Achse bekommen, der den Graphen unlesbar macht.Datenpunkte in NLTKs ConditionalFreqDist zusammenfügen

Wie kann ich die Informationen für das gleiche Jahr zusammenführen und die durchschnittliche Verwendung jedes Wortes in meiner Suchliste anzeigen u_input? ZB: Ich habe 3 Dateien für das Jahr 1863, suche nach dem Wort 'König' - König (neben anderen Suchbegriffen), die erste Datei enthält 1 Erwähnung, die 2. Datei 3 und die 3. Datei 2. Ich hätte gerne die Grafik dazu habe nur einen Datenpunkt '1863' mit dem Wert '2'.

Die Plotten Funktion:

def _plot_input(): 
    cfd = nltk.ConditionalFreqDist(
     (target, fileid[:-4]) # takes first 4 characters as lable names = year 
     for fileid in reader.fileids() # for all files in directory 
     for w in reader.words(fileid) # for all words in each file 
     for target in u_input 
     if w.lower().startswith(target) # includes words like 'könliglich' if search term was 'König' 
    ) 
    cfd.plot(title='Word usage over time in Prussian Newspapers') 

u_input ist eine Liste, die die Worte ich analysieren, reader ist mein corpusreader Objekt, werden die Dateien wie diese yyyy-mm-dd.xml genannt, z.B. "1867-03-06.xml".

Vielen Dank im Voraus.

Bearbeiten: Die schnelle Lösung wäre, über alle Dateien zu wiederholen, alle Dateien beginnend mit dem gleichen Jahr zu lesen und den Inhalt in eine einzige neue Datei für jedes Jahr zu schreiben.

Antwort

1

Um das Jahr aus dem Dateinamen zu extrahieren, müssen Sie fileid[:4], nicht fileid[:-4] schreiben. Sobald Sie das tun, werden Sie nur so viele x Positionen haben, wie es verschiedene Jahre in Ihrem Korpus gibt. Dies entspricht genau der "Quick Fix", die Sie vorschlagen.

Die y Werte sind jedoch Summen für das Jahr, nicht pro Datei Durchschnittswerte in jedem Jahr, wie Sie fragen. Wenn dies wirklich das ist, was Sie brauchen, bearbeiten Sie Ihre Frage, um zu klären. (Ich vermute, dass das, was Sie wirklich brauchen, ein Durchschnitt über die Gesamtzahl der Wörter in einem Jahr ist; alles andere ist Unsinn, es sei denn, alle Ihre Dateien sind genau gleich groß.)