Thread Regex für Spamfilter bei Nicht-Ascii
(33 answers)
Opened by GwenDragon at 2012-06-17 18:27
Allerdings finde ich Dussel nicht warum es nur mit utf8::encode geht. Mit Encode klappt es nicht, da werden nicht alle Matches gefunden.
Meine testcases mal aufrufen mit test_spamwords.pl test.spam //EDIT: korrektes Perl-Skript eingefügt Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #!/usr/bin/perl use strict; use warnings; my $blacklist_file = "blacklist.txt"; my @blacklist_entries; sub debug { print @_; } sub read_blacklist { return 1 if @blacklist_entries; open( my $fh, '<', "$blacklist_file" ) or debug( 1, "Can't read '$blacklist_file', $!\n" ); my @lines = grep { !/^\s*\#/ } <$fh>; chomp @lines; close $fh; debug( "No blacklists?\n" ) unless @lines; foreach my $line (@lines) { $line =~ s/^\s*//; $line =~ s/\s*[^\\]\#.*//; next unless $line; push @blacklist_entries, $line; } debug( "No entries in blacklist file?\n" ) unless @blacklist_entries; return 1; } sub testspam { my $comment = shift; chomp $comment; use Encode; read_blacklist(); for my $black (@blacklist_entries) { utf8::decode($black); utf8::decode($comment); #Encode::decode('utf-8',$black); #Encode::decode('utf-8',$comment); if ( $comment =~ /\b\Q$black\E\b/i ) { return "badword_comment $black"; } } } binmode(STDOUT, ":utf8"); while ( my $line = <> ) { my $t = testspam($line); print "$line # $t\n" if length $t; } Kann mich bitte mal eine oder einer mit einer erhellenden Information beglücken? Anhänge Last edited: 2012-06-19 17:16:46 +0200 (CEST) |