Este repositório contém um curso on-line , bem como sua moderna estrutura da web de código aberto. No curso, você aprenderá a usar o Spacy para criar sistemas avançados de compreensão de idiomas naturais, usando abordagens de aprendizado de máquina e de aprendizado de máquina. O front-end é alimentado por Gatsby, Revel.js e Plyr, e a execução do código de back-end usa o Binder? É tudo de código aberto e publicado sob a licença do MIT (código e estrutura) e CC BY-NC (materiais do curso de spacy).
Este curso se destina principalmente ao auto-estudo . Sim, você pode trapacear - as soluções estão todas neste repositório, não há penalidade por clicar em "Mostrar dicas" ou "Show Solution", e você pode marcar um exercício como feito quando pensa que está feito.
| Linguagem | Exemplos de texto 1 | Fonte | Autores |
|---|---|---|---|
| Inglês | Inglês | chapters/en , exercises/en | @ines |
| Alemão | Alemão | chapters/de , exercises/de | @ines, @jette16 |
| Espanhol | Espanhol | chapters/es , exercises/es | @Mariacamilagl, @Damian-Romero |
| Francês | Francês | chapters/fr , exercises/fr | @datakime |
| japonês | japonês | chapters/ja , exercises/ja | @tamuhey, @hiroshi-matsuda-rit, @icoxfog417, @akirakubo, @Forest1988, @AO9Mame, @Matsurih, @Hiromuhota, @MEI28, @polm |
| chinês | chinês | chapters/zh , exercises/zh | @crownpku |
| Português | Inglês | chapters/pt , exercises/pt | @Cristiansasp |
Se você encontrar um erro, sempre aprecio solicitações de puxar!
1. Este é o idioma usado para os exemplos e recursos de texto usados nos exercícios. Por exemplo, a versão alemã do curso também usa exemplos e modelos de texto alemães. Nem sempre é possível traduzir todos os exemplos de código, para que algumas traduções ainda possam usar e analisar o texto em inglês como parte do curso.
Originalmente, desenvolvi o conteúdo do Datacamp, mas queria criar uma versão gratuita para disponibilizá -lo para mais pessoas e, portanto, você não precisa se inscrever no serviço deles. Como um projeto de fim de semana, acabei montando meu próprio aplicativo para apresentar os exercícios e o conteúdo de uma maneira divertida e interativa.
Provavelmente, sim! Se você está procurando uma maneira DIY de publicar seus materiais, espero que minha pequena estrutura possa ser útil. Como tantas pessoas manifestaram interesse nisso, reuni alguns repositórios iniciais que você pode gastar e adaptar:
ines/course-starter-pythonines/course-starter-r A fonte do aplicativo, os componentes da interface do usuário e a estrutura de Gatsby para a criação de cursos interativos é licenciada como MIT, como praticamente todo o meu software de código aberto. Os próprios materiais do curso (slides e capítulos) são licenciados sob o CC BY-NC. Isso significa que você pode usá -los livremente - você simplesmente não pode ganhar dinheiro com eles.
Primeiro, muito obrigado, isso é muito legal e valioso para a comunidade? Eu tentei configurar a estrutura do curso para que seja fácil adicionar idiomas diferentes: os arquivos específicos do idioma são organizados em diretórios em exercises e chapters , e outros textos específicos do idioma estão disponíveis em locale.json . Se você deseja contribuir, existem duas maneiras diferentes de se envolver:
Inicie um projeto de tradução da comunidade. Este é o caminho mais fácil e não atingido. Você pode gastar o repositório, copiar a versão em inglês, alterar o código do idioma, começar a traduzir e convidar outras pessoas a contribuir (se quiser). Se você está procurando colaboradores, sinta -se à vontade para abrir um problema aqui ou marcar @spacy_io no Twitter para que possamos ajudar a divulgar. Também estamos felizes em responder suas perguntas sobre o rastreador de questões.
Faça -nos uma oferta. Estamos abertos a traduções de comissionamento para diferentes idiomas; portanto, se você estiver interessado, envie um e -mail para [email protected] e inclua sua oferta, cronograma estimado e um pouco sobre você e seu histórico (e qualquer trabalho técnico de redação ou tradução que você fez no passado, se disponível). Não importa onde você se baseia, mas você poderá emitir faturas como freelancer ou similar, dependendo do seu país.
Mais uma vez, obrigado, isso é super legal! Embora os vídeos em inglês e alemão também incluam uma gravação de vídeo, não é um requisito e ficaremos felizes em fornecer uma faixa de áudio ao lado dos slides. Nós cuidaríamos da edição de pós -processamento e vídeo, para que tudo o que precisamos é a gravação de áudio. Se você se sentir confortável gravando -se lendo as notas de slides em seu idioma, envie um e -mail para [email protected] e faça uma oferta e inclua um pouco sobre você e um trabalho semelhante que você fez no passado, se disponível.
Para iniciar o servidor de desenvolvimento local, instale o Gatsby e, em seguida, todas as outras dependências, use npm run dev para iniciar o servidor de desenvolvimento. Verifique se você tem pelo menos o nó 10.15 instalado.
npm install -g gatsby-cli # Install Gatsby globally
npm install # Install dependencies
npm run dev # Run the development server Se correr com o Docker, basta correr, make build e depois make gatsby-dev
Ao criar o site, o Gatsby procurará arquivos .py e disponibilizará seu conteúdo para consultar via grafql. Isso nos permite usar o código bruto no aplicativo. Sob o capô, o aplicativo usa o fichário para servir uma imagem com as dependências do pacote, incluindo os modelos Spacy. Ao chamar o JupyterLab, podemos executar o código usando o kernel ativo. Isso permite editar o código no navegador e ver os resultados ao vivo. Veja também meu repositório juniper para obter mais detalhes sobre a implementação.
Para validar o código quando o usuário acertar "Enviar", atualmente estou usando um truque um pouco hacky. Como o código Python é enviado de volta ao kernel como uma string, podemos manipulá -lo e adicionar testes - por exemplo, o exercício exc_01_02_01.py será validado usando test_01_02_01.py (se disponível). O código e o teste do usuário são combinados usando um modelo de string. No momento, o testTemplate no meta.json se parece com o seguinte:
from wasabi import msg
__msg__ = msg
__solution__ = """${solution}"""
${solution}
${test}
try:
test()
except AssertionError as e:
__msg__.fail(e)
Se presente, ${solution} será substituído pelo valor da string do código do usuário enviado. Nesse caso, estamos inserindo duas vezes: uma vez como uma string para que possamos verificar se o envio inclui algo e uma vez como código, para que possamos executá -lo e verificar os objetos que ele cria. ${test} é substituído pelo conteúdo do arquivo de teste. Também estou disponibilizando a impressora de wasabi como __msg__ , para que possamos imprimir facilmente mensagens bonitas nos testes. Finalmente, o bloco de try / accept verifica se a função de teste eleva um AssertionError e, se sim, exibe a mensagem de erro. Isso também esconde o traceback de erro completo (que pode vazar facilmente as respostas corretas).
Um arquivo de teste pode então ficar assim:
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."
)Com essa abordagem, nem sempre é possível validar perfeitamente a entrada - existem muitas opções e queremos evitar falsos positivos.
Os testes automatizados garantem que o código da solução fornecido seja compatível com o arquivo de teste usado para validar envios. O conjunto de testes é alimentado pela estrutura pytest e os arquivos de teste executáveis são gerados automaticamente em um diretório __tests__ antes do início da sessão de teste. Consulte o conftest.py para obter detalhes da implementação.
# Install requirements
pip install -r binder/requirements.txt
# Run the tests (will generate the files automatically)
python -m pytest __tests__ Se correr com o Docker, basta correr, make build e depois 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 Os requirements.txt no repositório define os pacotes instalados ao construí -lo com fichário. Para este curso, estou usando o repositório de origem como repo, pois permite manter tudo em um só lugar. Ele também permite que os exercícios sejam referidos e carreguem outros arquivos (por exemplo, JSON), que serão copiados para o ambiente Python. Eu construo o fichário a partir de um binder ramificação, no entanto, que eu apenas atualizo se os arquivos relevantes para o fumeiro mudarem. Caso contrário, todas as atualizações do master desencadeariam uma imagem reconstruída.
Você pode especificar as configurações do fichário como repo, ramificação e tipo de kernel na seção "juniper" do meta.json . Eu recomendo executar a primeira construção pela interface no site do Binder, pois isso oferece um registro de construção detalhado e feedback sobre se tudo funcionou conforme o esperado. Digite o URL do repositório, clique em "Iniciar" e aguarde a instalação das dependências e crie a imagem.

