يحتوي هذا الريبو على كل من الدورة التدريبية عبر الإنترنت ، بالإضافة إلى إطار عمله الحديث مفتوح المصدر. في الدورة التدريبية ، ستتعلم كيفية استخدام Spacy لبناء أنظمة فهم اللغة الطبيعية المتقدمة ، باستخدام كل من أساليب التعلم القائم على القواعد والتعلم الآلي. الواجهة الأمامية مدعومة بواسطة Gatsby و Defles.js و Plyr ، ويستخدم تنفيذ الكود الخلفي الموثق؟ كل شيء مفتوح المصدر ونشره بموجب ترخيص معهد ماساتشوستس للتكنولوجيا (الرمز والإطار) و CC BY-NC (مواد الدورة التدريبية).
هذا الدورة مخصصة في الغالب للدراسة الذاتية . نعم ، يمكنك الغش - الحلول كلها في هذا الريبو ، لا توجد عقوبة للنقر على "تلميحات العرض" أو "حل العرض" ، ويمكنك وضع علامة على تمرين كما هو الحال عندما تظن أنه يتم.
| لغة | أمثلة نصية 1 | مصدر | المؤلفون |
|---|---|---|---|
| إنجليزي | إنجليزي | chapters/en ، exercises/en | @ @ |
| الألمانية | الألمانية | chapters/de ، exercises/de | @ins ، @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 ، polm. |
| الصينية | الصينية | chapters/zh ، exercises/zh | crownpku |
| البرتغالية | إنجليزي | chapters/pt ، exercises/pt | cristianasp |
إذا اكتشفت خطأ ، فأنا أقدر دائمًا طلبات السحب!
1. هذه هي اللغة المستخدمة في أمثلة النص والموارد المستخدمة في التمارين. على سبيل المثال ، تستخدم النسخة الألمانية للدورة أيضًا أمثلة ونماذج نصية ألمانية. ليس من الممكن دائمًا ترجمة جميع أمثلة التعليمات البرمجية ، لذلك قد لا تزال بعض الترجمات تستخدم وتحليل النص الإنجليزي كجزء من الدورة التدريبية.
لقد طورت في الأصل محتوى DataCamp ، لكنني أردت إعداد إصدار مجاني لجعله متاحًا لمزيد من الأشخاص ، وبالتالي لا يتعين عليك الاشتراك في خدمتهم. كمشروع في عطلة نهاية الأسبوع ، انتهى بي الأمر بتجميع تطبيقي الصغير لتقديم التمارين والمحتوى بطريقة ممتعة وتفاعلية.
ربما ، نعم! إذا كنت تبحث عن طريقة DIY لنشر المواد الخاصة بك ، آمل أن يكون إطاري الصغير مفيدًا. لأن الكثير من الناس عبروا عن اهتمامه بهذا ، قمت بتجميع بعض عمليات إعادة المبتدئين التي يمكنك أن تتطرق إليها والتكيف معها:
ines/course-starter-pythonines/course-starter-r يتم ترخيص مصدر التطبيق ومكونات واجهة المستخدم وإطار عمل Gatsby لبناء دورات تفاعلية كمعهد ماساتشوستس للتكنولوجيا ، مثل جميع برامجي مفتوحة المصدر. مواد الدورة نفسها (الشرائح والفصول) ، مرخصة بموجب CC BY-NC. هذا يعني أنه يمكنك استخدامها بحرية - لا يمكنك كسب المال لهم.
أولاً ، شكرًا جزيلاً ، هذا رائع وقيمة حقًا للمجتمع؟ لقد حاولت إعداد بنية الدورة التدريبية بحيث يكون من السهل إضافة لغات مختلفة: يتم تنظيم الملفات الخاصة باللغة في الدلائل في exercises chapters ، وتتوفر نصوص أخرى خاصة باللغة في locale.json . إذا كنت ترغب في المساهمة ، فهناك طريقتان مختلفتان للمشاركة:
بدء مشروع ترجمة المجتمع. هذه هي الطريقة الأسهل ، بدون سلاسل المتصاعدة. يمكنك توتر ريبو ، ونسخ النسخة الإنجليزية ، وتغيير رمز اللغة ، والبدء في ترجمة ودعوة الآخرين للمساهمة (إذا أردت). إذا كنت تبحث عن مساهمين ، فلا تتردد في فتح مشكلة هنا أو علامة @spacy_io على Twitter حتى نتمكن من المساعدة في إخراج الكلمة. يسعدنا أيضًا الإجابة على أسئلتك حول تعقب المشكلات.
اجعلنا عرضًا. نحن منفتحون على تكليف الترجمات بلغات مختلفة ، لذلك إذا كنت مهتمًا ، فأرسلنا مراسلتنا عبر البريد الإلكتروني على [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 ، يمكننا بعد ذلك تنفيذ التعليمات البرمجية باستخدام kernel النشط. يتيح لك ذلك تحرير الكود في المتصفح ومشاهدة النتائج المباشرة. انظر أيضًا juniper Repo لمزيد من التفاصيل حول التنفيذ.
للتحقق من صحة الرمز عندما يضرب المستخدم "إرسال" ، أستخدم حاليًا خدعة مخترقة قليلاً. نظرًا لأن رمز Python يتم إرساله مرة أخرى إلى kernel كسلسلة ، يمكننا معالجةها وإضافة اختبارات - على سبيل المثال ، سيتم التحقق من صحة 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 Block بفحص ما إذا كانت وظيفة الاختبار تثير AssertionError وإذا كان الأمر كذلك ، فإن رسالة الخطأ تعرض. هذا يخفي أيضًا تتبع الخطأ الكامل (والذي يمكنه بسهولة تسرب الإجابات الصحيحة).
يمكن أن يبدو ملف اختبار مثل هذا:
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 في المستودع الحزم التي يتم تثبيتها عند بنائها باستخدام الموثق. بالنسبة لهذه الدورة ، أستخدم المصدر Repo باعتباره ريبو الموثق ، لأنه يسمح بالحفاظ على كل شيء في مكان واحد. كما يتيح للتمارين الرجوع وتحميل الملفات الأخرى (مثل JSON) ، والتي سيتم نسخها إلى بيئة Python. أقوم ببناء الموثق من binder الفرع ، والتي أقوم بتحديثها فقط إذا تغيرت الملفات ذات الصلة بالموثق. خلاف ذلك ، فإن كل تحديث إلى master سيؤدي إلى إعادة بناء الصورة.
يمكنك تحديد إعدادات Binder مثل repo و branch و kernel نوع في قسم "juniper" في meta.json . أوصي بتشغيل أول بناء عبر الواجهة على موقع Binder ، حيث يمنحك هذا سجل بناء مفصل وتعليقات حول ما إذا كان كل شيء يعمل كما هو متوقع. أدخل عنوان URL للمستودع الخاص بك ، انقر فوق "إطلاق" وانتظر حتى يتم تثبيت التبعيات وإنشاء الصورة.

يتم وضع الفصول في /chapters وملفات تخفيض تتكون من مكونات <exercise> . سيتم تحويلها إلى صفحات ، على سبيل المثال /chapter1 . في كتلة Frontmatter الخاصة بهم في الجزء العلوي من الملف ، يحتاجون إلى تحديد 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 وهي ملفات مائلة تتكون من محتوى الشرائح ، مفصولة --- . يحتاجون إلى تحديد كتلة Frontmatter التالية في الجزء العلوي من الملف:
---
type : slides
---
تستخدم الشريحة الأولى والأخيرة تصميمًا خاصًا وستعرض العنوان في وسط الشريحة. يمكن إضافة ملاحظات السماعة (في هذه الحالة ، البرنامج النصي) في نهاية الشريحة ، مسبوقة Notes: . سيتم بعد ذلك عرضها على اليمين بجوار الشرائح. إليك ملف 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 " />عند استخدام عناصر مخصصة ، تأكد من وضع خط جديد بين علامات الافتتاح/الإغلاق والأطفال. خلاف ذلك ، قد لا يتم تقديم محتوى التخفيض بشكل صحيح.
<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>حاوية لعرض الشرائح بشكل تفاعلي باستخدام DENSER.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" إذا كان الخيار هو الإجابة الصحيحة. |
| أطفال | خيط | يتم عرض النص المراد عرضه إذا تم تحديد الخيار (يشرح سبب صوابه أو غير صحيح). |