Repo ini berisi kursus online , serta kerangka kerja web open-source modern. Dalam kursus, Anda akan belajar cara menggunakan spacy untuk membangun sistem pemahaman bahasa alami canggih, menggunakan pendekatan pembelajaran berbasis aturan dan mesin. Front-end ditenagai oleh Gatsby, ungkap.js dan Plyr, dan eksekusi kode back-end menggunakan Binder? Semuanya open-source dan diterbitkan di bawah lisensi MIT (kode dan kerangka kerja) dan CC BY-NC (materi kursus spacy).
Kursus ini sebagian besar dimaksudkan untuk belajar mandiri . Ya, Anda dapat menipu - solusinya semuanya ada dalam repo ini, tidak ada penalti untuk mengklik "Petunjuk Tampilkan" atau "Tampilkan Solusi", dan Anda dapat menandai latihan seperti yang dilakukan ketika Anda berpikir itu sudah selesai.
| Bahasa | Contoh teks 1 | Sumber | Penulis |
|---|---|---|---|
| Bahasa inggris | Bahasa inggris | chapters/en , exercises/en | @ines |
| Jerman | Jerman | chapters/de , exercises/de | @ines, @jette16 |
| Spanyol | Spanyol | chapters/es , exercises/es | @mariacamilagl, @Damian-romero |
| Perancis | Perancis | chapters/fr , exercises/fr | @datakime |
| Jepang | Jepang | chapters/ja , exercises/ja | @tamuhey, @hiroshi-matsuda-rit, @icoxfog417, @akirakubo, @forest1988, @ao9mame, @matsurih, @hiromuhota, @mei28, @polm |
| Cina | Cina | chapters/zh , exercises/zh | @crownpku |
| Portugis | Bahasa inggris | chapters/pt , exercises/pt | @Cristianasp |
Jika Anda melihat kesalahan, saya selalu menghargai permintaan tarik!
1. Ini adalah bahasa yang digunakan untuk contoh teks dan sumber daya yang digunakan dalam latihan. Misalnya, versi Jerman dari kursus ini juga menggunakan contoh teks dan model Jerman. Tidak selalu mungkin untuk menerjemahkan semua contoh kode, sehingga beberapa terjemahan masih dapat menggunakan dan menganalisis teks bahasa Inggris sebagai bagian dari kursus.
Saya awalnya mengembangkan konten untuk DataCamp, tetapi saya ingin membuat versi gratis untuk membuatnya tersedia untuk lebih banyak orang, dan Anda tidak harus mendaftar untuk layanan mereka. Sebagai proyek akhir pekan, saya akhirnya menyusun aplikasi kecil saya sendiri untuk menyajikan latihan dan konten dengan cara yang menyenangkan dan interaktif.
Mungkin, ya! Jika Anda telah mencari cara DIY untuk mempublikasikan materi Anda, saya harap kerangka kecil saya bisa bermanfaat. Karena begitu banyak orang menyatakan minatnya pada hal ini, saya mengumpulkan beberapa repo starter yang dapat Anda garpu dan beradaptasi:
ines/course-starter-pythonines/course-starter-r Sumber aplikasi, komponen UI dan kerangka kerja Gatsby untuk membangun kursus interaktif dilisensikan sebagai MIT, seperti hampir semua perangkat lunak open-source saya. Bahan kursus itu sendiri (slide dan bab), dilisensikan di bawah CC BY-NC. Ini berarti Anda dapat menggunakannya dengan bebas - Anda tidak dapat menghasilkan uang dari mereka.
Pertama, terima kasih banyak, ini sangat keren dan berharga bagi masyarakat? Saya sudah mencoba mengatur struktur kursus sehingga mudah untuk menambahkan bahasa yang berbeda: file khusus bahasa diatur ke dalam direktori dalam exercises dan chapters , dan teks spesifik bahasa lainnya tersedia di locale.json . Jika Anda ingin berkontribusi, ada dua cara berbeda untuk terlibat:
Mulai proyek terjemahan komunitas. Ini adalah cara termudah, tanpa ikatan. Anda dapat membayar repo, meniru-paste versi bahasa Inggris, mengubah kode bahasa, mulai menerjemahkan dan mengundang orang lain untuk berkontribusi (jika Anda suka). Jika Anda mencari kontributor, jangan ragu untuk membuka masalah di sini atau tag @spacy_io di Twitter sehingga kami dapat membantu mengeluarkan berita. Kami juga senang menjawab pertanyaan Anda tentang pelacak masalah.
Beri kami penawaran. Kami terbuka untuk menugaskan terjemahan untuk berbagai bahasa, jadi jika Anda tertarik, email kami di [email protected] dan sertakan penawaran Anda, jadwal waktu yang diperkirakan dan sedikit tentang Anda dan latar belakang Anda (dan pekerjaan penulisan teknis atau terjemahan yang telah Anda lakukan di masa lalu, jika tersedia). Tidak masalah di mana Anda berbasis, tetapi Anda harus dapat mengeluarkan faktur sebagai freelancer atau serupa, tergantung pada negara Anda.
Sekali lagi, terima kasih, ini sangat keren! Sementara video Inggris dan Jerman juga menyertakan rekaman video, itu bukan persyaratan dan kami akan dengan senang hati hanya menyediakan trek audio di samping slide. Kami akan mengurus postprocessing dan pengeditan video, jadi yang kami butuhkan hanyalah perekaman audio. Jika Anda merasa nyaman merekam diri Anda dengan membaca catatan slide dalam bahasa Anda, email kami di [email protected] dan buat kami tawaran dan sertakan sedikit tentang Anda dan pekerjaan serupa yang telah Anda lakukan di masa lalu, jika tersedia.
Untuk memulai server pengembangan lokal, instal Gatsby dan kemudian semua dependensi lainnya, kemudian gunakan npm run dev untuk memulai server pengembangan. Pastikan Anda memiliki setidaknya Node 10.15 terpasang.
npm install -g gatsby-cli # Install Gatsby globally
npm install # Install dependencies
npm run dev # Run the development server Jika berlari dengan Docker, jalankan, make build dan kemudian make gatsby-dev
Saat membangun situs, Gatsby akan mencari file .py dan membuat kontennya tersedia untuk kueri melalui GraphQL. Ini memungkinkan kami menggunakan kode mentah di dalam aplikasi. Di bawah kap, aplikasi menggunakan Binder untuk menyajikan gambar dengan dependensi paket, termasuk model spacy. Dengan menelepon ke Jupyterlab, kita kemudian dapat menjalankan kode menggunakan kernel aktif. Ini memungkinkan Anda mengedit kode di browser dan melihat hasil langsung. Juga lihat repo juniper saya untuk detail lebih lanjut tentang implementasi.
Untuk memvalidasi kode ketika pengguna mencapai "kirim", saya saat ini menggunakan trik yang sedikit hacky. Karena kode Python dikirim kembali ke kernel sebagai string, kita dapat memanipulasinya dan menambahkan tes - misalnya, Latihan exc_01_02_01.py akan divalidasi menggunakan test_01_02_01.py (jika tersedia). Kode dan tes pengguna digabungkan menggunakan templat string. Saat ini, testTemplate di meta.json terlihat seperti ini:
from wasabi import msg
__msg__ = msg
__solution__ = """${solution}"""
${solution}
${test}
try:
test()
except AssertionError as e:
__msg__.fail(e)
Jika ada, ${solution} akan diganti dengan nilai string dari kode pengguna yang dikirimkan. Dalam hal ini, kami memasukkannya dua kali: sekali sebagai string sehingga kami dapat memeriksa apakah pengiriman termasuk sesuatu, dan sekali sebagai kode, sehingga kami benar -benar dapat menjalankannya dan memeriksa objek yang dibuatnya. ${test} digantikan oleh isi file uji. Saya juga membuat printer wasabi tersedia sebagai __msg__ , sehingga kami dapat dengan mudah mencetak pesan cantik dalam tes. Akhirnya, blok try / accept memeriksa jika fungsi tes meningkatkan AssertionError dan jika demikian, menampilkan pesan kesalahan. Ini juga menyembunyikan traceback kesalahan penuh (yang dapat dengan mudah membocorkan jawaban yang benar).
File tes kemudian bisa terlihat seperti ini:
def test ():
assert "spacy.load" in __solution__ , "Are you calling spacy.load?"
assert nlp . meta [ "lang" ] == "en" , "Are you loading the correct model?"
assert nlp . meta [ "name" ] == "core_web_sm" , "Are you loading the correct model?"
assert "nlp(text)" in __solution__ , "Are you processing the text correctly?"
assert "print(doc.text)" in __solution__ , "Are you printing the Doc's text?"
__msg__ . good (
"Well done! Now that you've practiced loading models, let's look at "
"some of their predictions."
)Dengan pendekatan ini, tidak selalu mungkin untuk memvalidasi input dengan sempurna - ada terlalu banyak pilihan dan kami ingin menghindari positif palsu.
Tes otomatis memastikan bahwa kode solusi yang disediakan kompatibel dengan file uji yang digunakan untuk memvalidasi pengiriman. Suite tes ditenagai oleh kerangka kerja pytest dan file uji runnable dihasilkan secara otomatis di direktori __tests__ sebelum sesi tes dimulai. Lihat conftest.py untuk detail implementasi.
# Install requirements
pip install -r binder/requirements.txt
# Run the tests (will generate the files automatically)
python -m pytest __tests__ Jika berlari dengan Docker, jalankan saja make build dan kemudian make pytest
├── binder
| └── requirements.txt # Python dependency requirements for Binder
├── chapters # chapters, grouped by language
| ├── en # English chapters, one Markdown file per language
| | └── slides # English slides, one Markdown file per presentation
| └── ... # other languages
├── exercises # code files, tests and assets for exercises
| ├── en # English exercises, solutions, tests and data
| └── ... # other languages
├── public # compiled site
├── src # Gatsby/React source, independent from content
├── static # static assets like images, available in slides/chapters
├── locale.json # translations of meta and UI text
├── meta.json # course metadata
└── theme.sass # UI theme colors and settings requirements.txt di repositori menentukan paket yang dipasang saat membangunnya dengan binder. Untuk kursus ini, saya menggunakan repo sumber sebagai repo binder, karena memungkinkan untuk menjaga semuanya di satu tempat. Ini juga memungkinkan latihan referensi dan memuat file lain (misalnya JSON), yang akan disalin ke lingkungan Python. Saya membangun pengikat dari binder cabang, yang hanya saya perbarui jika file yang relevan dengan pengikat berubah. Kalau tidak, setiap pembaruan untuk master akan memicu pembangunan kembali gambar.
Anda dapat menentukan pengaturan binder seperti jenis repo, cabang dan kernel di bagian "juniper" meta.json . Saya merekomendasikan menjalankan build pertama melalui antarmuka di situs web Binder, karena ini memberi Anda log build terperinci dan umpan balik tentang apakah semuanya berfungsi seperti yang diharapkan. Masukkan URL repositori Anda, klik "Luncurkan" dan tunggu untuk menginstal dependensi dan membangun gambar.

