Processing tagesschau files

Author

Felix Grünewald

# Import functions
from glob import glob
import re
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np

from string import punctuation

import HanoverTagger as ht

import nltk

from pathlib import Path
import pickle
import bz2

import MyFunctions
from MyFunctions import get_data
# Define folder name
subtitles = "subtitles"
if Path("data").exists():
    print("Using cached file...")
    with bz2.BZ2File("data", 'r') as f:
        df = pickle.load(f)
    print("Imported and processed", len(df), "subtitle files")
else:
    print("Importing data from subtitle files...")
    df = get_data(subtitles)
    with bz2.BZ2File("data", 'w') as f:
        pickle.dump((df), f)
    print("Imported and processed", len(df), "subtitle files")
Using cached file...
Imported and processed 11976 subtitle files
df["Length"] = df["Cleaned Text"].str.len()
# create text length var
idx = df.groupby(['Date'])['Length'].transform(max) == df['Length']
# create index with TRUE/FALSE indication whether text is the longest per date
df = df[idx]
# filter df for index
df = df.groupby('Date').first().reset_index()
df["Date"].value_counts()
2020-06-05    1
2017-11-08    1
2020-05-23    1
2019-12-24    1
2020-12-06    1
             ..
2018-05-18    1
2021-11-25    1
2015-02-15    1
2016-07-10    1
2017-06-23    1
Name: Date, Length: 2717, dtype: int64
df
Date Text Moderator Cleaned Text Time Title Length
0 2014-11-01 Hier ist das Erste Deutsche Fernsehen mit der ... Susanne Daubner der bundespräsident gauck äußerte sich in thür... 2000 Das_Erste-2014-11-01-ts-2000.txt 10102
1 2014-11-02 Hier ist das Erste Deutsche Fernsehen mit der ... Jan Hofer der ungeachtet internationaler kritik wird im ... 1715 Das_Erste-2014-11-02-ts-1715.txt 11412
2 2014-11-03 Hier das Erste Deutsche Fernsehen mit der tage... Jens Riewa hier das erste deutsche fernsehen mit der mein... 2000 Das_Erste-2014-11-03-ts-2000.txt 11182
3 2014-11-04 Hier ist das Erste Deutsche Fernsehen mit der ... Susanne Holst der für bahnreisende eine hiobsbotschaft in di... 1700 Das_Erste-2014-11-04-ts-1700.txt 10382
4 2014-11-05 Hier ist das Erste Deutsche Fernsehen mit der ... Judith Rakers der tageschau machte das rennen in arkansas un... 2000 Das_Erste-2014-11-05-ts-2000.txt 11745
... ... ... ... ... ... ... ...
2712 2022-04-16 Hier ist das Erste Deutsche Fernsehen mit der ... Jens Riewa der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-16-ts-2000.txt 10318
2713 2022-04-17 Hier ist das Erste Deutsche Fernsehen mit der ... Jens Riewa der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-17-ts-2000.txt 10825
2714 2022-04-18 Hier ist das Erste Deutsche Fernsehen mit der ... Julia-Niharika Sen der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-18-ts-2000.txt 12130
2715 2022-04-19 Hier ist das Erste Deutsche Fernsehen mit der ... Julia-Niharika Sen der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-19-ts-2000.txt 12454
2716 2022-04-20 Hier ist das Erste Deutsche Fernsehen mit der ... Susanne Daubner der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-20-ts-2000.txt 12790

2717 rows × 7 columns

import HanoverTagger as ht

tagger = ht.HanoverTagger('morphmodel_ger.pgz')
# Check if cached version exists
if Path("Tagged").exists():
    print("Using cached file")
    with bz2.BZ2File("Tagged", 'r') as f:
        texts_nounsadj = pickle.load(f)
    print("Done!")

else:
    texts_nounsadj=[]
    i = 0

    # Tokenize Words, i.e. save texts as lists of individual words
    for text in df["Cleaned Text"]:
        tokens = nltk.word_tokenize(text, language = "german")

        # Get stem of each word and tag as NN, NE, ADJA...
        tagged = tagger.tag_sent(tokens)

        # Go through every word of the text, add it to cleaned Text if NN (Nouns) or NE (Eigenname)
        cleantext = ""
        for element in tagged: 
            if element[2] in ("NE", "NN"): #"NN", "ADJA", "VVFIN", "VAFIN"
                cleantext=cleantext+element[1]+" "

        # Create list of cleaned texts
        texts_nounsadj.append(cleantext)

        # Update counter
        i = i + 1
        print(i, "/", len(df["Cleaned Text"]), "file(s) processed", end='\r')
        
    print("Saving file")

    # Save file
    with bz2.BZ2File("Tagged", 'w') as f:
        pickle.dump((texts_nounsadj), f)
        
    print("Done!")
