Этот репо содержит как онлайн-курс , а также его современную веб-структуру с открытым исходным кодом. В курсе вы узнаете, как использовать Spacy для создания расширенных систем понимания естественного языка, используя как подходы как на основе правил, так и подходов машинного обучения. Фронт-энд питается Gatsby, Spect.js и Plyr, а в выполнении кода на заднем плане используется переплет? Все это открыт и опубликовано по лицензии MIT (код и структура) и CC BY-NC (материалы курса SPACY).
Этот курс в основном предназначен для самообучения . Да, вы можете обмануть - решения - все в этом репо, нет штрафа за нажатие на нажатие «Показать подсказки» или «Show Solution», и вы можете отметить упражнение, как сделано, когда вы думаете, что это сделано.
| Язык | Текстовые примеры 1 | Источник | Авторы |
|---|---|---|---|
| Английский | Английский | chapters/en , exercises/en | @ines |
| немецкий | немецкий | chapters/de , exercises/de | @ines, @Jette16 |
| испанский | испанский | chapters/es , exercises/es | @mariacamilagl, @Damian-Romero |
| Французский | Французский | chapters/fr , exercises/fr | @datakime |
| Японский | Японский | chapters/ja , exercises/ja | @tamuhey, @hiroshi-matsuda-rit, @icoxfog417, @akirakubo, @forest1988, @ao9mame, @matsurih, @hiromuhota, @mei28, @polm |
| китайский | китайский | chapters/zh , exercises/zh | @crownpku |
| португальский | Английский | chapters/pt , exercises/pt | @Cristianasp |
Если вы заметите ошибку, я всегда ценю запросы на привлечение!
1. Это язык, используемый для текстовых примеров и ресурсов, используемых в упражнениях. Например, немецкая версия курса также использует немецкие текстовые примеры и модели. Не всегда возможно перевести все примеры кода, поэтому некоторые переводы все еще могут использовать и анализировать текст английского языка как часть курса.
Первоначально я разработал контент для DataCamp, но я хотел сделать бесплатную версию, чтобы сделать его доступным для большего количества людей, и поэтому вам не нужно подписаться на их сервис. В качестве проекта на выходных я в итоге собрал свое собственное маленькое приложение, чтобы представить упражнения и контент веселым и интерактивным способом.
Наверное, да! Если вы искали DIY, чтобы опубликовать свои материалы, я надеюсь, что моя маленькая структура может быть полезна. Поскольку так много людей выразили интерес к этому, я собрал несколько стартовых репозиторов, которые вы можете расколоть и адаптировать:
ines/course-starter-pythonines/course-starter-r Источник приложения, компонентов пользовательского интерфейса и Gatsby Framework для создания интерактивных курсов лицензируется как MIT, как и все мое программное обеспечение с открытым исходным кодом. Сами материалы курса (слайды и главы) лицензированы в соответствии с CC NC. Это означает, что вы можете использовать их свободно - вы просто не можете зарабатывать на них деньги.
Во -первых, большое спасибо, это действительно круто и ценно для сообщества? Я пытался настроить структуру курса, поэтому легко добавить разные языки: файлы, специфичные для языка, организованы в каталоги в exercises и chapters , а другие языковые тексты доступны в locale.json . Если вы хотите внести свой вклад, есть два разных способа принять участие:
Начните проект по переводу сообщества. Это самый простой, без страхового пути. Вы можете расколоть репо, копировать английскую версию, изменить языковой код, начать переводить и приглашать других внести (если хотите). Если вы ищете участников, не стесняйтесь открывать проблему здесь или отметьте @spacy_io в Твиттере, чтобы мы могли помочь получить слово. Мы также рады ответить на ваши вопросы по трекеру.
Сделайте нас предложением. Мы открыты для ввода в эксплуатацию переводов для разных языков, поэтому, если вы заинтересованы, напишите нам по адресу [email protected] и включите ваше предложение, расчетное расписание времени и немного о вас и о вашем опыте (и любую техническую работу или работу по переводу, которые вы выполняли в прошлом, если таковые имеются). Неважно, где вы базируетесь, но вы должны быть в состоянии выдать счета в качестве фрилансера или аналогичного, в зависимости от вашей страны.
Опять же, спасибо, это очень круто! Хотя английские и немецкие видео также включают в себя видеозапись, это не требование, и мы будем рады просто предоставить аудио -трек наряду с слайдами. Мы позаботились бы о постобработке и редактировании видео, поэтому все, что нам нужно, это аудиозапись. Если вы чувствуете себя комфортно, записывая себя, читая заметки слайда на своем языке, напишите нам по адресу [email protected], сделайте нам предложение и включите немного о вас и подобных работах, которые вы выполняли в прошлом, если таковые имеются.
Чтобы запустить локальный сервер разработки, установите Gatsby, а затем все другие зависимости, затем используйте npm run dev чтобы запустить сервер разработки. Убедитесь, что у вас установлен хотя бы узел 10.15.
npm install -g gatsby-cli # Install Gatsby globally
npm install # Install dependencies
npm run dev # Run the development server Если бег с Docker просто запустите, make build , а затем make gatsby-dev
При создании сайта Gatsby будет искать файлы .py и предоставить их содержимое для запроса через GraphQL. Это позволяет нам использовать необработанный код в приложении. Под капотом приложение использует переплет, чтобы обслуживать изображение с зависимостями пакетов, включая модели Spacy. Призывая в jupyterlab, мы можем затем выполнить код, используя активное ядро. Это позволяет вам редактировать код в браузере и увидеть результаты в прямом эфире. Также см. My juniper Repo для получения более подробной информации о реализации.
Чтобы проверить код, когда пользователь попадает в «Отправить», я в настоящее время использую слегка хакерскую трюк. Поскольку код Python отправляется обратно в ядро в качестве строки, мы можем манипулировать им и добавлять тесты - например, упражнение exc_01_02_01.py будет проверено с помощью test_01_02_01.py (если доступно). Код пользователя и тест объединяются с использованием шаблона строки. На данный момент testTemplate в meta.json выглядит так:
from wasabi import msg
__msg__ = msg
__solution__ = """${solution}"""
${solution}
${test}
try:
test()
except AssertionError as e:
__msg__.fail(e)
Если присутствует, ${solution} будет заменено на строковое значение отправленного кода пользователя. В этом случае мы вставляем его дважды: один раз в качестве строки, чтобы мы могли проверить, включает ли представление о чем -то, и один раз в качестве кода, чтобы мы могли фактически запустить его и проверить объекты, которые он создает. ${test} заменяется содержимым тестового файла. Я также делаю принтер wasabi доступным как __msg__ , поэтому мы можем легко печатать красивые сообщения в тестах. Наконец, блок try / accept проверяет, поднимает ли функция тестирования AssertionError , и если это так, отображает сообщение об ошибке. Это также скрывает полную ошибку Traceback (который может легко протекать правильные ответы).
Тестовый файл может выглядеть так:
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."
)При таком подходе не всегда можно отлично проверить вход - слишком много вариантов, и мы хотим избежать ложных срабатываний.
Автоматизированные тесты гарантируют, что предоставленный код решения совместим с тестовым файлом, который используется для проверки представлений. Тестовый набор питается на основе pytest , а выполняемые тестовые файлы генерируются автоматически в каталоге __tests__ до начала тестового сеанса. См. conftest.py для деталей реализации.
# Install requirements
pip install -r binder/requirements.txt
# Run the tests (will generate the files automatically)
python -m pytest __tests__ Если бег с Docker просто запустить, make build , а затем 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 TXT в репозитории определяет пакеты, которые установлены при его построении с помощью связующего. Для этого курса я использую исходное репо в качестве репосновки, поскольку он позволяет держать все в одном месте. Это также позволяет упражнениям ссылаться и загружать другие файлы (например, JSON), которые будут скопированы в среду Python. Я строю связующее из ветвиного binder , которое я обновляю, только если изменяются файлы, связанные с переплетением. В противном случае каждое обновление для master запустило бы восстановление изображения.
Вы можете указать настройки связующего, такие как репо, ветвь и тип ядра в разделе "juniper" в meta.json . Я бы порекомендовал запустить самую первую сборку через интерфейс на веб -сайте Binder, так как это дает вам подробный журнал сборки и отзывы о том, сработало ли все, как и ожидалось. Введите URL -адрес репозитория, нажмите «Запуск» и подождите, пока он установит зависимости и создайте изображение.

