Wir schreiben eine Reihe einfacher Befehlszeilen -Tools, um grundlegende Statistiken zu einer Textdatei oder einer Reihe von Textdateien anzuzeigen. Einige grundlegende Statistiken umfassen ...
Wir werden auch darauf hinarbeiten, die Fähigkeit hinzuzufügen, ...
Hier ist ein Screenshot eines Programms, das den gesamten Text von Moby Dick von Project Gutenberg herunterlädt und ein Histogramm der Buchstabenfrequenzen ausdruckt.
Es stellt sich heraus, dass der Buchstabe "T" 9,25% aller Buchstaben in Moby Dick ausmacht.
Um loszulegen, müssen Sie ...
npm install aus, um die erforderlichen Pakete zu installieren.textalyze.js ist der Quellcode für dieses Projektsample_data ist ein Verzeichnis, das Beispieltextdateien enthält, die analysiert werden, hauptsächlich aus Project Gutenberg. Die mit diesem Repository gelieferte textalyze.js -Datei ist mit Kommentaren gefüllt, mit denen Sie beginnen sollen. Sie sollten sich gerne löschen, um das Programm leichter zu lesen.
Denken Sie über die Fragen nach, die Sie benötigen, um zu beantworten, damit es funktioniert, dass es funktioniert:
Diese Fragen führen die Bandbreite von Nitty-Gritty Ruby bis Benutzererfahrung aus und beginnen uns gleichzeitig auf dem Weg, sich mit der Funktionsweise des Webs wohl zu fühlen.
Um Feedback zu Ihrem Code anzufordern, verwenden Sie den Standard -Github -Flussprozess.
Dieses Projekt ist als Abfolge von Iterationen strukturiert, von denen jedes auf früheren Iterationen aufbaut. Iterationen dienen drei wichtigen Rollen:
Schreiben Sie anhand hart codierter Beispiele eine Funktion, die ein Array mit willkürlichen und möglicherweise duplizierten Elementen als Eingabe nimmt und ein Object /Zählpaare zurückgibt. Wir haben einige geschrieben
Diese Iteration hat Tests für Sie geschrieben. Laufen
npm test um die fehlgeschlagenen Tests zu sehen. Denken Sie daran, zuerst npm install auszuführen!
Das heißt, wenn der Eingang 100 Einträge und 20 von ihnen der Buchstaben "A" sind, sollte sich dann das resultierende Object enthalten
{ 'a' : 20 } "Sinnvoll" liegt bei Ihnen zu definieren, aber hier ist ein vorgeschlagenes Format, das vorgibt, dass wir den Eingang als ["a", "a", "a", "b", "b", "c"] hart codiert haben.
user@host project-js-textalyze $ node textalyze.js
The counts for ["a", "a", "a", "b", "b", "c"] are...
a 3
b 2
c 1
user@host project-js-textalyze $
Schreiben Sie anhand hart codierter Beispiele eine Funktion, die eine willkürliche String als Eingabe nimmt und ein Array aller Zeichen in der Zeichenfolge, einschließlich Leerzeichen und Interpunktion, zurückgibt.
Füttern Sie dies in die Array-Countring-Funktion aus der vorherigen Iteration, um ein Object mit Buchstaben/Zählpaaren zu erhalten. Drucken Sie diese Paare vernünftig aus.
Erstellen Sie eine Datei lib/sanitize.js und definieren Sie eine Funktion namens sanitize . Wie in lib/itemCounts.js sollte die letzte Zeile sein
module . exports = sanitize Die sanitize sollte eine willkürliche String erfolgen-möglicherweise Spaces, Interpunktion, Linienbrüche usw.-und eine "sanitäre" Zeichenfolge zurückgeben, die alle Buchstaben in oberen Fällen durch ihr äquivalentes unteres Kapazität ersetzt. Dadurch wird sichergestellt, dass die Buchstaben 'A' und 'a' nicht als zwei unterschiedliche Buchstaben behandelt werden, wenn wir unseren Text analysieren. Wir werden Interpunktion und andere Bits in einer späteren Iteration bewältigen.
Es sollte so funktionieren
sanitize ( 'This is a sentence.' ) // => 'this is a sentence.'
sanitize ( 'WHY AM I YELLING?' ) // => 'why am i yelling?'
sanitize ( 'HEY: ThIs Is hArD tO rEaD!' ) // => 'hey: this is hard to read!'Glücklicherweise bietet JavaScript eine integrierte Funktion, um uns zu helfen: String.Prototype.tolowerCase.
Integrieren Sie diese Funktion in das aktuelle Programm, damit das Object der Ergebnisse z. B. enthält, z. B., z.
{ 'a' : 25 }anstatt
{ 'a' : 19 , 'A' : 6 } Oft sind die von uns gewünschten Daten nicht in einem Format, das es einfach macht, zu analysieren. Der Prozess der Aufnahme von schlecht formatierten Daten und der Umwandlung in etwas, das wir nutzen können, wird als Bereinigung unserer Daten bezeichnet.
Was als "sanitisieren" gilt, hängt von den zugrunde liegenden Daten und unseren Bedürfnissen ab. Wenn wir beispielsweise den gesamten Text in einem HTML -Dokument betrachten wollten, möchten wir nicht alle HTML -Tags zählen. Wenn wir umgekehrt einen Bericht über die am häufigsten verwendeten Tags in einem HTML-Dokument wollten, möchten wir die Tags aufbewahren , den Text jedoch entfernen.
In unserem Fall haben wir unser Programm so gestaltet, dass es obere Fälle von Buchstaben und unteren Case-Buchstaben als verschiedene Buchstaben behandelt, dh unser Object könnte enthalten
{ 'a' : 20 , 'A' : 5 }Aber wir würden wahrscheinlich lieber nur enthalten
{ 'a' : 25 }Ebenso interessieren uns wahrscheinlich die Interpunktion (Perioden, Kommas, Bindestriche, Kolons usw.), obwohl dies schwieriger ist als Unterschiede zwischen Buchstaben in oberen Fällen und unteren Case.
Das Basis -Repository enthält ein Verzeichnis namens sample_data , das eine Handvoll Textdateien enthält. Hartcode Der Name einer dieser Dateien in Ihr Programm und lesen Sie den Inhalt dieser Datei in eine Zeichenfolge. Geben Sie diese Zeichenfolge in Ihr aktuelles Programm ein, damit sie jetzt die Briefzählstatistiken für diese bestimmte Datei anstelle der hartcodierten Zeichenfolgen in der vorherigen Iteration ausdruiert.
Um den Inhalt einer Datei in eine Zeichenfolge zu lesen, siehe FS.Readfile und Fs.ReadFilesync.
Wir möchten unseren JavaScript -Code nicht jedes Mal bearbeiten, wenn wir die Datei ändern müssen, aus der wir Daten lesen. Ändern wir es so, dass der Benutzer, der das Programm ausführt, den Namen der Datei übergeben kann, aus der aus dem Lesen teilnehmen kann. Wir werden dies mit den Befehlszeilenargumenten tun.
Diese Iteration markiert v1.0 unseres Programms. So wie es aussieht, ist unser Programm-obwohl begrenzt-in sich geschlossen, dass Sie es einer anderen Person geben können, und sie könnten es verwenden, wie Sie es beabsichtigt haben, ohne zu wissen, wie man Javascript-Code bearbeitet.
Glückwunsch!
Betrachten Sie den folgenden Befehl aus dem Terminal:
node some-program.js first_argument second_argument banana
Die Befehlszeilenargumente sind first_argument , second_argument und banana , wobei ein Raum die Trennung zwischen jedem Argument bezeichnet. first_argument ist das erste Argument für Befehlszeilen und banana ist das dritte Befehlszeilenargument.
Schreiben Sie anhand hart codierter Beispiele eine Funktion, die ein Array mit willkürlichen und möglicherweise duplizierten Einträgen als Eingabe nimmt und ein Object /Frequenzpaare zurückgibt. Drucken Sie diese Paare vernünftig aus.
Das heißt, wenn der Eingang 100 Einträge und 20 von den sind Buchstaben "a" dann haben, dann sollte das zurückgegebene Object haben
{ 'a' : 0.20 } Sie haben bereits eine Funktion geschrieben, die ein Array übernimmt und ein Object mit Einstiegs-/Zählpaaren zurückgibt, und Sie benötigen diese Zählungen (auf die eine oder andere Weise), um die Gesamtfrequenz zu berechnen. Wenn Sie sich selbst ausdehnen möchten, versuchen Sie, Ihre Funktion "Frequenzstatistik" so zu schreiben, dass Sie Ihre Funktion "Zählstatistiken" verwenden, damit Sie nicht so viel Code oder in Ihrem Programm arbeiten müssen.
Dies ist ein "Stretch -Ansatz", was bedeutet, dass es für Sie absolut nicht erforderlich ist, Ihr Programm auf diese Weise zu schreiben. Wie wir gesagt haben, ist es viel besser, etwas zu schreiben und Feedback dazu zu erhalten, als zu stecken, während sie versuchen, einen "besseren", "schnelleren", "eleganten" usw. zu verwirklichen.
Drucken Sie ein Histogramm von Buchstabenfrequenzen aus, das ungefähr wie folgt aussieht:
Ziel ist es, eine nützliche, gut gestaltete Ausgabe zu erzeugen. Es muss nicht mit der obigen Ausgabe identisch aussehen.
Hinweis: Sie können die Frequenz für jedes Element verwenden, um die Länge des Histogramms zu skalieren.
Hier sind einige zusätzliche Funktionen, die Sie möglicherweise hinzufügen:
Installieren und verwenden Sie das Anforderungsmodul, um Unterstützung für das Übergeben von URLs sowie Dateinamen hinzuzufügen. Zum Beispiel, anstatt Moby Dick zuerst herunterladen zu müssen, könnten Sie rennen
node textalyze.js http://www.gutenberg.org/cache/epub/2701/pg2701.txt Fügen Sie Unterstützung für die Anzeige der 5 (oder N ) häufigsten Wörter anstelle von Buchstabenfrequenzen hinzu.
Fügen Sie Unterstützung für den Exportieren der Daten in einem Format hinzu, das Sie wie eine CSV -Datei in Excel laden können. Zu diesem Zweck können Sie das CSV-Writer-Modul installieren und verwenden.
Suchen Sie Texte aus mehreren Sprachen und vergleichen Sie die Buchstabenfrequenz zwischen Sprachen. Die Brieffrequenz einer Sprache fungiert als eine Art Fingerabdruck, und Sie hätten überrascht, wie wenig Text es braucht, um eine Sprache zu identifizieren, sobald Sie die Buchstabenfrequenzen kennen.
Verwenden Sie eine Diagrammbibliothek wie Anychart, um ein grafisches Histogramm zu exportieren.
Führen Sie zum Installieren eines Moduls den folgenden Befehl aus (ersetzen Sie nameOfModule durch den Namen des gewünschten Moduls):
npm install --save nameOfModule Dadurch wird package.json aktualisiert und das Modul als Abhängigkeit hinzugefügt. Lesen Sie die Dokumentation jedes Moduls, um zu sehen, wie sie require und verwenden Sie sie.