Hallo,
ich habe eine Textdatei von ca 50Mb und will diese nun nach den
häufigsten Worten durchsuchen.
Kennt ihr ein Programm oder eine Möglichkeit, wie ich dies machen
könnte?
Ich habe ja schon an eine MySql Datenbank gedacht, aber ich weiß nicht
wie ich die 50Mb importieren könnte
Gruß
Nei nei da bauste Dir einfach nen aussoziatives Array aus den
vorkommenden Worten auf und machst nen Inkrement, sowas is in 10 Minuten
hinprogrammiert... danach sortierst das Array nach den Werten und gibst
es aus, damit haste Deine Topliste.
Wie man sieht, müsste man an der 'Worterkennung' im Zusammenhang
mit Satzzeichen noch etwas arbeiten. Das Standardmässige 'ein
Wort läuft von einem Whitespace zum nächsten' ist vor echten
Prosatext nicht wirklich geeignet.
// So gehts mit JavaScript:
var path = 'c:/datei.txt';
var Shell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
function RankCmp(w1, w2) {
return w2 - w1;
}
var wordList = [];
var hF = fso.OpenTextFile(path);
while (!hF.AtEndOfStream) {
var l = hF.ReadLine();
var words = l.match(/[^ ]+/);
for (var i in words) {
if (typeof(wordList) == 'undefined') {
wordList[words[i]] = 1;
} else {
wordList[words[i]]++;
}
}
}
wordRank = wordList.sort(RankCmp);
// wordRank enthält jetzt die Liste der Worte abfallend sortiert nach
Häufigkeit.
Hallo yalu,
ich habe mir mal python heruntergeladen. Nun habe ich ein Fenster
"Python Shell" deinen Code habe ich nun da reinkopiert. Wie kann ich das
jetzt starten?
> Hallo yalu,>> ich habe mir mal python heruntergeladen.
Danke für's Vertrauen ;-)
Das Programm ist für den Aufruf aus der Kommandozeile vorgesehen. Ich
nehme an, du arbeitest mit Windows? Wenn ja:
1. Kopier den Programmtext in einen Texteditor (Notepad oder was auch
immer).
2. Speichere die Datei unter einem lustigen Namen, z.B. count.py.
3. Öffne ein DOS-Fenster.
4. Starte den Python-Interpreter mit dem Programm count.py und übergib
als Argument den Namen der zu analysierenden Datei:
python count.py langertext.txt
5. Bewundere das Ergebnis :)
Sollte das Kommando "python" nicht gefunden werden, musst du entweder
den vollständigen Pfad von python.exe angeben, oder das Verzeichnis,
in dem sich python.exe befindet, der Umgebungsvariable PATH
hinzufügen.
Das Ergebnis kann, wie üblich, durch Ausgabeumleitung in eine Datei
gespeichert werden:
python count.py langertext.txt >ergebnis.txt
Vielleicht fängst du erst einmal mit kleineren Textdateien an, bis
alles richtig funktioniert ;-)
> Traceback (most recent call last):> File "C:/Python25/test", line 8, in <module>> for line in file(argv[1]):> IndexError: list index out of range
Das Programm ist für Profis und deswegen absichtlich nicht tolerant
gegenüber Fehlbedienungen ;-)
Der Fehler erscheint, wenn man beim Start den Textdateinamen als
Argument weglässt. Starte das Programm wie oben beschrieben, dann
sollte es gehen.
Vielen Dank für die Erklärung. Ich werde es gleich mal ausprobieren
Ich habe nur mal ein bischen VB und php^^ programmiert. Ich habe da eher
wenig Ahnung.
> Ich muss mir das mal genauer ansehen, wie das funktioniert(;
Python ist eigentlich eine sehr leicht zu erlernende Sprache.
Allerdings ist das obige Programm vielleicht nicht das, was man sich
gleich als Erstes anschauen sollte, weil es trotz der Kürze schon
relativ viele Features der Sprache nutzt.
Falls du dich mit der Sprache etwas mehr auseinandersetzen möchtest,
ist das Tutorial sicher ein guter Startpunkt:
http://docs.python.org/tut/tut.html
(Die ersten zwei Kapitel kannst du schnell überfliegen, spannend wird
es ab Kapitel 3.)
Falls du irgendwelche Fragen hast, gerne. Ich kann auch ein paar
Kommentare zu dem Programm schreiben. Aber nicht sofort, denn ich muss
jetzt auf Achse und weiß noch nicht genau, wann ich wieder im Netz
bin.
@Tim:
Das ist natürlich die ubercoole Variante, für die gar nichts zu
programmieren ist. Mir war gar nicht bewusst, dass uniq auch zählen
kann -> wieder was gelernt :)
Ausser der C++-Variante wird nix compiliert ;) Perl und Co sind alles
Sprachen, die unter Windows, Mac, Linux und einigen mehr Plattformen
verfuegbar sind.
Michael G. wrote:
> Ausser der C++-Variante wird nix compiliert ;) Perl und Co sind alles> Sprachen, die unter Windows, Mac, Linux und einigen mehr Plattformen> verfuegbar sind.
JavaScript ist bei Windows sogar standardmäßig dabei...
Hier nochmal eine leicht überarbeitete Version:
// So gehts mit JavaScript:
var path = 'c:/datei.txt';
var Shell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var wordList = [];
var hF = fso.OpenTextFile(path);
while (!hF.AtEndOfStream) {
var l = hF.ReadLine();
l = l.replace(/[.,;:!?]/g, ''); // Satzzeichen wegschmeißen
var words = l.match(/[^ ]+/i); // ignore case
for (var i = 1; i < words.length; i++) {
if (typeof(wordList) == 'undefined') {
wordList[words[i]] = 1;
} else {
wordList[words[i]]++;
}
}
}
wordRank = wordList.sort();
for (i in wordRank) { // Wortliste mit Häufigkeit ausgeben
WScript.StdOut.WriteLine(i + ' : ' + wordRank[i]);
}
Max wrote:
> Jetzt muss ich mal ganz blöd fragen (; wie starte ich den das> JavaScript ?
Nimm die angehängte Datei - mittlerweile nochmal korrigiert und getestet
:-) -, ändere den Dateinamen (path = ...). [Achtung: wenn du \ im Pfad
hast, dann muß der entweder verdoppelt - wie in C - oder durch / ersetzt
werden.]
Dann: öffne eine Dos-Box und zieh einfach das Skript hinein.
Dann return und es läuft.
Zeile 14 muß lauten:
for (var i = 0; words && i < words.length; i++) {
sonst wird das erste Wort in einer Zeile nicht gezählt.
Wenn man Visual Studio, oder Microsoft Script Editor (aus Frontpage
2003) hat, kann man js-Programme sehr komfortabel debuggen:
- Man erzeugt einen Shortcut auf die Datei, dann
- ändert man die Aufrufzeile im Shortcut auf:
cscript //x test.js
- dann startet man den Shortcut.
Eine einigermaßen brauchbare Dokumentation findet man hier:
http://msdn2.microsoft.com/en-us/library/72bd815a.aspx