Saving file file(s) processed
Done!
# Add list of cleaned Texts to DF
df["Tagged"] = texts_nounsadj
df["Tagged"][0]
'Kritik Osten Ukraine Abstimmung Separatist Volksrepublik Bürger Republikchef Regionalparlament Westen Regierung Kiew Abstimmung Ergebnis Mio Kontrollposten Präsenz Separatist Lage Wahl Kiew Westen Straße Rebell Lugansk Donezk Stimmabgabe Wahllokal Ort Militär Wahlkommission Volksrepublik Wähler Stimme Kriegsregion Beobachter Mensch Donezk Wahlkommission Stimmabgabe Internet Wähler Welt Welt Internet Chance Wahl Favorit Alexander Sachartschenko Volksrepublik Donezk Wahl Moskau Korrespondentin Birgit Opposition Wahl Kandidat Abspaltung Kiew Urnengang Separatist Volksrepublik Spaltung Land Regierung Abstimmung Ermittlungsverfahren Machtübernahme Abspaltung Land Osze Abstimmung Abkommen Anerkennung Wahl Lage Entspannung Wahl Linkspartei Spd Bundespräsident Gauck Äußerung Koalition Thüringen Neutralität Gauck Interview Infrage Vorstellung Sed Bodo Ramelow Ministerpräsident Koalition Kommentar Bedenken Bundespräsident Bericht Berlin Joachim Gauck Frage Vorstellung Sed Unterdrückung Mensch Bundeslinke Thüringen Spd Mitgliedervotum Bundespräsident Gauck Mitgliedervotum Rolle Gauck Partei Kritik Spdvize Stegner Tagesspiegel Gauck Frage Parteipolitik Grünenchef Özdemir Gauck Ddr Bundespräsident Gauck Spinner Bundesverfassungsgericht Frage Richtung Einmischung Tagesgeschehen Bundespräsident Gauck Wort Interview Joachim Gauck Bericht Berlin Uhr Arbeitnehmer Teilrente Sitzung Koalitionsarbeitsgruppe Dienstag Sozialministerin Nahles Grenze Arbeitnehmer Jahr Teilrente Arbeitszeit Möglichkeit Maßnahme Erderwärmung Kopenhagen Bericht Studie Experte Ausstoß Treibhausgas Ende Jahrhundert Berechnung Wechsel Brennstoff Energie Zeit Klimakatastrophe Ozean Atmosphäre Erwärmung Klimawandel Region Folge Klimawandel Mensch Folge Forscher Weltklimarate Technik Erderwärmung 2gradgrenz Schaden Umwelt Politiker Mensch Wirtschaft Kapazität Ausstoß Treibhausgas Mrd T Richtungszeig Kohleindustrie Ölindustrie Investition Zukunft Bericht Klimaverhandlung Grundlage Diskussion Machtübernahme Militär Burkina Faso Protest Hauptstadt Mensch Aufstieg Armeevertreter Regierungsspitze Vizechef Präsidentengarde Staatschef Präsident Compaore Exhauptmann Jahr Macht Straße Mensch Ouagadougou Hauptstadt Burkina Faso Demokratie Banner Soldat Revolution Militär Soldat Sicherheit Land Unmut Isaac Zida Vizekommandeur Garde Militär Staatschef Aussetzung Verfassung Neuwahl Monat Militärregierung Opposition Mensch Jahr Rücktritt Präsident Präsident Jahrzehnt Verfassung Mensch Protest Neuwahl Militärführung Zweifel Demokratie Welt Zivilperson Westen Militär Westen Kritik Un Bundesregierung Usa Machtübergabe Übergangsregierung New York Sicherheitsvorkehrung Lauf Marathon Teilnehmer Strecke Million Zuschauer Bombenanschlag Boston Zugangskontrolle Sicherheit Manhattan Ziel Sicherheitsvorkehrung Kamera Absperrung Polizist Spezialeinheit Einsatz Marathon Welt Zuschauer Anschlagsziel Polizei Bostonmaratho Nähe Ziellinie Bombe Sicherheit Anschlag Bostonmaratho Aufmerksamkeit Polizei Mensch Sicherheit Niveau Drohung Rollstuhlfahrer Manhattan Publikum Lauf Welt State Island Brooklyn Ziel Glück Central Park Leipzig Dokfestival Ende Dok Leipzig Festival Dokumentar Animationsfilm Gewinner Franzose Stempel Arbeitsmarkt Unterfangen Regel Du Spielregel Film Alltagsgeschichte Filmemacher Taube Jury Film Geschichte Büro Wärme Menschlichkeit Balance Menschlichkeit Zeitgeschichte Film Wettbewerb Abchasien Georgien Sportminister Frau Land Beleg Unabhängigkeit Film Leipzig Liga Dokfilmfestival Uhr Saal Leute Glücksgefühl Festival Zuschauerrekord Cottbus Schlosskirche Gemeinde Brandenburg Weltkrieg Synagoge Synagoge Nationalsozialist Brand Schlosskirche Gemeinde September Ende Januar Synagoge Sonntagsspiel Fußballbundesliga Borussia Mönchengladbach Hoffenheim Wetteraussicht Teil Wetter Tag Luftdruck Südosten Hochdruckeinflus Nacht Süden Nebel Norden Westen Nordsee Bucht Alpen Lausitz Sonne Wolke Gebietsweise Regen Gipfellage Orkanbö Dienstag Wolke Gebietsweise Regen Osten Südosten Alpen Mittwoch Änderung Donnerstag Sonnenschein Uhr '
df
Date Text Moderator Cleaned Text Time Title Length Tagged
0 2014-11-01 Hier ist das Erste Deutsche Fernsehen mit der ... Susanne Daubner der bundespräsident gauck äußerte sich in thür... 2000 Das_Erste-2014-11-01-ts-2000.txt 10102 Bundespräsident Gauck Thüringen Plan Regierung...
1 2014-11-02 Hier ist das Erste Deutsche Fernsehen mit der ... Jan Hofer der ungeachtet internationaler kritik wird im ... 1715 Das_Erste-2014-11-02-ts-1715.txt 11412 Kritik Osten Ukraine Abstimmung Separatist Vol...
2 2014-11-03 Hier das Erste Deutsche Fernsehen mit der tage... Jens Riewa hier das erste deutsche fernsehen mit der mein... 2000 Das_Erste-2014-11-03-ts-2000.txt 11182 Fernsehen Dame Herr Streik Lokführergewerkscha...
3 2014-11-04 Hier ist das Erste Deutsche Fernsehen mit der ... Susanne Holst der für bahnreisende eine hiobsbotschaft in di... 1700 Das_Erste-2014-11-04-ts-1700.txt 10382 Woche Lokführer Donnerstagmorgen Personenverke...
4 2014-11-05 Hier ist das Erste Deutsche Fernsehen mit der ... Judith Rakers der tageschau machte das rennen in arkansas un... 2000 Das_Erste-2014-11-05-ts-2000.txt 11745 Tageschau Rennen Arkansa Senator Washington Re...
... ... ... ... ... ... ... ... ...
2712 2022-04-16 Hier ist das Erste Deutsche Fernsehen mit der ... Jens Riewa der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-16-ts-2000.txt 10318 Sendung Ndr Zusage Rüstungshilfe Ukraine Unter...
2713 2022-04-17 Hier ist das Erste Deutsche Fernsehen mit der ... Jens Riewa der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-17-ts-2000.txt 10825 Sendung Ndr Hafenstadt Mariupol Ultimatum Vert...
2714 2022-04-18 Hier ist das Erste Deutsche Fernsehen mit der ... Julia-Niharika Sen der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-18-ts-2000.txt 12130 Sendung Ndr Einschätzung Ukraine Anzeichen Beg...
2715 2022-04-19 Hier ist das Erste Deutsche Fernsehen mit der ... Julia-Niharika Sen der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-19-ts-2000.txt 12454 Sendung Ndr Osten Ukraine Großoffensive Gebiet...
2716 2022-04-20 Hier ist das Erste Deutsche Fernsehen mit der ... Susanne Daubner der diese sendung wurde vom ndr live untertite... 2000 Das_Erste-2022-04-20-ts-2000.txt 12790 Sendung Ndr Führungsspitze Hennigwellsow Rückt...

