Skip to content
Snippets Groups Projects
Commit be7d505d authored by Ivan Condric's avatar Ivan Condric
Browse files

Hinzufügen der ganzen Java Dateien

parents
No related branches found
No related tags found
No related merge requests found
import au.com.bytecode.opencsv.CSVReader;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
public class Cleaner {
public static void main(String[] args) {
Cleaner cleaner = new Cleaner();
String[] topLayerCleaned = cleaner.cleanup();
cleaner.write(topLayerCleaned);
}
/**
* nutzt das saubere Array um einen neuen csv-file zu erstellen
*/
private void write(String[] topLayerCleaned) {
try {
/**
* initialisiere Writer
*/
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("cleanedElection.csv"), "Cp1252"));
System.out.println(topLayerCleaned.length);
writer.write("id; handle; text; is_retweet; original_author; time; in_reply_to_screen_name; retweet_count; favorite_count" + System.getProperty("line.separator"));
/**
* iteriere über die Elemente des Arrays
* jedes Element ist eine Zeile
*/
for(String line : topLayerCleaned) {
System.out.println(line);
writer.write(line + System.getProperty("line.separator") );
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Auslagerung der Initalisierungen etc. aus der main-Methode
*/
private String[] cleanup() {
CSVReader reader;
/**
* aus der Betrachtung des files wissen wir,
* dass wir 6126 Zeilen mit Daten haben
*/
String[] cleaned = new String[6126];
try {
/**
* initiiere reader
* in unserem Fall nutzen wir einen CSVReader
* der frei verfügbaren opencsv-library,
* was das Splitten der einzelnen Zeilen verinfacht,
* da CSVReader auch Angaben wie ";;" korrekt liest
*/
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream("american-election-tweets.csv"), "Cp1252"));
reader = new CSVReader(bufferedReader, ';', '\"', '\\');
/**
* überspringen der Bezeichner-Zeile
*/
reader.readNext();
makeCleaned(reader, cleaned);
} catch (IOException e) {
e.printStackTrace();
}
return cleaned;
}
/**
* Iteriert über jede einzelne Zeile des CSV-files und
* beurteilt, ob die relevanten Spalteneinträge korrekt sind.
* Beinhaltet außerdem einen counter id, der zu jeder Tweet-
* Zeile hinzgefügt wird, um einen besseren Primärschlüssel zu haben
*/
private String[] makeCleaned(CSVReader reader, String[] cleaned) throws IOException {
String[] tweet;
int id = 0;
while ((tweet = reader.readNext()) != null) {
id++;
for(int i = 0; i < tweet.length; i++) {
if (tweet[i] == null){
tweet[i] = "";
}
}
/**
* überprüft, ob das Handle tatsächlich einer der
* Präsidentschaftskandidaten ist
*/
boolean validPolitician = false;
boolean politicianBool = true;
if(tweet[0].equals("realDonaldTrump")){
politicianBool = true;
validPolitician = true;
} else if (tweet[0].equals("HillaryClinton")){
politicianBool = false;
validPolitician = true;
}
/**
* entfernt Zeilenumbrüche aus den Texten
*/
tweet[1] = splitFor(tweet[1], "\n");
/**
* überprüft, ob is_retweet einen Boolean darstellt
*/
boolean isRetweet = true;
boolean validRetweet = false;
if(tweet[2].equals("True")){
isRetweet = true;
validRetweet = true;
} else if (tweet[2].equals("False")){
isRetweet = false;
validRetweet = true;
}
/**
* überprüft, ob time einen tatsächlichen
* timestamp darstellt
* Da alle Timestamps in der Form "yyyy-MM-ddT HH:mm:ss",
* also mit einem T, das nicht geparset werden kann, gegeben sind,
* splittet diese Methode den Timestamp nach dem T auf und fügt ihn ohne
* das T wieder zusammen.
*/
tweet[4] = splitFor(tweet[4], "T");
boolean validTP = isValidTimestamp(tweet[4]);
/**
* überprüft, ob retweet_Count und favorite_Count
* Integer darstellen
*/
boolean validRTCount = true;
boolean validFVTCount = true;
int retweetCount = 0;
int favoriteCount = 0;
try {
retweetCount = Integer.parseInt(tweet[7]);
} catch (NumberFormatException e){
validRTCount = false;
}
try {
favoriteCount = Integer.parseInt(tweet[8]);
} catch (NumberFormatException e){
validFVTCount = false;
}
/**
* nur wenn bei den vorherigen Tests immer true
* herausgekommen ist, wird die modifizierte Zeile
* in das sauber Array aufgenommen
*/
if(validPolitician && validRetweet && validTP && validRTCount && validFVTCount) {
cleaned[id - 1] = id + ";" + politicianBool + ";\"" + tweet[1] + "\";" + isRetweet + ";" + tweet[3] + ";" + tweet[4] + ";" + tweet[5] + ";" + retweetCount + ";" + favoriteCount;
}
}
return cleaned;
}
/**
* versucht den angegebenen String mit dem gewünschten Format
* zu parsen. Bei Erfolg wird true, bei Fehler false zurückgegeben
*/
public boolean isValidTimestamp(String timeString) {
SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
format.parse(timeString);
return true;
} catch (ParseException e) {
return false;
}
}
/**
* Diese Methode splittet den gegebenen String
* nach dem "splitfor" auf und fügt ihn ohne
* das "splitfor" wieder zusammen.
*/
private String splitFor(String timeString, String splitfor) {
String[] split = timeString.split(splitfor);
split[0] = split[0] + " ";
String together = "";
for(int i = 0; i < split.length; i++){
together = together + split[i];
}
return together;
}
}
\ No newline at end of file
import java.util.ArrayList;
public class Converttweet{
String[] tweetToHashtag(String text){
// Zu Beginn werden zwei Wahrheitswerte initialisiert um die Sonderfälle zu berücksichtigen
boolean readedChar = false;
boolean inHashtag = false;
// und zwei Array Listen um die Hashtags zusammenzufügen und in eine Ausgabeliste zu speichern
ArrayList<Character> hashtaglist = new ArrayList<Character>();
ArrayList<String> ausgabeliste = new ArrayList<String>();
// Mithilfe dieser Schleife gehen wir durch jedes Zeichen im Tweet
// Die Wahrheitswerte helfen uns zu überrpüfen wann wir nach lesen eines # ein neuen Hashtag zu einem eintrag in unsere Liste umwandeln können, dafür gibt es nähmlich folgende Regeln:
// Vor einem # kommt entweder beliebig viele Sonderzeichen oder Leerzeichen und wenn nicht dann ist es der tweetanfang
// Nach einem # kommt mindestens 1 nicht Sonderzeichen und wenn ein Sonderzeichen kommt oder das tweetende dann ist der Hashtag beendet
// Sonderfall 1: nach einem # kommt ohne Sonderzeichen ein weiteres # dann ist es kein Hashtag mehr
// Sonderfall 2: nach einem # kommt kein nicht Sonderzeichen dann auch kein Hashtag
// Sonderzeichen :
char[] tweet = text.toCharArray();
for(int i = 0; i< tweet.length;i++)
{
if(readedChar){
if(tweet[i]==' '){
readedChar = false;
}
}else{
if(inHashtag){
if(tweet[i]=='#' ){
inHashtag = false;
hashtaglist.clear();
}
else if(tweet[i]==' ' || tweet[i]== '.' || tweet[i]=='!' || tweet[i]=='$' || tweet[i]=='%' || tweet[i]=='^' || tweet[i]=='&' || tweet[i]=='*' || tweet[i]=='+')
{
inHashtag = false;
String hashtag = "";
for(int j = 0; j < hashtaglist.size();j++){
hashtag = hashtag + hashtaglist.get(j);
}
ausgabeliste.add(hashtag);
hashtaglist.clear();
}
else
{
hashtaglist.add(tweet[i]);
}
}else{
//inHashtag == false
if (tweet[i] == '#'){
inHashtag = true;
hashtaglist.add(tweet[i]);
}else if(tweet[i]==' '|| tweet[i]== '.' || tweet[i]=='!' || tweet[i]=='$' || tweet[i]=='%' || tweet[i]=='^' || tweet[i]=='&' || tweet[i]=='*' || tweet[i]=='+')
{
}else{
// wenn kein Sonderzeichen gelesen wird
readedChar = true;
}
}
}
}
if(hashtaglist.size()>1) // wenn die Liste nicht leer ist ;
{
String hashtag = "";
for(int j = 0; j < hashtaglist.size();j++){
hashtag = hashtag + hashtaglist.get(j);
}
ausgabeliste.add(hashtag);
}
String[] ausgabe = new String[ausgabeliste.size()];
ausgabe = ausgabeliste.toArray(new String[0]);
return ausgabe;
}
public static void main(String[] args){
String tweetnr1 = " !#Hilla #covfefer#covfefey is s#covfefeo c#covfefeool i #covfefemust invite her to #covfefe$";
Converttweet CT = new Converttweet();
String[] Hashtags = CT.tweetToHashtag(tweetnr1);
for(int i = 0;i < Hashtags.length;i++)
{
System.out.println(Hashtags[i]);
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<mxfile userAgent="Mozilla/5.0 (Linux; Android 5.1; XT1032 Build/LPBS23.13-56-2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36" version="6.7.2" editor="www.draw.io" type="google"><diagram name="Page-1">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</diagram></mxfile>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>DBS_Projekt</groupId>
<artifactId>DBS_Projekt</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/net.sf.opencsv/opencsv -->
<dependency>
<groupId>net.sf.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
CREATE TABLE public."Hashtag"
(
text text NOT NULL,
"amountTweets" integer,
CONSTRAINT "PrimaryKeyHashtag" PRIMARY KEY (text)
)
CREATE TABLE public."Tweet"
(
"ID" integer NOT NULL,
"Handle" boolean,
"Text" text,
"isRetweet" boolean,
"originalAuthor" text,
"timestamp" timestamp without time zone,
"inReplyTo" text,
"retweetCount" integer,
"favoriteCount" integer,
CONSTRAINT "PrimaryKey" PRIMARY KEY ("ID")
)
CREATE TABLE public.has
(
"ID" integer NOT NULL,
text text NOT NULL,
CONSTRAINT "PrimaryKeyHas" PRIMARY KEY ("ID", text),
CONSTRAINT "Fremdschluessel" FOREIGN KEY ("ID")
REFERENCES public."Tweet" ("ID") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT "Fremdschluessel2" FOREIGN KEY (text)
REFERENCES public."Hashtag" (text) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
CREATE TABLE public."tweetedWith"
(
"Hashtag1" text NOT NULL,
"Hashtag2" text NOT NULL,
CONSTRAINT "PrimaryKeyTweetetWith" PRIMARY KEY ("Hashtag1", "Hashtag2"),
CONSTRAINT "FremdschluesselTweetedWith1" FOREIGN KEY ("Hashtag1")
REFERENCES public."Hashtag" (text) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT "FremdschluessselTweetedWith2" FOREIGN KEY ("Hashtag2")
REFERENCES public."Hashtag" (text) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment