In this project, we will analyze large text databases in English to generate language models for various purposes. We’ll explore text data provided by SwiftKey and answer key questions about file size, line length, word frequencies, and specific text occurrences in the dataset.
# Load necessary libraries
library(stringr)
library(dplyr)
library(ggplot2)
We start by downloading and loading the necessary data files.
# Increase timeout to 300 seconds (5 minutes)
options(timeout = 300)
# Step 1: Download the zip file
url <- "https://d396qusza40orc.cloudfront.net/dsscapstone/dataset/Coursera-SwiftKey.zip"
destfile <- "Coursera-SwiftKey.zip"
download.file(url, destfile)
# Step 2: Unzip the contents
unzip(destfile, exdir = "swiftkey_data")
# Step 3: List all text files in the unzipped folder
text_files <- list.files("swiftkey_data", recursive = TRUE, pattern = "\\.txt$", full.names = TRUE)
# Step 4: Create a named list to store file contents
file_names <- basename(text_files) # Extract file names
texts <- setNames(lapply(text_files, readLines), file_names)
# Check the names of the files
names(texts)
## [1] "de_DE.blogs.txt" "de_DE.news.txt" "de_DE.twitter.txt"
## [4] "en_US.blogs.txt" "en_US.news.txt" "en_US.twitter.txt"
## [7] "fi_FI.blogs.txt" "fi_FI.news.txt" "fi_FI.twitter.txt"
## [10] "ru_RU.blogs.txt" "ru_RU.news.txt" "ru_RU.twitter.txt"
# Optionally inspect the content of one of the files (e.g., the first one)
cat(texts[[1]][1:10]) # Shows the first 10 lines of the first text file
## Irgendwann wird es Zeit. Ich schleppe es ja auch jeden Tag mit mir herum. Da leidet es schon ein wenig. Nicht nur die Tasten gehen kaputt, auch habe ich immer wieder auf ein mal kein Netz wo ich früher keine Probleme hatte. Wovon ich rede? Mein Handy. Ein HTC Smartphone, ca 2,5 Jahre alt. Kommentar: auch hier wird durch die Voranstellung einer entsprechenden Bemuskelung des Halses vor die Eleganz die Sportlichkeit der Rasse betont. In vielen Staaten veranlasst vor allem die Hoffnung auf bessere Erwerbsmöglichkeiten die Menschen dazu, sich in einer der stark expandierenden Großstädte niederzulassen. Für die Gesundheit hat dies jedoch einige negative Folgen. Bereits im Juni veröffentlichte das Forscherteam um Prof. Andreas Meyer-Lindenberg vom Zentralinstitut für seelische Gesundheit gemeinsam mit Kollegen der McGill Universität in Montreal erstmals konkrete Studienergebnisse, die ein erhöhtes Risiko psychischer Krankheiten wieDepressionen, Angststörungen oder Schizophrenie in den Großstädten belegten. Den Angaben der Forscher zufolge lässt sich tendenziell festhalten, dass mit zunehmender Größe des Wohnorts auch das Erkrankungsrisiko steigt. Dabei spielen verschiedenste Faktoren wie die Lärmbelastung, Luftverschmutzung (z. B. Feinstaubbelastung), die Enge der Bebauung, die schlechten Lichtverhältnisse und sozialer Stress ein wesentliche Rolle. Die jeweiligen Risikofaktoren wurden in zahlreichen zurückliegenden Studien separat sowie auch im Zusammenspiel untereinander eingehend wissenschaftlich untersucht – mit erschreckendem Ergebnis. So kann allein der Lärm ausreichen, um das Immunsystem nachhaltig zu schwächen. Insbesondere ab einer Lautstärke von 55 Dezibel während der Nacht, stört Lärm den Schlafrhythmus, was auf Dauer ein erhöhtes Herzinfarktrisiko mit sich bringt, so die Aussage der Experten. Dieser Effekt tritt den Forschern zufolge auch auf, wenn die Betroffenen sich durch den Lärm gar nicht bewusst gestört fühlen > www.heilpraxisnet.de Nneka – Heartbeat (Crada Remix ft. NAS) Der arabische Frühling hat noch gar nicht begonnen. Das wahre Gefängnis ist nicht die Diktatur. Die Diktatur ist nur die erste Mauer, aber dahinter befindet sich das echte Gefängnis, sozusagen der Hochsicherheitstrakt, das sind die Kultur und die Frage des Islam. Diese Probleme wurden noch nicht angegangen, und darum sage ich, der arabische Frühling hat noch nicht wirklich begonnen. In Tunesien gibt es vielleicht einen kleinen Anfang, aber nicht mehr. In Ägypten bewegt sich noch gar nichts, die Frage des Islamismus ist ungelöst, ebenso die Frage der Kopten. Im Land leben 15 Millionen Christen, aber laut der Verfassung ist der Islam Staatsreligion. Was ist also mit diesen 15 Millionen? Sind sie keine Bürger? Es wird interessant, wenn in Libyen oder Tunesien oder Ägypten gewählt wird. Wenn die Islamisten gewinnen, werden sie wieder eine Diktatur errichten, sei es eine sanfte Diktatur wie in der Türkei, sei es eine Diktatur wie in Iran. Wenn die Demokraten gewinnen, gibt es mehrere Möglichkeiten. In Ägypten könnten sie dank der Armee gewinnen. Das ist dann aber keine echte Demokratie, man wird Demokraten beobachten, die in die Kasernen gehen, um ihre Anweisungen zu erhalten. Das wäre eine vielleicht intelligente Militärdiktatur. In Libyen drohen ein Bürgerkrieg und die Teilung des Landes. Die Regionen im Süden und Osten sind kulturell nicht reif für die Demokratie, vielleicht sind es die urbanen Regionen um Tripolis. In Algerien ist es ähnlich, einige Regionen sind reif für die Demokratie, andere nicht. (…) Sie sitzen ihm gegenüber, ordnen ihre Papiere, er blickt auf das Fenster hinter der Kommission. Dort an der Scheibe spiegelt sich ihr Gesicht, die Augen, der Horizont, die Kakteen, blaugrün schimmernd. Er atmet ein, als sie ihm die ersten Fragen stellen. Er atmet aus, beginnt er zu antworten. Er spürt sein Herz schlagen. Die Augen, sie lächeln. Siebenundsechzig, wiedermal. Das gibts doch nicht, warum kann ich nicht einfach mal durchhalten? Meine Abnehmversuche sind echt zum verzweifeln. Ab jetzt halt ich durch, wirklich. Und zur Strafe wird morgen der GANZE Tag gefastet. Das muss ich einfach schaffen! Ich persönlich bedauere halt den Wegfall der Ticker. Hat dieser doch die schnelle Navigation in seinen (und allen) Gruppen ermöglicht. Leider habe ich keine Ersatzlösung bis jetzt gefunden. Diesen Eindruck machte er allerdings nicht. Weltgewandt, authentisch und mit einer ausgezeichneten Präsentation setzte er in den Räumen der Katholischen Hochschulgemeinde ein Zeichen, das die Zuhörer nicht vergessen werden. „Es erstaunt mich, wie ihr hier lebt“, sagte er in akzeptablem Englisch. „Keine nächtlichen Razzien, keine Militärpräsenz. Ihr werdet auf der Straße nicht beschossen.“ Seine Worte kommen nicht von ungefähr. Einige aus seiner Familie sind von israelischen Soldaten angeschossen worden, mehrere andere Menschen aus dem 5.000-Seelen-Ort wurden in den letzten Jahren einfach umgebracht. Es ist einer der schlimmsten Orte der Welt. Aber hier erstmal die Bilder:
file_info <- file.info("swiftkey_data/final/en_US/en_US.blogs.txt")
file_size_mb <- file_info$size / (1024^2) # Convert bytes to megabytes
cat("File size of en_US.blogs.txt:", file_size_mb, "MB\n")
## File size of en_US.blogs.txt: 200.4242 MB
num_lines_twitter <- length(texts[["en_US.twitter.txt"]])
cat("Number of lines in en_US.twitter.txt:", num_lines_twitter, "\n")
## Number of lines in en_US.twitter.txt: 2360148
max_blog_line <- max(nchar(texts[["en_US.blogs.txt"]]))
max_news_line <- max(nchar(texts[["en_US.news.txt"]]))
max_twitter_line <- max(nchar(texts[["en_US.twitter.txt"]]))
# Find the longest line
longest_line <- max(max_blog_line, max_news_line, max_twitter_line)
longest_source <- ifelse(longest_line == max_blog_line, "en_US.blogs.txt",
ifelse(longest_line == max_news_line, "en_US.news.txt",
"en_US.twitter.txt"))
cat("Longest line in en_US data sets:", longest_line, "characters\n")
## Longest line in en_US data sets: 40833 characters
cat("Dataset with the longest line:", longest_source, "\n")
## Dataset with the longest line: en_US.blogs.txt
love_count <- length(grep("love", texts[["en_US.twitter.txt"]]))
hate_count <- length(grep("hate", texts[["en_US.twitter.txt"]]))
love_hate_ratio <- love_count / hate_count
cat("Ratio of 'love' to 'hate' occurrences in en_US.twitter.txt:", love_hate_ratio, "\n")
## Ratio of 'love' to 'hate' occurrences in en_US.twitter.txt: 4.108592
biostats_tweet <- grep("biostats", texts[["en_US.twitter.txt"]], value = TRUE)
cat("Tweet containing 'biostats':\n", biostats_tweet, "\n")
## Tweet containing 'biostats':
## i know how you feel.. i have biostats on tuesday and i have yet to study =/
exact_phrase <- "A computer once beat me at chess, but it was no match for me at kickboxing"
matching_tweets <- length(grep(exact_phrase, texts[["en_US.twitter.txt"]], fixed = TRUE))
cat("Number of tweets with the exact phrase:", matching_tweets, "\n")
## Number of tweets with the exact phrase: 3
The one tweet in the en_US twitter data set that matches the word “biostats” says that they have not studied for their biostats exam.
We have successfully loaded and analyzed large English text databases, addressing questions about file size, line lengths, word occurrences, and specific text patterns. This exploration provides a solid foundation for further natural language processing tasks in subsequent modules.