Wie "Spam" im Filenamen via Bash erkennen?

Sascha_77

Sascha_77

Aktives Mitglied
Thread Starter
Dabei seit
23.10.2005
Beiträge
763
Reaktionspunkte
98
Nabend.

Ich habe mal wieder ein kleines Problem. Gibt es eine Möglichkeit einen String auf Plausibilität zu prüfen?

Wenn der String zum Beispiel "bT3FurHo_A&UYosx_TWxW1avp" anstatt "Dies_ist_ein_korrekter_Name" lautet soll das Script Alarm schlagen.
 
Geht es um emails?

da läuft die Spam-erkennung nach einem sogenannten Bayes-Filter

Vielleicht gibt es irgendwo fertige librarys die du nutzen kannst...
Vermutlich kann man das verfahren auch auf andere bereiche übertragen.
 
Geht es denn um den Dateinamen oder den Dateiinhalt?

Mit find kannst du reguläre Ausdrücke benutzen und so z.B. alle Dateien suchen, die einen bestimmten string enthalten.
 
Nein es geht nicht um eMails. Es geht um Dateinamen der an einen String übergeben wird.

find wird mir hier nicht viel helfen, da die Namen immer unterschiedlich sind. Ich bräuchte ein Script was auf Misch-Masch im String-Namen prüft. Für php gibt’s ja sowas bei Web-Formularen etc. Da müsste sich doch auch was für bash finden lassen. Php bin ich leider nicht wirklich so bewandert. Hätte da vllt. jemand eine PHP Syntax? Würde reichen wenn, nachdem php geprüft hat ob es "spam" ist, einen returncode ausgibt den ich dann weiter mit bash verarbeiten kann.
 
Wenn du sowas programmieren willst musst du erstmal definieren, wie der mischmasch aussieht!

ständig veränderliche strings erfordern imho eine dynamische datenbank (die selbst dazulernt).
Da es das in anderen bereichen schon sehr ausgereift gibt gab ich den hinweis auf Bayes.

Formulare haben meist nur einfache plausibilitätsprüfungen.. Buchstaben im feld PLZ -> Müll
 
Hier habe ich z.B. was gefunden was auf Namensrichtigkeit prüfen soll:

<?php
$pattern = '#^[\D]+$#';
$subject = 'Hélène Carrère d'Encausse';
if (preg_match('#^[\D]+$#' , $subject)){ echo "OK, $subject passt";
} else {
echo "Fehler, $subject passt nicht";
}
?>
 
Nabend.

Ich habe mal wieder ein kleines Problem. Gibt es eine Möglichkeit einen String auf Plausibilität zu prüfen?

Wenn der String zum Beispiel "bT3FurHo_A&UYosx_TWxW1avp" anstatt "Dies_ist_ein_korrekter_Name" lautet soll das Script Alarm schlagen.


Vielleicht hilft Dir "aspell"!

http://de.wikipedia.org/wiki/GNU_Aspell

Install unter MacOSX via MacPorts
http://docs.moodle.org/19/en/Configuring_aspell_on_Mac_OS_X

Wörterbücher:
ftp://ftp.gnu.org/gnu/aspell/dict/0index.html


Mir persönlich gefällt ja der Paketmanager "homebrew" besser ...
Der Install ist hier erklärt:
http://dbader.org/blog/spell-checking-latex-documents-with-aspell


Dann mußte Dir "nur" noch ein Script hacken, dass Dir den Dateinamen auseinanderfummelt - Rechtschreibung checkt und ??? macht!
 
  • Gefällt mir
Reaktionen: Sascha_77
Hier habe ich z.B. was gefunden was auf Namensrichtigkeit prüfen soll:

Das prüft aber nur ob in dem String keine Zahlen vorkommen. Das ist jetzt nicht gerade die ultimative Namensrichtigkeit...

Genau das meinte tocotronaut: wenn du eine "Definition" dessen hast, was gut/schlecht ist, ist es wohl relativ trivial das umzusetzen. Sofern du nicht definieren kannst, was du genau nicht haben willst, bleibt dir nur eine gigantische Datenbank valider Worte.
Dein PHP Beispiel bekommst du im Terminal mit grep -E '^[^0-9]+$' matched.
 
  • Gefällt mir
Reaktionen: Sascha_77 und tocotronaut
Nein es geht nicht um eMails. Es geht um Dateinamen der an einen String übergeben wird.
An einen String kann man nichts übergeben.

Du solltes mal genau definieren, was an "Dies_ist_ein_korrekter_Name" richtiger ist als an "bT3FurHo_A&UYosx_TWxW1avp".

Ich könnte mir einen Ansatz vorstellen, bei dem der zu prüfende String an bestimmten vordefinierten Zeichen (z. B. Leerzeichen, Punktuationszeichen, Unterstrichen, Bindestrichen) in einzelne Worte gesplitet wird.
Die Worte müssen dann geprüft werden, ob Sie in einem Wörterbuch stehen (Stichwort Rechtschreibprüfung).
Wenn alle (oder ein definierter Prozentsatz) der Worte im Wörterbuch stehen, ist der String gut, wenn nicht ist der böse.

M. E. ist das keine Aufgabe für eine Shell, die ja eher eine Schnittstelle zum betriebssystemkern darstellt.
Eher für Perl oder für besser noch für ein vim Skript.
vim hat den Vorteil, dass es dafür schon Wörterbücher in allen möglichen Sprachen gibt :) h spell).
Damit würde ich es versuchen.

Viel Erfolg
maceis
 
Danke maceis ... ich meinte eigtl. auch Variable und nicht String.

Richtiger an "Dies_ist_ein_korrekter_Name" ist, dass es normale Wörter sind und nicht irgend ein Kaudawelsch.

Ich werde mir dieses aspell was gauloisesbert vorschlug mal angucken. Brauche das zwar nicht für OS X sondern für Debian aber wird es da ja genauso geben. Vllt. kann ich das für meine Zwecke nutzen.
 
Habe mir jetzt was zurechtgebaut.

Code:
echo "$1" | aspell -a -l en | sed -n '2p' > result

size=`stat -c %s result`
if [ "$size" -lt 3 ]
then
echo "Kein Spam"
else
echo "Spam"
fi
rm result

Ist zwar jetzt nicht vllt. soooo elegant aber es funktioniert. aspell wirft leider keinen verwertbaren Returncode aus.

Meine bereits vorhandenen Files/Ordner habe ich aspell schon zum "fressen" gegeben. Da dürfte es einigermaßen mit konditioniert sein. Mal sehen.
 
Zuletzt bearbeitet:
Zurück
Oben Unten