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

unwichtig

parent 14d8705d
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 ueber 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 verfuegbaren 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, ';', '\"', '\\');
/**
* ueberspringen der Bezeichner-Zeile
*/
reader.readNext();
makeCleaned(reader, cleaned);
} catch (IOException e) {
e.printStackTrace();
}
return cleaned;
}
/**
* Iteriert ueber jede einzelne Zeile des CSV-files und
<<<<<<< HEAD
* beurteilt, ob die relevanten Spalteneintraege korrekt sind.
* Beinhaltet ausserdem einen counter id, der zu jeder Tweet-
* Zeile hinzgefuegt wird, um einen besseren Primaerschluessel zu haben
=======
* beurteilt, ob die relevanten Spalteneintraege korrekt sind.
* Beinhaltet ausserdem einen counter id, der zu jeder Tweet-
* Zeile hinzgefuegt wird, um einen besseren Primaerschluessel zu haben
>>>>>>> 026c8d506e2fe3f7508be8129ff7c7d50c608900
*/
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] = "";
}
}
/**
<<<<<<< HEAD
* ueberprueft, ob das Handle tatsaechlich einer der
* Praesidentschaftskandidaten ist
=======
* ueberprueft, ob das Handle tatsaechlich einer der
* Praesidentschaftskandidaten ist
>>>>>>> 026c8d506e2fe3f7508be8129ff7c7d50c608900
*/
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 Zeilenumbrueche aus den Texten
*/
tweet[1] = splitFor(tweet[1], "\n");
/**
* ueberprueft, 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;
}
/**
<<<<<<< HEAD
* ueberprueft, ob time einen tatsaechlichen
=======
* ueberprueft, ob time einen tatsaechlichen
>>>>>>> 026c8d506e2fe3f7508be8129ff7c7d50c608900
* 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 fuegt ihn ohne
* das T wieder zusammen.
*/
tweet[4] = splitFor(tweet[4], "T");
boolean validTP = isValidTimestamp(tweet[4]);
/**
* ueberprueft, 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 gewuenschten Format
* zu parsen. Bei Erfolg wird true, bei Fehler false zurueckgegeben
*/
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 fuegt 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;
}
}
import java.util.ArrayList;
public class Converttweet{
String[] tweetToHashtag(String text){
// Zu Beginn werden zwei Wahrheitswerte initialisiert um die Sonderfaelle zu beruecksichtigen
boolean readedChar = false;
boolean inHashtag = false;
// und zwei Array Listen um die Hashtags zusammenzufuegen 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 ueberrpuefen wann wir nach lesen eines # ein neuen Hashtag zu einem eintrag in unsere Liste umwandeln koennen, dafuer gibt es naehmlich 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]);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment