# ---------------------------------------------------------------------------- # Dieses Script kann Textfiles mittels verschiedenen Verfahren anhand einer # Blacklist auf Spam überprüfen. # # Das Script ist Bestandteil der Studienarbeit 2 von Flavio Steger und Simon # Eggler, Studenten Studienrichtung TET, HTW Chur. # # Version: 1.6 # letzte Änderung: 28.05.2009 # # @author Flavio Steger # @author Simon Eggler # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- # Die Funktion splitText trennt einen Text in ein Array von einzelnen Wörtern. # als Trennzeichen wird nur das Leerzeichen verwendet. # # @param textToSplit Text, der getrennt werden soll # @return Array mit den einzelnen Wörtern # ---------------------------------------------------------------------------- splitText <- function (textToSplit){ textToSplit <- unlist(strsplit(textToSplit," ")) return (textToSplit) } # ---------------------------------------------------------------------------- # Die Funktion blacklistVerfahren liest eine Textfile ein und prüft, ob ein # enthaltenes Wort auf der Blacklist steht. # # @return TRUE, wenn eines der Wörter auf Blacklist; False, wenn keines der # Wörter im Text auf Blacklist # ---------------------------------------------------------------------------- blacklistVerfahren <- function (){ inputText <- readText() splittedText <- splitText(inputText) blacklist <- readBlacklist() i <- 1 isSpam <- FALSE while(i<=length(splittedText)){ j <- 1 while(j<=length(row(blacklist[1]))){ if(splittedText[i]==blacklist[j,1]){ isSpam <- TRUE j <- length(row(blacklist[1])) i <- length(splittedText) } j <- j+1 } i <- i+1 } return(isSpam) } # ---------------------------------------------------------------------------- # Die Funktion bayesischesVerfahren liest eine Textfile ein und prüft den Text # anhand der Werte in der Blacklist auf die Spamwahrscheinlichkeit. # # @return Faktor in Prozent, der aus den Blacklistwerten errechnet wird # ---------------------------------------------------------------------------- bayesischesVerfahren <- function (){ inputText <- readText() splittedText <- splitText(inputText) blacklist <- readBlacklist() i <- 1 faktor <- 0 anzTreffer <- 0 while(i<=length(splittedText)){ j <- 1 while(j<=length(row(blacklist[1]))){ if(splittedText[i]==blacklist[j,1]){ if(anzTreffer == 0){ faktor = (blacklist[j,2]/100) }else{ newFaktor <- (blacklist[j,2]/100) faktor <- ((faktor * newFaktor)/((faktor * newFaktor) + (1-faktor) * (1-newFaktor))) } anzTreffer <- anzTreffer+1 } j <- j+1 } i <- i+1 } return(round(faktor*100,digits=2)) } # ---------------------------------------------------------------------------- # Die Funktion readText liest ein beliebiges Textfile ein. Es wird ein Öffnen- # Dialog angezeigt. # # @return Text, der aus ausgwähltem Textfile ausgelesen wird # ---------------------------------------------------------------------------- readText <- function (){ y <- file(file.choose(), "r") x <- readLines(y,warn = FALSE) close(y) return (x) } # ---------------------------------------------------------------------------- # Die Funktion readBlacklist liest die Blacklist, bestehend aus einer zwei- # spaltigen CSV-Datei, ein. Pfad: "c:/test/blacklist.csv" # # @return Tabelle mit Blacklist-Schlagwörtern und Gewichtung # ---------------------------------------------------------------------------- readBlacklist <- function (){ x<-read.csv2("c:/test/blacklist.csv",header=TRUE) return (x) } # ---------------------------------------------------------------------------- # Die Funktion menu zeigt ein Hauptmenu an, wo man das anzuwendende Verfahren # auswählen sowie das Programm beenden kann. # ---------------------------------------------------------------------------- menu <- function (){ cat("Verfahren auswählen:\n") cat("1 Blacklist-Verfahren\n") cat("2 Bayesisches Verfahren\n") cat("3 beenden\n", sep = "") choice<-readline() if(choice==1){ if(blacklistVerfahren() == TRUE){ cat("\n\n\nErgebnis:\nEs haldelt sich um einen Spamtext\n\n\n") }else{ cat("\n\n\nErgebnis:\nEs haldelt sich nicht um einen Spamtext\n\n\n") } menu() } if(choice==2){ ergebnis = bayesischesVerfahren() cat("\n\n\nErgebnis:\nDie Wahrscheinlichkeit, dass es sich um einen Spamtext handelt beträgt",ergebnis,"%\n\n\n") menu() } if(choice==3){ q(save="no") } if(choice!=1&choice!=2){ cat("Falsche Eingabe!","\n\n") menu() } } # ---------------------------------------------------------------------------- # Beim Start des Scripts wird direkt das Menu angezeigt. # ---------------------------------------------------------------------------- menu()