Jupyter Notebook kepada teks biasa: ambil isinya, buang perancahnya
Teks biasa ialah sasaran yang betul apabila destinasinya tidak berminat langsung dengan pemformatan. Talian paip grep, satu diff, satu indeks carian, semakan plagiarisme, e-mel teks biasa kepada rakan sekerja yang tidak mahu lampiran — tiada satu pun daripadanya mendapat manfaat daripada backtick dan tanda pagar, malah beberapa daripadanya menjadi lebih teruk kerana tanda baca yang bermakna kepada perender dan tidak bermakna kepada pembaca.
Penukar ini menerima fail .ipynb dan memulangkan perkataan serta kod tanpa sebarang penanda tambahan. Sel dipisahkan oleh baris kosong. Kod muncul sebagai kod, tanpa pagar. Hasil cetakan muncul di bawah sel yang menghasilkannya dengan label Output: yang ringkas. Segala yang dibalut oleh format JSON di sekeliling kandungan itu dibuang. Kerja itu berlaku dalam tab pelayar ini.
Hujah token
Sebab paling lazim untuk meratakan notebook ialah kerana sesuatu di hujung sana mengenakan bayaran mengikut token, sedangkan fail .ipynb mentah ialah cara yang mahal untuk menyampaikan begitu sedikit. Eloklah kita jelas tentang nisbahnya.
Notebook dengan tiga puluh sel, separuh daripadanya menghasilkan carta, lazimnya memakan dua atau tiga megabait pada cakera. Prosa dan kod di dalamnya mungkin lapan kilobait sahaja. Selebihnya ialah data imej base64, pendua HTML bagi hasil yang sudah pun wujud sebagai teks biasa, dan simpan kira setiap sel. Menyuap fail mentah kepada model bukan sahaja seratus kali lebih mahal daripada sepatutnya — selalunya ia gagal terus, kerana tetingkap konteks penuh dengan aksara yang tidak membawa maklumat.
Lebih teruk lagi, base64 ditokenkan dengan buruk. Bahasa Inggeris biasa purata lebih kurang empat aksara satu token. Larian base64 rawak tidak mempunyai subrentetan berulang untuk dimampatkan oleh perbendaharaan tokenizer, jadi ia menghampiri satu token bagi setiap dua aksara. Bahagian fail yang paling tidak berguna juga bahagian dengan nisbah token per aksara yang paling teruk. Pembilang di atas menunjukkan kiraan token bagi hasilnya supaya anda nampak apa yang sebenarnya anda hantar.
Apa yang terselamat selepas diratakan
Membuang struktur bukan sama dengan membuang makna, dan garis antara keduanya ialah tempat alat sebegini berjaya atau gagal. Apa yang dikekalkan:
- Kandungan sel markdown, seperti ditulis. Aksara
#dan**kekal, kerana dalam sel markdown itulah satu-satunya petunjuk penulis tentang penegasan dan hierarki. Membuangnya bermakna meratakan dokumen yang memang sudah prosa menjadi teks yang tidak berbeza-beza. - Kod, tepat seperti ditaip. Inden dikekalkan, komen utuh. Makna Python bergantung pada ruang putih di hadapan, jadi ini bukan pilihan gaya.
- Hasil berbentuk teks. Output cetakan, nilai pulangan, pratonton dataframe dalam bentuk biasanya.
- Nama ralat, mesej dan traceback, dengan kod warna terminal dibuang.
- Sel raw, yang biasanya menyimpan LaTeX atau reStructuredText yang penulis mahu biarkan sahaja.
Apa yang pergi: muatan imej dan video, lampiran PDF, kembar HTML bagi mana-mana hasil yang sudah wujud sebagai teks, kiraan pelaksanaan, pengecam sel, objek metadata kosong, dan sel yang tiada apa-apa di dalamnya. Sel yang mengandungi ruang putih sahaja tanpa output bukan sel yang sesiapa perlu baca.
Soal penanda tempat rajah
Apabila satu plot dibuang, sama ada sesuatu menandakan kekosongan itu atau tidak. Ada pertimbangan sebenar di sini. Tinggalkan kosong dan teksnya mengalir kemas, tetapi ayat seperti “seperti ditunjukkan carta di atas” kini tidak merujuk kepada apa-apa. Tinggalkan penanda tempat dan anda menambah satu baris yang hampir tidak membawa maklumat.
Lalainya ialah meninggalkan satu baris pendek yang menamakan jenis medianya, dan suis di atas mematikannya. Ada satu kehalusan berkaitan yang berbaloi diketahui: matplotlib mengeluarkan perwakilan teks bersama imej, dan ia sentiasa seperti <Figure size 640x480 with 1 Axes>. Dikekalkan secara membuta, anda dapat baris itu dan penanda tempat, satu selepas satu, menyatakan perkara yang sama dua kali. Apabila sesuatu rajah telah dibuang, teks itulah yang ditahan.
Pemenggalan dari tengah
Ada output yang panjang kerana ia bermaklumat dan ada yang panjang kerana satu gelung mencetak di dalamnya. Alat ini tidak dapat membezakannya, jadi ia mengehadkan setiap output dan memotong dari tengah, mengekalkan permulaan dan pengakhiran serta menandakan berapa banyak aksara yang hilang.
Pemotongan tengah mengatasi pilihan lain atas satu sebab khusus: dua bahagian paling bermaklumat dalam output yang panjang hampir selalu ialah permulaannya, yang menunjukkan bentuk apa yang terhasil, dan pengakhirannya, yang menunjukkan di mana ia berakhir. Dataframe yang dipotong hujung menunjukkan baris pertama dan menyembunyikan baris ringkasan. Yang dipotong kepala menyembunyikan nama lajur. Memotong bahagian tengah mengekalkan kedua-dua hujung cerita.
Kegunaan praktikal notebook yang sudah rata
Beberapa perkara jadi lebih mudah sebaik JSON itu tiada. Membandingkan dua versi notebook dalam teks biasa menunjukkan apa yang berubah dalam analisis, bukan kiraan pelaksanaan mana yang bertambah — sebab nbdime wujud pun kerana git diff biasa pada fail .ipynb tidak boleh dibaca. Mencari dalam satu folder notebook untuk fungsi yang membina sesuatu carta menjadi grep biasa. Mengira perkataan untuk laporan, menyuap notebook kepada alat teks-ke-pertuturan, atau menampal metodologi ke dalam dokumen yang tidak merender Markdown — semuanya berjalan tanpa pembersihan lanjut.
Privasi, dan kenapa ia bersifat struktural di sini
Notebook ialah dokumen kerja, dan dokumen kerja mengumpul perkara yang tiada siapa berniat menyimpannya: token yang ditampal semasa menyahpepijat API, rentetan sambungan, dua puluh baris data pelanggan yang dicetak untuk mengesahkan satu cantuman. Menyerahkannya kepada perkhidmatan penukaran bermakna menyerahkan apa sahaja yang ada di dalamnya.
Penghurai di sini ialah JavaScript yang berjalan dalam tab ini. Fail anda dibaca oleh pelayar, ditukar dalam memori, dan dipaparkan. Tiada muat naik, jadi tiada dasar penyimpanan untuk dipercayai dan tiada pemadaman untuk diminta. Jika anda lebih mahukan blok kod berpagar dan tajuk Markdown, penukar notebook kepada Markdown melakukannya dengan jaminan yang sama.