2717 rows × 8 columns

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(lowercase=False, min_df = 20)
matrix = cv.fit_transform(df["Tagged"])
matrix
<2717x5208 sparse matrix of type '<class 'numpy.int64'>'
    with 613425 stored elements in Compressed Sparse Row format>
counts = pd.DataFrame(matrix.toarray(),
                      columns=cv.get_feature_names())

counts["Date"] = df["Date"]
counts = counts.drop(counts.filter(regex=".*\\d+.*").columns,axis=1)
counts = counts.T # or df1.transpose()
counts
0 1 2 3 4 5 6 7 8 9 ... 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716
Aachen 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Ab 0 0 0 0 0 0 0 0 0 1 ... 0 0 0 0 0 0 0 0 0 0
Abbas 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Abbau 0 0 0 0 1 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Abboud 0 0 0 0 0 0 0 0 0 0 ... 1 1 0 0 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Überzahl 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Überzeugung 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Überzeugungsarbeit 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Übung 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 1
Date 2014-11-01 00:00:00 2014-11-02 00:00:00 2014-11-03 00:00:00 2014-11-04 00:00:00 2014-11-05 00:00:00 2014-11-06 00:00:00 2014-11-07 00:00:00 2014-11-08 00:00:00 2014-11-09 00:00:00 2014-11-10 00:00:00 ... 2022-04-11 00:00:00 2022-04-12 00:00:00 2022-04-13 00:00:00 2022-04-14 00:00:00 2022-04-15 00:00:00 2022-04-16 00:00:00 2022-04-17 00:00:00 2022-04-18 00:00:00 2022-04-19 00:00:00 2022-04-20 00:00:00

5196 rows × 2717 columns

counts.to_csv("Counts.csv")