Thread Wörter zählen in Textdaten (Perl 5.8) (5 answers)
Opened by GwenDragon at 2010-10-07 12:25

GwenDragon
 2010-10-07 12:25
#141766 #141766
User since
2005-01-17
14612 Artikel
Admin1
[Homepage]
user image
Ich will Textdateien einlesen und die Worthäufigkeit ermitteln (zwecks einfachem Spamfilter).

Mein Testschnippsel:
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
#/usr/bin/perl -w

use strict;
use warnings;

my %words;
my @blacklist_entries = qw( insurance Sxx porn buy viagra ZENIC Möbelkauf Bußgeld Führerschein);

sub checkSpam {
        my $line = shift;
        foreach my $spam_word (@blacklist_entries) {
                while ($line =~ 
                        /(?<=^|\b)\Q$spam_word\E(?=\b|$)/ig # Wort beginnt mit Zeilenanfang und/oder wird mit Wortbegrenzer getrennt
                      ) 
                { 
                        $words{$spam_word}++;
                }
        }
}

while (my $line = <DATA>) {
        checkSpam($line);
}

while (my ($key, $value) = each %words) {
        print "$key=$value\n";
}

__DATA__
Das ist ein VIAGRA Text für Viagra.
ViaGrA or Zenic BuY thS!

$VIAGRA! 
************ Möbelkauf ganz billig.
$VIAGRA
$VIAGRA:
schnellstmöglich Bußgeld Führerschein neu!
pOr N.

    POrn---------.
 :sxx: download

porN.

vIaGrH.


Ist das Regex so sinnvoll?
Übersehe ich gerade eine Falle bei bestimmten Wörtern?
Gibt es eine schnellere Lösung?

//EDIT:
Die Wortlisten kommen später aus Textdateien oder einer Datenbank.
Die Textdaten kommen aus großen Textdateien, Datenbanken oder auch CGI-Daten.
Last edited: 2010-10-07 13:21:50 +0200 (CEST)

View full thread Wörter zählen in Textdaten (Perl 5.8)