Meine Wenigkeit ist an ein Modul interessiert, dass Sprachauffällige Wörterkombinationen in Zusammenhang des Alters als "Interessant" einstuft und anfängt zu loggen.
Mein Datenbankmodell könnte wie folgt aussehen:
Kategorien:
Stellen die Art der "Vergehen" dar und haben die Aufgabe, anhand der Priorität, massiven Einfluss auf die Gewichtung der Formel zu nehmen.
Badwords:
Die Wörter sollen einzeln oder in Kombination eingespeist werden, was in der Datenbank so aussehen könnte:
1. Bsp: "Arschloch" prio: "1" Kat. "Beleidigung" cat_prio: 1
2. Bsp: "um|bring_en_" prio: 8 Kat. "Straftat" cat_prio: 10
Ich habe z.b. solch eine Umsetzungsidee:
Wie in Bsp. 2 soll PHP nun als Pattern nach folgenden Kriterien suchen:
Dabei habe ich mir eine Formel "entwickelt":
Prioritätenfühler P:
P = Prio des Wortes * Prio der Cat
P_insgesamt = SUM(Der P's) / Anzahl der Funde
Wenn ein Text gesucht wird, wird abgewogen:
Der Text: "du arschloch, du volltrottel"
ergibt für arschloch (1 *1)
ergibt für volltrottel (1*1)
Macht:
P_insgesamt = ( P1+P2 ) / Anz (wenn anz > =3 dann anz-1 nehmen)
P_insgesamt = ( P1 +P2) / 2 = 1 => nicht loggen
Der Text: "du arschloch, du volltrottel, bastard"
ergibt für arschloch (1 *1)
ergibt für volltrottel (1*1)
ergibt für bastard (1*1)
Macht:
P_insgesamt = ( P1+P2 + P3) / Anz-1
P_insgesamt = ( P1 +P2 + P3) / 3-1
P_insgesamt = ( P1 +P2 + P3) / 2
P_insgesamt = 3 / 2 = 1,5
1,5 > 1 = alarm schlagen (1=ersteht aus der kat.prio)
Der Text: "du arschloch, ich bring dich um" für die kat. straftat mit der prio 10 und der prio des wortes 8
ergibt für arschloch (1 *1)
ergibt für bring uml (10*8)
Macht:
P_insgesamt = ( 1 + 80) / 2
P_insgesamt = ( 81 ) / 2
P_insgesamt = 40,5
40,5 > 10 = alarm schlagen
Achja: P wird nur gezählt, wenn FSK_des_wortes > als das Alter des Users ist.
Will man noch das Alter gewichten, würde ich folgedes machen:
Score = [ P_insgesamt ] + [ Prio des Wortes * (Fsk_des_wortes - Useralter) *4 * Prio der Kat ]
So kann man auch bei der "Kontrolle" der Logfiles nach Score = Wichtigkeit sortieren.
Nächstes Problem: Perfomance
Jedes Mal die DB nach den Wörtern abzufragen, zu vergewaltigen ist natürlich ...
Ich dachte da an einen Cronjob 1 x in der Nacht oder nach dem Ändern der Tabelle crytolog_badwords, dass dieser mir eine PHP-Datei erzeugt, der mir ein Array zusammenbastelt, die ich dann in meiner Klasse verwende, um die ständige DB-Abfrage mir zu ersparen.
Relationen müssen evtll. noch angepasst und verbessert werden. Ich wollte im allgemeinen wissen, was ihr davon haltet? Anregungen & Kritik sind gute und nährhafte Freunde.
Vielen Dank für das Lesen.
Mein Datenbankmodell könnte wie folgt aussehen:
Code:
-- -- Tabellenstruktur für Tabelle `cryptolog_badwords` -- CREATE TABLE `cryptolog_badwords` ( `bw_id` int(11) NOT NULL auto_increment, `bw_word` varchar(255) collate latin1_general_ci NOT NULL default '', `bw_cat` int(10) NOT NULL default '0', `bd_fsk` int(2) NOT NULL default '0', `bd_prio` int(4) NOT NULL default '0', PRIMARY KEY (`bw_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Tabellenstruktur für Tabelle `cryptolog_cat` -- CREATE TABLE `cryptolog_cat` ( `cat_id` int(8) NOT NULL auto_increment, `cat_name` varchar(255) collate latin1_general_ci NOT NULL default '', `cat_prio` int(8) NOT NULL default '0', PRIMARY KEY (`cat_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=5 ; -- -- Daten für Tabelle `cryptolog_cat` -- INSERT INTO `cryptolog_cat` VALUES (1, 'Kindes Missbrauch', 8); INSERT INTO `cryptolog_cat` VALUES (2, '************uelle Belästigung', 3); INSERT INTO `cryptolog_cat` VALUES (3, 'Diffamierung, Beleidigung', 1); INSERT INTO `cryptolog_cat` VALUES (4, 'Straftat', 10); -- -------------------------------------------------------- -- -- Tabellenstruktur für Tabelle `cryptolog_logfiles` -- CREATE TABLE `cryptolog_logfiles` ( `log_id` int(10) NOT NULL auto_increment, `log_score` int(10) NOT NULL default '0', `log_date` datetime NOT NULL default '0000-00-00 00:00:00', `log_u1_ip` varchar(255) collate latin1_general_ci NOT NULL default '', `log_u1_cl` text collate latin1_general_ci NOT NULL, `log_u1_host` varchar(255) collate latin1_general_ci NOT NULL default '', `log_u2_ip` varchar(255) collate latin1_general_ci NOT NULL default '', `log_u2_cl` text collate latin1_general_ci NOT NULL, `log_u2_host` varchar(255) collate latin1_general_ci NOT NULL default '', `log_text` text collate latin1_general_ci NOT NULL, `log_u1_age` tinyint(2) NOT NULL default '0', `log_u2_age` tinyint(2) NOT NULL default '0', PRIMARY KEY (`log_id`), KEY `log_score` (`log_score`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
Kategorien:
Stellen die Art der "Vergehen" dar und haben die Aufgabe, anhand der Priorität, massiven Einfluss auf die Gewichtung der Formel zu nehmen.
Badwords:
Die Wörter sollen einzeln oder in Kombination eingespeist werden, was in der Datenbank so aussehen könnte:
1. Bsp: "Arschloch" prio: "1" Kat. "Beleidigung" cat_prio: 1
2. Bsp: "um|bring_en_" prio: 8 Kat. "Straftat" cat_prio: 10
Ich habe z.b. solch eine Umsetzungsidee:
Wie in Bsp. 2 soll PHP nun als Pattern nach folgenden Kriterien suchen:
PHP-Code:
$pattern = "~(umbringen|bring (.*) um|um (.*) bring)~s";
Prioritätenfühler P:
P = Prio des Wortes * Prio der Cat
P_insgesamt = SUM(Der P's) / Anzahl der Funde
Wenn ein Text gesucht wird, wird abgewogen:
Der Text: "du arschloch, du volltrottel"
ergibt für arschloch (1 *1)
ergibt für volltrottel (1*1)
Macht:
P_insgesamt = ( P1+P2 ) / Anz (wenn anz > =3 dann anz-1 nehmen)
P_insgesamt = ( P1 +P2) / 2 = 1 => nicht loggen
Der Text: "du arschloch, du volltrottel, bastard"
ergibt für arschloch (1 *1)
ergibt für volltrottel (1*1)
ergibt für bastard (1*1)
Macht:
P_insgesamt = ( P1+P2 + P3) / Anz-1
P_insgesamt = ( P1 +P2 + P3) / 3-1
P_insgesamt = ( P1 +P2 + P3) / 2
P_insgesamt = 3 / 2 = 1,5
1,5 > 1 = alarm schlagen (1=ersteht aus der kat.prio)
Der Text: "du arschloch, ich bring dich um" für die kat. straftat mit der prio 10 und der prio des wortes 8
ergibt für arschloch (1 *1)
ergibt für bring uml (10*8)
Macht:
P_insgesamt = ( 1 + 80) / 2
P_insgesamt = ( 81 ) / 2
P_insgesamt = 40,5
40,5 > 10 = alarm schlagen
Achja: P wird nur gezählt, wenn FSK_des_wortes > als das Alter des Users ist.
Will man noch das Alter gewichten, würde ich folgedes machen:
Score = [ P_insgesamt ] + [ Prio des Wortes * (Fsk_des_wortes - Useralter) *4 * Prio der Kat ]
So kann man auch bei der "Kontrolle" der Logfiles nach Score = Wichtigkeit sortieren.
Nächstes Problem: Perfomance
Jedes Mal die DB nach den Wörtern abzufragen, zu vergewaltigen ist natürlich ...
Ich dachte da an einen Cronjob 1 x in der Nacht oder nach dem Ändern der Tabelle crytolog_badwords, dass dieser mir eine PHP-Datei erzeugt, der mir ein Array zusammenbastelt, die ich dann in meiner Klasse verwende, um die ständige DB-Abfrage mir zu ersparen.
Relationen müssen evtll. noch angepasst und verbessert werden. Ich wollte im allgemeinen wissen, was ihr davon haltet? Anregungen & Kritik sind gute und nährhafte Freunde.
Vielen Dank für das Lesen.
Kommentar