[Dresden-pm] Fwd: Re: [Erlangen-pm] perl - die Frage von Toni Stadler
Steffen Winkler
steffen at steffen-winkler.de
Fr Mär 20 01:01:04 PDT 2015
Hier die Antwort vom Helmut (Erlangen.pm) auch zum Mitlesen für
Dresden.pm, weil die Antwort doch recht interessant ist.
Hi,
da gibt es prinzipiell 3 Möglichkeiten:
- ein halbswegs passendes Paket benutzen, Stichwort Textindizierung und Relevanz, ist Teil von Suchmaschinen z.B. SOLR, ElasticSearch
- einmal ordentlich Publikationen zu dem Thema durchackern, Ausgangspunkt z.B. Ted Pedersen https://metacpan.org/author/TPEDERSE
- selber herumbasteln, weils Spass macht und/oder Existenzberechtigung generiert
Zum Basteln:
Grundfrage ist schon mal, was ein Wort ist. Der String: ein, eines, eine, einer sind dann 4 verschiedene Wörter, aber der selbe Stamm.
Der Sinn (Bedeutung, Semantik): Alkohol, Äthanol, z.T. Bier, Wein, Schnaps, alkoholhältiges Getränk; Alkoholkonsum, Konsum von Alkohol …
Die Wörter eines Textes zählen funktioniert mal grundsätzlich so:
#!perl
use strict;
use warnings;
use utf8;
binmode(STDIN, ':utf8');
binmode(STDOUT,':utf8');
my $words = {};
my $stopwords;
$stopwords->{$_} = () for qw(
in
die
von
und
ich
eine
es
der
dann
);
while (my $line = <STDIN>) {
chomp($line);
my @tokens =
grep { !exists $stopwords->{$_} } # ist kein stopword
grep { $_ !~ /\d/ } # Worte ohne Ziffern
map {lc} # lowercase
$line =~ /(\w{2,})/g; # tokens - alphanumerisch, mind. 2 Zeichen
for my $token (@tokens) {
$words->{$token}++;
}
}
# sort descending (highest value first)
my @keys = sort { $words->{$b} <=> $words->{$a} } keys(%$words);
for my $key ( @keys ) {
printf "%-20s %6d\n", $key, $words->{$key};
}
Da kommt dann auf den Text dieser Originalmail angewandt etwa folgendes raus:
drug 4
medikamenten 4
mischkonsum 3
funktion 3
aspirin 3
texte 3
wörter 3
einzeltexte 2
helfen 2
alkohol 2
...
HTH
Helmut Wollmersdorfer
Am 18.03.2015 um 19:44 schrieb Steffen Winkler <steffen at steffen-winkler.de>:
> Helmut, da kennst Du Dich sicher gut mit aus.
> Grüße von Steffen Winkler.
Mehr Informationen über die Mailingliste Dresden-pm