Schrift
[thread]8433[/thread]

Haeufigkeit von Woertern: chatlog analysieren

Leser: 1


<< >> 6 Einträge, 1 Seite
styx-cc
 2006-10-18 21:40
#70983 #70983
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Halli hallo, ich versuche gerade zu ermitteln, wie oft welches Wort an welchem Tag (blabla) gesagt wurde..
Allerdings bekomm ich das irgendwie nicht hin :(

Hatt versucht, ein mehrdimensionales Array zu nehmen:

Code: (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
sub make_stat {
my ($tmpdir, $logfile) = @_;
my @words;

open(LOG, "<$tmpdir/$logfile") or die("Can't open logfile. $!");
for my $line (<LOG>) {
#print $line;
my @parts = split(/ /,$line);
my $time = shift(@parts);
my $user = shift(@parts);

for (my $i=0;$i<scalar(@parts);$i++) {
next if ( (length($parts[$i]) < 3) || ($parts[$i] =~ m/(;|:|\(|\)|\/|<|>|)/) ); #smilies und kurze worte aussortieren
push(@words, [$parts[$i], 1]) if (scalar(@words) < 1);

my $found = 0;
my $j = 0;
for (@words) {
if ($words[$j][0] eq $parts[$i]) {
$words[$j][1]++; #wort hochzaehlen
$found = 1;
last;
}
$j++;
}
push(@words, [$parts[$i], 1]) unless $found;
}
}
close LOG or die("Can't close logfile. $!");
for my $i (0..scalar(@words)) {
print "$words[$i][0], $words[$i][1]\n";
}
} #sub make_stat


Die Daten kommen wie folgt auf den Logfiles:
Code: (dl )
1
2
3
4
5
(00:10) <Henda> =(
(00:10) <pHyL> seufzt :[
(00:12) <styx> mhmh
(00:12) <styx> jetzt passieren kommische dinge
(00:13) <Henda> welche denn?


Es scheint alles zu klappen, bis auf die Sache mit dem Zaehlen..
Freue mich schon auf eure Hilfe :-)

MfG

P.s.: In wirklichkeit sind die Logfiles natuerlich n bisschen groesser :- )
Pörl.
bloonix
 2006-10-18 21:59
#70984 #70984
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code: (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
use strict;
use warnings;
use Data::Dumper;

my @vfile = (
  "(00:10) <Henda> =(\n",
  "(00:10) <pHyL> welche denn ? seufzt :[\n",
  "(00:12) <styx> mhmh\n",
  "(00:12) <styx> jetzt passieren mhmh kommische dinge\n",
  "(00:13) <Henda> welche denn?\n",
);

my %stats;

while (defined (my $line = shift @vfile)) {
  my ($time, $user, @words) = split /\s+/, $line;
  foreach my $word (@words) {
     next if $word =~ /[;:=][\W]+/ || length($word) < 3;
     $word =~ s/(\w+)\W+$/$1/; # wegen "denn" und "denn?"
     $stats{$word}++;
  }
}

print Dumper(\%stats);


$VAR1 = {
         'jetzt' => 1,
         'seufzt' => 1,
         'kommische' => 1,
         'passieren' => 1,
         'mhmh' => 2,
         'denn' => 2,
         'welche' => 2,
         'dinge' => 1
       };


Da für Smilies aber auch sehr viele Buchstaben genutzt werden, ist das
nicht ganz so einfach mit der Regexp...\n\n

<!--EDIT|opi|1161241133-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
styx-cc
 2006-10-18 22:07
#70985 #70985
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Ahh, vielen Dank!
Die Idee mitm Hash hatte ich auch schon, allerdings wollte ich eigentl. keine Umlaute als Schluesselnamen benutzen, is das ok sie doch zu benutzen?

MfG
Pörl.
bloonix
 2006-10-18 22:25
#70986 #70986
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=styx-cc,18.10.2006, 20:07]Die Idee mitm Hash hatte ich auch schon, allerdings wollte ich eigentl. keine Umlaute als Schluesselnamen benutzen, is das ok sie doch zu benutzen?[/quote]
Klaro :)

Falls du die Ausgabe noch nach Häufigkeit der Wörter sortieren möchtest...

Code: (dl )
1
2
my @sorted_words = reverse sort { $stats{$a} <=> $stats{$b} } keys %stats;
print "$_: $stats{$_}\n" for @sorted_words;


Aber...

1. das kann ganz schön zu lasten des Speichers gehen...
2. für den Sort bekomme ich bestimmt von jemanden hier einen auf den Deckel :)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ptk
 2006-10-18 22:52
#70987 #70987
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=styx-cc,18.10.2006, 20:07]Die Idee mitm Hash hatte ich auch schon, allerdings wollte ich eigentl. keine Umlaute als Schluesselnamen benutzen, is das ok sie doch zu benutzen?[/quote]
Du kannst sogar den Inhalt einer Bilddatei als Hashkey benutzen :-)
styx-cc
 2006-10-19 00:12
#70988 #70988
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Soo, danke fuer die tollen Antworten!
Habsch wieder n bisschen was gelernt :o)

MfG
Pörl.
<< >> 6 Einträge, 1 Seite



View all threads created 2006-10-18 21:40.