Thread Regex für Spamfilter bei Nicht-Ascii (33 answers)
Opened by GwenDragon at 2012-06-17 18:27

GwenDragon
 2012-06-19 16:42
#159171 #159171
User since
2005-01-17
14774 Artikel
Admin1
[Homepage]
user image
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

more (11.5kb):
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
text/plain
359 lines
blacklist.txt
text/plain
5 lines
test.spam

Last edited: 2012-06-19 17:16:46 +0200 (CEST)

View full thread Regex für Spamfilter bei Nicht-Ascii