Os capítulos são colocados em /chapters e são arquivos de marcação que consistem em componentes <exercise> . Eles serão transformados em páginas, por exemplo /chapter1 . Em seu bloco frontmatter na parte superior do arquivo, eles precisam especificar type: chapter , bem como a seguinte meta:
---
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
---
Os slides são colocados em /slides e são arquivos de marcação que consistem em conteúdo de slide, separados por --- . Eles precisam especificar o seguinte bloco frontmatter na parte superior do arquivo:
---
type : slides
---
O primeiro e o último slide usam um layout especial e exibirá a manchete no centro do slide. Notas do alto -falante (neste caso, o script) podem ser adicionadas no final de um slide, prefixado pelas Notes: . Eles serão mostrados à direita ao lado dos slides. Aqui está um exemplo de arquivo de slides:
---
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 " />Ao usar elementos personalizados, coloque uma nova linha entre as tags de abertura/fechamento e as crianças. Caso contrário, o conteúdo de marcação pode não renderizar corretamente.
<exercise>Recipiente de um único exercício.
| Argumento | Tipo | Descrição |
|---|---|---|
id | número / string | ID de exercício exclusivo dentro do capítulo. |
title | corda | Título do exercício. |
type | corda | Tipo opcional. "slides" torna o contêiner mais largo e adiciona ícone. |
| crianças | - | O conteúdo do exercício. |
< exercise id = " 1 " title = " Introduction to spaCy " >
Content goes here...
</ exercise ><codeblock>| Argumento | Tipo | Descrição |
|---|---|---|
id | número / string | Identificador exclusivo do exercício de código. |
source | corda | Nome do arquivo de origem (sem extensão de arquivo). Padrões para exc_${id} se não estiver definido. |
solution | corda | Nome do arquivo de solução (sem extensão de arquivo). Padrões para solution_${id} se não for definido. |
test | corda | Nome do arquivo de teste (sem extensão de arquivo). Os padrões de test_${id} se não estiverem definidos. |
| crianças | corda | Dicas opcionais exibidas quando o usuário clica em "Mostrar dicas". |
< codeblock id = " 02_03 " >
This is a hint!
</ codeblock ><slides>Container para exibir slides interativamente usando revere.js e um arquivo de marcação.
| Argumento | Tipo | Descrição |
|---|---|---|
source | corda | Nome do arquivo Slides (sem extensão de arquivo). |
< slides source = " chapter1_01_introduction-to-spacy " >
</ slides ><choice>Recipiente para pergunta de múltipla escolha.
| Argumento | Tipo | Descrição |
|---|---|---|
id | string / número | ID exclusiva opcional. Pode ser usado se mais de uma pergunta de escolha estiver presente em um exercício. |
| crianças | nós | Somente <opt> componentes para as opções. |
< 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>Uma opção de múltipla escolha.
| Argumento | Tipo | Descrição |
|---|---|---|
text | corda | O texto da opção a ser exibido. Suporta HTML embutido. |
correct | corda | "true" se a opção for a resposta correta. |
| crianças | corda | O texto a ser exibido se a opção for selecionada (explicando por que está correto ou incorreto). |