Bab ditempatkan di dalam /chapters dan merupakan file penurunan harga yang terdiri dari komponen <exercise> . Mereka akan diubah menjadi halaman, misalnya /chapter1 . Di blok frontmatter mereka di bagian atas file, mereka perlu menentukan type: chapter , serta meta berikut:
---
title : The chapter title
description : The chapter description
prev : /chapter1 # exact path to previous chapter or null to not show a link
next : /chapter3 # exact path to next chapter or null to not show a link
id : 2 # unique identifier for chapter
type : chapter # important: this creates a standalone page from the chapter
---
Slide ditempatkan di /slides dan merupakan file markdown yang terdiri dari konten slide, dipisahkan oleh --- . Mereka perlu menentukan blok frontmatter berikut di bagian atas file:
---
type : slides
---
Slide pertama dan terakhir menggunakan tata letak khusus dan akan menampilkan tajuk di tengah slide. Catatan pembicara (dalam hal ini, skrip) dapat ditambahkan di akhir slide, diawali dengan Notes: . Mereka kemudian akan ditampilkan di sebelah kanan di sebelah slide. Berikut adalah contoh file slide:
---
type : slide
---
# Processing pipelines
Notes: This is a slide deck about processing pipelines.
---
# Next slide
- Some bullet points here
- And another bullet point
< img src = " /image.jpg " alt = " An image located in /static " />Saat menggunakan elemen khusus, pastikan untuk menempatkan garis baru antara tag pembukaan/penutupan dan anak -anak. Kalau tidak, konten markdown tidak dapat diterjemahkan dengan benar.
<exercise>Wadah latihan tunggal.
| Argumen | Jenis | Keterangan |
|---|---|---|
id | Nomor / String | ID Latihan Unik dalam Bab. |
title | rangkaian | Judul olahraga. |
type | rangkaian | Tipe opsional. "slides" membuat wadah lebih lebar dan menambahkan ikon. |
| anak-anak | - | Isi latihan. |
< exercise id = " 1 " title = " Introduction to spaCy " >
Content goes here...
</ exercise ><codeblock>| Argumen | Jenis | Keterangan |
|---|---|---|
id | Nomor / String | Pengidentifikasi unik dari latihan kode. |
source | rangkaian | Nama file sumber (tanpa ekstensi file). Default ke exc_${id} jika tidak diatur. |
solution | rangkaian | Nama file solusi (tanpa ekstensi file). Default ke solution_${id} jika tidak diatur. |
test | rangkaian | Nama file uji (tanpa ekstensi file). Default untuk test_${id} jika tidak diatur. |
| anak-anak | rangkaian | Petunjuk opsional ditampilkan saat pengguna mengklik "Tampilkan Petunjuk". |
< codeblock id = " 02_03 " >
This is a hint!
</ codeblock ><slides>Container untuk menampilkan slide secara interaktif menggunakan Depress.js dan file markdown.
| Argumen | Jenis | Keterangan |
|---|---|---|
source | rangkaian | Nama file slide (tanpa ekstensi file). |
< slides source = " chapter1_01_introduction-to-spacy " >
</ slides ><choice>Wadah untuk pertanyaan pilihan ganda.
| Argumen | Jenis | Keterangan |
|---|---|---|
id | string / angka | ID unik opsional. Dapat digunakan jika lebih dari satu pertanyaan pilihan hadir dalam satu latihan. |
| anak-anak | node | Hanya komponen <opt> untuk opsi. |
< choice >
< opt text = " Option one " >You have selected option one! This is not good.</ opt >
< opt text = " Option two " correct = " true " >Yay! </ opt >
</ choice ><opt>Opsi pilihan ganda.
| Argumen | Jenis | Keterangan |
|---|---|---|
text | rangkaian | Teks opsi yang akan ditampilkan. Mendukung HTML inline. |
correct | rangkaian | "true" jika opsi tersebut adalah jawaban yang benar. |
| anak-anak | rangkaian | Teks yang akan ditampilkan jika opsi dipilih (menjelaskan mengapa itu benar atau salah). |