# 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
Processing tagesschau files
# Define folder name
= "subtitles" subtitles
if Path("data").exists():
print("Using cached file...")
with bz2.BZ2File("data", 'r') as f:
= pickle.load(f)
df print("Imported and processed", len(df), "subtitle files")
else:
print("Importing data from subtitle files...")
= get_data(subtitles)
df 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
"Length"] = df["Cleaned Text"].str.len()
df[# create text length var
= df.groupby(['Date'])['Length'].transform(max) == df['Length']
idx # create index with TRUE/FALSE indication whether text is the longest per date
= df[idx]
df # filter df for index
= df.groupby('Date').first().reset_index()
df "Date"].value_counts() df[
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
= ht.HanoverTagger('morphmodel_ger.pgz') tagger
# Check if cached version exists
if Path("Tagged").exists():
print("Using cached file")
with bz2.BZ2File("Tagged", 'r') as f:
= pickle.load(f)
texts_nounsadj print("Done!")
else:
=[]
texts_nounsadj= 0
i
# Tokenize Words, i.e. save texts as lists of individual words
for text in df["Cleaned Text"]:
= nltk.word_tokenize(text, language = "german")
tokens
# Get stem of each word and tag as NN, NE, ADJA...
= tagger.tag_sent(tokens)
tagged
# 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+element[1]+" "
cleantext
# Create list of cleaned texts
texts_nounsadj.append(cleantext)
# Update counter
= i + 1
i 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
"Tagged"] = texts_nounsadj
df["Tagged"][0] df[
'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
= CountVectorizer(lowercase=False, min_df = 20) cv
= cv.fit_transform(df["Tagged"]) matrix
matrix
<2717x5208 sparse matrix of type '<class 'numpy.int64'>'
with 613425 stored elements in Compressed Sparse Row format>
= pd.DataFrame(matrix.toarray(),
counts =cv.get_feature_names())
columns
"Date"] = df["Date"]
counts[= counts.drop(counts.filter(regex=".*\\d+.*").columns,axis=1) counts
= counts.T # or df1.transpose()
counts 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.csv") counts.to_csv(