Главы размещаются в /chapters и представляют собой файлы разметки, состоящие из компонентов <exercise> . Они будут превращены в страницы, например /chapter1 . В своем блоке передней части в верхней части файла им необходимо указать type: chapter , а также следующую мета:
---
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
---
Слайды помещаются в /slides и представляют собой файлы разметки, состоящие из содержимого слайда, разделенные --- . Им нужно указать следующий блок переднего мельницы в верхней части файла:
---
type : slides
---
Первый и последний слайд использует специальный макет и отобразит заголовок в центре слайда. Примечания к спикеру (в этом случае сценарий) можно добавить в конце слайда, префиксированного Notes: . Затем они будут показаны справа рядом со слайдами. Вот пример слайдов файл:
---
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 " />При использовании пользовательских элементов обязательно поместите новую строку между тегами открытия/закрытия и детьми. В противном случае контент разметки может неправильно отображаться.
<exercise>Контейнер одного упражнения.
| Аргумент | Тип | Описание |
|---|---|---|
id | номер / строка | Уникальный идентификатор упражнений в главе. |
title | нить | Название упражнения. |
type | нить | Необязательный тип. "slides" делает контейнер шире и добавляет значок. |
| дети | - | Содержимое упражнения. |
< exercise id = " 1 " title = " Introduction to spaCy " >
Content goes here...
</ exercise ><codeblock>| Аргумент | Тип | Описание |
|---|---|---|
id | номер / строка | Уникальный идентификатор кода. |
source | нить | Имя исходного файла (без расширения файла). По умолчанию exc_${id} если не установлено. |
solution | нить | Имя файла решения (без расширения файла). По умолчанию solution_${id} если не установлено. |
test | нить | Имя тестового файла (без расширения файла). По умолчанию test_${id} если не установлено. |
| дети | нить | Необязательные подсказки отображаются, когда пользователь нажимает «Показать подсказки». |
< codeblock id = " 02_03 " >
This is a hint!
</ codeblock ><slides>Контейнер для отображения слайдов интерактивно с использованием Spect.js и файла разметки.
| Аргумент | Тип | Описание |
|---|---|---|
source | нить | Имя файла слайдов (без расширения файла). |
< slides source = " chapter1_01_introduction-to-spacy " >
</ slides ><choice>Контейнер для вопроса с множественным выбором.
| Аргумент | Тип | Описание |
|---|---|---|
id | строка / номер | Необязательный уникальный идентификатор. Может использоваться, если в одном упражнении присутствует более одного выбора. |
| дети | узлы | Только <opt> компоненты для вариантов. |
< 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>Вариант с несколькими вариантами выбора.
| Аргумент | Тип | Описание |
|---|---|---|
text | нить | Опция текста для отображения. Поддерживает встроенный HTML. |
correct | нить | "true" , если вариант - правильный ответ. |
| дети | нить | Текст, который будет отображаться, если выбрана опция (объясняя, почему он правильный или неверный). |