Dieses Repo enthält sowohl einen Online-Kurs als auch sein modernes Open-Source-Web-Framework. Im Kurs lernen Sie, wie Sie Spacy verwenden, um erweiterte Systeme für natürliche Sprachen zu erstellen, wobei sowohl regelbasierte als auch maschinelle Lernansätze verwendet werden. Das Front-End wird von Gatsby, enthüllt.js und plyr angetrieben, und die Ausführung von Back-End-Code verwendet Binder? Es ist alles Open-Source und veröffentlicht unter der MIT-Lizenz (Code und Framework) und CC BY-NC (Spacy Course Materials).
Dieser Kurs ist hauptsächlich für Selbststudien gedacht. Ja, Sie können betrügen - die Lösungen sind alle in diesem Repo, es gibt keine Strafe für das Klicken auf "Show Tipps" oder "Show -Lösung", und Sie können eine Übung markieren, wenn Sie der Meinung sind, dass dies erledigt ist.
| Sprache | Textbeispiele 1 | Quelle | Autoren |
|---|---|---|---|
| Englisch | Englisch | chapters/en , exercises/en | @ines |
| Deutsch | Deutsch | chapters/de , exercises/de | @ines, @jette16 |
| Spanisch | Spanisch | chapters/es , exercises/es | @Mariacamilagl, @Damian-Romero |
| Französisch | Französisch | chapters/fr , exercises/fr | @datakime |
| japanisch | japanisch | chapters/ja , exercises/ja | @tamuhey, @hiroshi-matsuda-rit, @icoxfog417, @akirakubo, @Forest1988, @ao9mame, @matsurih, @hiromuhota, @mei28, @polm |
| chinesisch | chinesisch | chapters/zh , exercises/zh | @crownpku |
| Portugiesisch | Englisch | chapters/pt , exercises/pt | @Cristianasp |
Wenn Sie einen Fehler erkennen, schätze ich es immer, Anfragen zu ziehen!
1. Dies ist die Sprache, die für die in den Übungen verwendeten Textbeispiele und Ressourcen verwendet wird. Beispielsweise verwendet die deutsche Version des Kurses auch deutsche Textbeispiele und -modelle. Es ist nicht immer möglich, alle Codebeispiele zu übersetzen, daher können einige Übersetzungen den englischen Text als Teil des Kurses verwenden und analysieren.
Ich habe den Inhalt für DataCamp ursprünglich entwickelt, aber ich wollte eine kostenlose Version erstellen, um sie mehr Personen zur Verfügung zu stellen, und Sie müssen sich daher nicht für ihren Service anmelden. Als Wochenendprojekt habe ich meine eigene kleine App zusammengestellt, um die Übungen und Inhalte auf unterhaltsame und interaktive Weise zu präsentieren.
Wahrscheinlich ja! Wenn Sie nach einer DIY -Methode gesucht haben, um Ihre Materialien zu veröffentlichen, hoffe ich, dass mein kleiner Rahmen nützlich sein kann. Weil so viele Menschen Interesse daran bekundeten, habe ich einige Starter -Repos zusammengestellt, die Sie gabt und sich anpassen können:
ines/course-starter-pythonines/course-starter-r Die Quelle der App, der UI-Komponenten und des Gatsby-Frameworks zum Erstellen interaktiver Kurse ist als MIT lizenziert, wie so ziemlich alle meine Open-Source-Software. Die Kursmaterialien selbst (Folien und Kapitel) sind unter CC BY-NC lizenziert. Dies bedeutet, dass Sie sie frei verwenden können - Sie können einfach nicht Geld mit ihnen verdienen.
Erstens, vielen Dank, das ist wirklich cool und wertvoll für die Community? Ich habe versucht, die Kursstruktur einzurichten, damit es einfach ist, verschiedene Sprachen hinzuzufügen: Sprachspezifische Dateien werden in exercises und chapters in Verzeichnissen organisiert, und andere sprachspezifische Texte sind in locale.json verfügbar. Wenn Sie einen Beitrag leisten möchten, gibt es zwei verschiedene Möglichkeiten, sich zu engagieren:
Starten Sie ein Community -Übersetzungsprojekt. Dies ist der einfachste, nicht angehängte Weg. Sie können das Repo aufgeben, die englische Version kopieren, den Sprachcode ändern, übersetzen und andere einladen, einen Beitrag zu leisten (wenn Sie möchten). Wenn Sie nach Mitwirkenden suchen, können Sie hier ein Problem eröffnen oder @Spacy_io auf Twitter taggen, damit wir helfen können, das Wort herauszuholen. Wir beantworten auch Ihre Fragen zum Problem Tracker.
Machen Sie uns zu einem Angebot. Wir sind offen für die Inbetriebnahme von Übersetzungen für verschiedene Sprachen. Wenn Sie also interessiert sind, senden Sie uns eine E -Mail an [email protected] und enthalten Ihr Angebot, Ihren geschätzten Zeitplan und ein wenig über Sie und Ihren Hintergrund (und alle technischen Schreiben oder Übersetzungsarbeiten, die Sie in der Vergangenheit durchgeführt haben, falls verfügbar). Es spielt keine Rolle, wo Sie sich befinden, aber Sie sollten in der Lage sein, Rechnungen als Freiberufler oder ähnliches auszustellen, abhängig von Ihrem Land.
Nochmals, danke, das ist super cool! Während die englischen und deutschen Videos auch eine Videoaufnahme enthalten, ist dies keine Anforderung, und wir würden gerne nur einen Audio -Track neben den Folien bieten. Wir kümmern uns um die Nachbearbeitung und Videobearbeitung, also brauchen wir nur die Audioaufzeichnung. Wenn Sie sich wohl fühlen, wenn Sie sich die Foliennotizen in Ihrer Sprache vorlesen, senden Sie uns eine E -Mail an [email protected] und machen Sie uns ein Angebot und geben Sie ein wenig über Sie und ähnliche Arbeiten ein, die Sie in der Vergangenheit geleistet haben, falls verfügbar.
Um den lokalen Entwicklungsserver zu starten, installieren Sie Gatsby und dann alle anderen Abhängigkeiten und verwenden Sie dann npm run dev um den Entwicklungsserver zu starten. Stellen Sie sicher, dass Sie mindestens den Knoten 10.15 installiert haben.
npm install -g gatsby-cli # Install Gatsby globally
npm install # Install dependencies
npm run dev # Run the development server Wenn Sie mit Docker laufen, make build und make gatsby-dev
Beim Erstellen der Website sucht Gatsby nach .py -Dateien und stellt ihre Inhalte über GraphQL zur Verfügung. Auf diese Weise können wir den Rohcode in der App verwenden. Unter der Haube verwendet die App Binder, um ein Bild mit den Paketabhängigkeiten, einschließlich der Spacy -Modelle, zu servieren. Durch das Aufrufen von JupyterLab können wir Code mit dem aktiven Kernel ausführen. Auf diese Weise können Sie den Code im Browser bearbeiten und die Live -Ergebnisse sehen. Weitere Informationen zur Implementierung finden Sie in meinem juniper -Repo.
Um den Code zu validieren, wenn der Benutzer "Senden" trifft, verwende ich derzeit einen etwas hackigen Trick. Da der Python -Code als Zeichenfolge an den Kernel zurückgeschickt wird, können wir ihn manipulieren und Tests hinzufügen. Übung exc_01_02_01.py wird mit test_01_02_01.py (falls verfügbar) validiert. Der Benutzercode und der Test werden mit einer String -Vorlage kombiniert. Derzeit sieht die testTemplate im meta.json so aus:
from wasabi import msg
__msg__ = msg
__solution__ = """${solution}"""
${solution}
${test}
try:
test()
except AssertionError as e:
__msg__.fail(e)
Wenn dies vorhanden ist, wird ${solution} durch den Zeichenfolgenwert des eingereichten Benutzercode ersetzt. In diesem Fall setzen wir es zweimal ein: einmal als Zeichenfolge, damit wir überprüfen können, ob die Einreichung etwas enthält und einmal als Code, damit wir sie tatsächlich ausführen und die von ihnen erstellten Objekte überprüfen können. ${test} wird durch den Inhalt der Testdatei ersetzt. Ich mache auch wasabi Drucker als __msg__ verfügbar, damit wir in den Tests hübsche Nachrichten problemlos drucken können. Schließlich wird Blocküberprüfungen try / accept , wenn die Testfunktion einen AssertionError erhöht, und wenn ja, zeigt die Fehlermeldung an. Dies verbirgt auch den vollständigen Fehlerverzeichnis (der leicht die richtigen Antworten ausgeht).
Eine Testdatei könnte dann so aussehen:
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."
)Mit diesem Ansatz ist es nicht immer möglich, die Eingabe perfekt zu validieren - es gibt zu viele Optionen und wir möchten falsch positive Ergebnisse vermeiden.
Die automatisierten Tests stellen sicher, dass der bereitgestellte Lösungscode mit der Testdatei kompatibel ist, die zur Überprüfung der Einreichungen verwendet wird. Die Testsuite wird vom pytest -Framework angetrieben, und es werden automatisch in einem Verzeichnis __tests__ generiert, bevor die Testsitzung beginnt. Die Implementierungsdetails finden Sie conftest.py .
# Install requirements
pip install -r binder/requirements.txt
# Run the tests (will generate the files automatically)
python -m pytest __tests__ Wenn Sie mit Docker laufen lassen, make build und dann 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 Die requirements.txt im Repository definiert die Pakete, die beim Erstellen mit Binder installiert sind. Für diesen Kurs verwende ich das Quell -Repo als Binder -Repo, da es ermöglicht, alles an einem Ort zu behalten. Außerdem können die Übungen auf andere Dateien verweisen und geladen werden (z. B. JSON), die in die Python -Umgebung kopiert werden. Ich baue den Ordner jedoch aus einem Zweig binder , den ich nur aktualisiere, wenn sich binderrelevante Dateien ändern. Andernfalls würde jedes Update für master einen Bild -Wiederaufbau auslösen.
Sie können die Bindereinstellungen wie Repo, Zweig und Kernel -Typ im Abschnitt "juniper" des meta.json angeben. Ich würde empfehlen, den ersten Build über die Schnittstelle auf der Binder -Website auszuführen, da Sie ein detailliertes Build -Protokoll und Feedback darüber erhalten, ob alles wie erwartet funktioniert hat. Geben Sie Ihre Repository -URL ein, klicken Sie auf "Starten" und warten Sie, um die Abhängigkeiten zu installieren und das Bild zu erstellen.

