Kami akan menulis satu set alat baris perintah sederhana untuk menampilkan statistik dasar tentang file teks atau set file teks. Beberapa statistik dasar termasuk ...
Kami juga akan berupaya menambahkan kemampuan untuk ...
Berikut adalah tangkapan layar dari program yang mengunduh seluruh teks Moby Dick dari Project Gutenberg dan mencetak histogram frekuensi huruf.
Ternyata huruf "T" membentuk 9,25% dari semua surat di Moby Dick.
Untuk memulai, Anda harus ...
npm install untuk menginstal paket yang diperlukan.textalyze.js adalah kode sumber untuk proyek inisample_data adalah direktori yang berisi file teks sampel untuk dianalisis, sebagian besar dari Project Gutenberg. File textalyze.js yang dilengkapi dengan repositori ini diisi dengan komentar yang dirancang untuk membantu Anda memulai. Anda harus merasa bebas untuk menghapusnya untuk membuat program lebih mudah dibaca.
Pikirkan tentang pertanyaan yang harus Anda bisa jawab untuk membuatnya bekerja, meskipun:
Pertanyaan-pertanyaan ini menjalankan keseluruhan dari seluk-beluk ruby hingga pengalaman pengguna, sementara juga memulai kami menjadi nyaman dengan cara kerja web.
Untuk meminta umpan balik pada kode Anda, gunakan proses aliran GitHub standar.
Proyek ini disusun sebagai urutan iterasi, yang masing -masing dibangun di atas iterasi sebelumnya. Iterasi melayani tiga peran penting:
Menggunakan contoh-contoh hard-coded, tulis fungsi yang mengambil Array yang berisi item sewenang-wenang dan mungkin digandakan sebagai input dan mengembalikan Object yang berisi pasangan item/hitungan. Kami telah menulis beberapa
Iterasi ini memiliki tes yang ditulis untuk Anda. Berlari
npm test untuk melihat tes yang gagal. Ingatlah untuk menjalankan npm install terlebih dahulu!
Yaitu, jika input memiliki 100 entri dan 20 di antaranya adalah huruf "a" maka Object yang dihasilkan harus berisi
{ 'a' : 20 } "Sensible" terserah Anda untuk mendefinisikan, tetapi inilah format yang disarankan, berpura-pura kami memasukkan input dengan keras sebagai ["a", "a", "a", "b", "b", "c"] .
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 $
Menggunakan contoh-contoh yang dikodekan, tulis fungsi yang mengambil String sewenang-wenang sebagai input dan mengembalikan Array semua karakter dalam string, termasuk spasi dan tanda baca.
Ubah ini ke fungsi penghitungan array dari iterasi sebelumnya untuk mendapatkan Object yang berisi pasangan huruf/hitungan. Cetak pasangan itu dengan cara yang masuk akal.
Buat file lib/sanitize.js dan tentukan fungsi yang disebut sanitize di dalam. Seperti dalam lib/itemCounts.js , baris terakhir seharusnya
module . exports = sanitize Fungsi sanitize harus mengambil String sewenang-wenang-mungkin berisi spasi, tanda baca, jeda garis, dll.-dan mengembalikan string "sanitasi" yang menggantikan semua huruf kasus atas dengan setara dengan kasus bawahnya. Ini akan memastikan bahwa huruf 'A' dan 'a' tidak diperlakukan sebagai dua huruf berbeda ketika kami menganalisis teks kami. Kami akan menangani tanda baca dan bit lainnya dalam iterasi nanti.
Itu harus bekerja seperti ini
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!'Beruntung bagi kami, JavaScript hadir dengan fungsi bawaan untuk membantu kami: String.prototype.tolowercase.
Mengintegrasikan fungsi ini ke dalam program saat ini sehingga Object hasil berisi, misalnya,
{ 'a' : 25 }alih-alih
{ 'a' : 19 , 'A' : 6 } Seringkali data yang kita inginkan tidak dalam format yang membuatnya mudah dianalisis. Proses mengambil data yang diformat dengan buruk dan mengubahnya menjadi sesuatu yang dapat kita gunakan disebut membersihkan data kita.
Apa yang dianggap sebagai "sanitasi" bervariasi tergantung pada data yang mendasari dan kebutuhan kita. Misalnya, jika kami ingin melihat semua teks dalam dokumen HTML, kami tidak ingin menghitung semua tag HTML. Sebaliknya, jika kami menginginkan laporan tentang tag yang paling sering digunakan dalam dokumen HTML, kami ingin menyimpan tag tetapi menghapus teks.
Dalam kasus kami, kami telah merancang program kami sedemikian rupa sehingga memperlakukan huruf-huruf besar dan huruf kecil sebagai huruf yang berbeda, yaitu, Object hasil kami mungkin berisi
{ 'a' : 20 , 'A' : 5 }Tapi kami mungkin lebih suka hanya berisi
{ 'a' : 25 }Demikian juga, kita mungkin tidak peduli dengan tanda baca (periode, koma, tanda hubung, titik dua, dll.), Meskipun ini lebih sulit untuk ditangani daripada perbedaan antara huruf besar dan huruf kecil.
Repositori dasar berisi direktori yang disebut sample_data yang berisi beberapa file teks. Hard-kode nama salah satu file ini ke dalam program Anda dan baca konten file itu ke dalam string. Masukkan string itu ke program Anda saat ini, sehingga sekarang mencetak statistik penghitungan surat untuk file spesifik itu alih-alih string kode keras yang Anda miliki dalam iterasi sebelumnya.
Untuk membaca isi file ke dalam string, lihat fs.readfile dan fs.readfileSync.
Kami tidak ingin mengedit kode JavaScript kami setiap kali kami perlu mengubah file dari mana kami membaca data. Mari kita ubah sehingga pengguna yang menjalankan program dapat meneruskan nama file yang harus dibaca. Kami akan melakukan ini menggunakan argumen baris perintah.
Iterasi ini menandai v1.0 dari program kami. Seperti berdiri, program kami-meskipun terbatas-cukup mandiri sehingga Anda dapat memberikannya kepada orang lain dan mereka dapat menggunakannya seperti yang Anda maksudkan tanpa harus tahu cara mengedit kode JavaScript.
Selamat!
Pertimbangkan perintah berikut yang dijalankan dari terminal:
node some-program.js first_argument second_argument banana
Argumen baris perintah adalah first_argument , second_argument , dan banana , dengan ruang yang menunjukkan pemisahan antara setiap argumen. first_argument adalah argumen baris perintah pertama dan banana adalah argumen baris perintah ketiga .
Menggunakan contoh-contoh yang dikodekan, tulis fungsi yang mengambil Array yang berisi entri sewenang-wenang dan mungkin digandakan sebagai input dan mengembalikan Object yang berisi pasangan item/frekuensi. Cetak pasangan itu dengan cara yang masuk akal.
Yaitu, jika input memiliki 100 entri dan 20 huruf adalah "A" maka Object yang dikembalikan harus dimiliki
{ 'a' : 0.20 } Anda sudah menulis fungsi yang mengambil Array dan mengembalikan Object yang berisi pasangan entri/hitungan dan Anda akan membutuhkan jumlah ini (dengan satu atau lain cara) untuk menghitung frekuensi keseluruhan. Jika Anda ingin meregangkan diri, cobalah menulis fungsi "statistik frekuensi" Anda dengan cara yang memanfaatkan fungsi "penghitungan statistik" Anda, sehingga Anda tidak perlu menduplikasi sebanyak mungkin kode atau bekerja di program Anda.
Ini adalah "pendekatan peregangan," yang berarti sama sekali tidak perlu bagi Anda untuk menulis program Anda dengan cara ini. Seperti yang telah kami katakan, jauh lebih baik untuk menulis sesuatu dan mendapatkan umpan balik daripada terjebak saat mencoba membingungkan pendekatan "lebih baik", "lebih cepat", "lebih elegan", dll.
Cetak histogram frekuensi huruf yang terlihat seperti berikut:
Tujuannya adalah untuk menghasilkan output yang berguna dan dirancang dengan baik. Tidak harus terlihat identik dengan output di atas.
Petunjuk: Anda dapat menggunakan frekuensi untuk setiap item sebagai cara untuk skala panjang histogram.
Berikut adalah beberapa fitur tambahan yang mungkin Anda tambahkan:
Instal dan gunakan modul permintaan untuk menambahkan dukungan untuk melewati URL serta nama file. Misalnya, daripada harus mengunduh Moby Dick terlebih dahulu, Anda bisa berlari
node textalyze.js http://www.gutenberg.org/cache/epub/2701/pg2701.txt Tambahkan dukungan untuk menampilkan 5 (atau N ) kata -kata paling umum, bukan hanya frekuensi huruf.
Tambahkan dukungan untuk mengekspor data dalam format yang dapat Anda muat ke Excel, seperti file CSV. Anda dapat menginstal dan menggunakan modul CSV-Writer untuk melakukan ini.
Temukan teks dari berbagai bahasa dan bandingkan frekuensi huruf antar bahasa. Frekuensi surat bahasa bertindak sebagai semacam sidik jari, dan Anda akan terkejut melihat betapa sedikit teks yang diperlukan untuk mengidentifikasi bahasa begitu Anda mengetahui frekuensi huruf.
Gunakan pustaka charting seperti anychart untuk mengekspor histogram grafis.
Untuk menginstal modul, jalankan perintah berikut (ganti nameOfModule dengan nama modul yang diinginkan):
npm install --save nameOfModule Ini akan memperbarui package.json dan menambahkan modul sebagai ketergantungan. Baca dokumentasi setiap modul untuk melihat cara require dan menggunakannya.