perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




11.02.2012 / 20:24

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragabzählen von wörter einer textdatei
Seitenanfang
hi!
...habe mal interessehalber mit perl angefangen und auch schon gleich das erste problem...

ich würde gerne aus einer textdatei die wörter auslesen und sie dann nach ihrer häufigkeit im text ordnen.
mein problem ist das auslesen aus der textdatei:


#!/usr/local/bin/perl -w

use strict;
my @Zeilen;
open(FILE,"test1.txt")
or die "Fehler beim Öffnen von 'test1.txt': $!\n";

foreach (<FILE>) {
push @Zeilen, $_;
}

close(FILE)
or die "Fehler beim Schließen von 'neu.dat': $! \n"

...das funktioniert so wie ich es will, also jedes element in eine zelle des arrays, aber halt leider nur, wenn die wörter in der textdatei auch jeweils in einer neuen zeile stehen...

kann mir vielleicht jemand einen tip geben wie ich die wörter in ein array bekomme auch wenn der text normal fortlaufend geschrieben ist?

schon mal vielen dank im voraus,

mfg

Datum: 06.10.2006-16:05

Beitragre: abzählen von wörter einer textdatei
Seitenanfang
Eine Möglichkeit wäre die Umbelegung der Standardvariablen $/. Die darin abgelegte Zeichenkette wird als Trenner beim Einlesen der Datei genommen.

Da Wörtergrenzen aber nicht nur Leerzeichen, sondern auch Satzzeichen, Zeilenumbrüche sowie Kombinationen dieser sein können, kommst du so wahrscheinlich besser:

open(FILE, "...");
$/=undef; # kein Trenner=>Datei mit einem mal einlesen
my $temp=<FILE>;
close FILE;
my @words=split(/[\s\.:!\?]+/, $temp);

\s definiert ein Leerzeichen, Tabulator oder Zeilenumbruch. Weitere mögliche Trennzeichen, die ich hier evtl. vergessen habe, einfach in den eckigen Klammern auflisten. Manche Zeichen haben dabei eine besondere Bedeutung, z.B. der Punkt (.) mit einem vorgestellten Backslash (\) deutest du an, dass du nur das Zeichen selbst meinst.
Ich glaube, der Code \b definiert sogar explizit eine Wortgrenze, allerdings habe ich nicht ausprobiert, wie dieser arbeitet. Versuche es einfach mal auch mit
my @words=split(/\b/, $temp);

Wünsche frohes Schaffen ;)

Datum: 06.10.2006-18:24

Beitragre: abzählen von wörter einer textdatei
Seitenanfang
vielen dank für deine hilfe!
das programm läuft einstweilen ganz gut, habe es mit [/W] probiert, was ja grundsätzlich ned so schlecht funktioniert, das einzige problem ist, dass er auch bei den umlauten ä,ö und ü abtrennt. habe leider noch in keinem tutorial was über die suche, bzw. eben über das weglassen der umlaute gelesen...ich dachte vielleicht mit[^/ä/ü/ö] oder so, aber das scheint es auch ned zu sein.

weiss da vielleicht jemand bescheid?

mfg

Datum: 09.10.2006-07:59

Beitragre: abzählen von wörter einer textdatei
Seitenanfang
\W ist nichts weiter als eine Abkürzung für [^a-zA-Z0-9_].
Versuch es mal mit [^\wäüö]. Das Problem dabei ist, dass du sämtliche Umlaute, Sonderzeichen und was weiß ich noch alles auflisten müsstest.

Ich kann nur meinen inzwischen getesteten Vorschlag wiederholen, dass ganze mit


my @words = split(/[\s\.:,!\?]+/, $text);

zu zerlegen, brachte recht brauchbare Ergebnisse.

Datum: 09.10.2006-20:38

Beitragre: abzählen von wörter einer textdatei
Seitenanfang
Du suchst use locale;
http://perldoc.perl.org/perllocale.html
dann funktioniert auch \W wieder

Datum: 09.10.2006-23:02

Beitragre: abzählen von wörter einer textdatei
Seitenanfang
vielen dank für eure hilfe!

mfg

Datum: 14.10.2006-17:54

-






-
-