Die Kapitel werden in /chapters platziert und sind Markdown -Dateien, die aus <exercise> -Komponenten bestehen. Sie werden in Seiten umgewandelt, z /chapter1 . In ihrem Frontmatter -Block oben in der Datei müssen sie type: chapter sowie das folgende Meta angeben:
---
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
---
Folien werden in /slides platziert und sind Markdown-Dateien, die aus Folieninhalten bestehen, die durch --- getrennt sind. Sie müssen den folgenden Frontmatter -Block oben in der Datei angeben:
---
type : slides
---
Die erste und letzte Folie verwendet ein spezielles Layout und zeigt die Überschrift in der Mitte der Folie an. Sprechernotizen (in diesem Fall können das Skript am Ende einer Folie hinzugefügt werden, die durch Notes: . Sie werden dann rechts neben den Folien angezeigt. Hier ist eine Beispiel -Foliendatei:
---
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 " />Stellen Sie bei der Verwendung benutzerdefinierter Elemente sicher, dass Sie eine neue Linie zwischen den Eröffnungs- und Schluss -Tags und den Kindern platzieren. Andernfalls kann der Markdown -Inhalt möglicherweise nicht korrekt erledigt.
<exercise>Behälter einer einzigen Übung.
| Argument | Typ | Beschreibung |
|---|---|---|
id | Nummer / Zeichenfolge | Eindeutige Übungs -ID innerhalb des Kapitels. |
title | Saite | Übungstitel. |
type | Saite | Optionaler Typ. "slides" macht den Behälter breiter und fügt Symbol hinzu. |
| Kinder | - - | Der Inhalt der Übung. |
< exercise id = " 1 " title = " Introduction to spaCy " >
Content goes here...
</ exercise ><codeblock>| Argument | Typ | Beschreibung |
|---|---|---|
id | Nummer / Zeichenfolge | Eindeutige Kennung der Code -Übung. |
source | Saite | Name der Quelldatei (ohne Dateierweiterung). Standardmäßig zu exc_${id} wenn nicht festgelegt. |
solution | Saite | Name der Lösungsdatei (ohne Dateierweiterung). Standardmäßig solution_${id} Wenn nicht festgelegt. |
test | Saite | Name der Testdatei (ohne Dateierweiterung). Standards zum test_${id} Wenn nicht festgelegt. |
| Kinder | Saite | Optionale Hinweise, die angezeigt werden, wenn der Benutzer auf "Hinweise anzeigen" klickt. |
< codeblock id = " 02_03 " >
This is a hint!
</ codeblock ><slides>Container zum interaktiven Anzeigen von Folien mithilfe von dendy.js und einer Markdown -Datei.
| Argument | Typ | Beschreibung |
|---|---|---|
source | Saite | Name der Foliendatei (ohne Dateierweiterung). |
< slides source = " chapter1_01_introduction-to-spacy " >
</ slides ><choice>Container für Multiple-Choice-Frage.
| Argument | Typ | Beschreibung |
|---|---|---|
id | String / Nummer | Optionale eindeutige ID. Kann verwendet werden, wenn mehr als eine Auswahlfrage in einer Übung vorhanden ist. |
| Kinder | Knoten | Nur <opt> Komponenten für die Optionen. |
< 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>Eine Multiple-Choice-Option.
| Argument | Typ | Beschreibung |
|---|---|---|
text | Saite | Der zu angezeigte Optionstext. Unterstützt Inline HTML. |
correct | Saite | "true" , wenn die Option die richtige Antwort ist. |
| Kinder | Saite | Der zu angezeigte Text, wenn die Option ausgewählt ist (erklärt, warum er korrekt oder falsch ist). |