PageSourceSearch

https://repo2txt.com/assets/jupyter-to-markdown-Cjb_pXuc.js

js repo2txt.com collected 2026-10-07 20:56:20 UTC 10,600 bytes, 37 lines download raw bytes

1const t=`<article class="blog-post">
2    <h2 class="text-lg lg:text-2xl font-bold mb-4 dark:text-white">تحويل دفتر Jupyter إلى Markdown: نُبقي السرد ونرمي الغلاف</h2>
3
4    <p class="text-gray-600 dark:text-white mb-4">الدفتر مستندان يتقاسمان اسم ملف واحد. هناك ما كتبته أنت — عناوين وشرح وكود والنتيجة المطبوعة التي أثبتت الفكرة — وهناك غلاف JSON الذي تحفظه الصيغة داخله. افتح ملف <code>.ipynb</code> في محرّر نصوص وسترى الغلاف: كل سطر من النثر مقطوعًا في سلسلة نصية مستقلة، و<code>"execution_count": 7</code> فوق كل خلية، وكائنات <code>"metadata": {}</code> فارغة في كل مكان، وفي مكان ما بالمنتصف ربع ميغابايت من base64 لا يظهر إلا مخطط انتشار صغيرًا واحدًا.</p>
5    <p class="text-gray-600 dark:text-white mb-4">التحويل إلى Markdown يرمي الغلاف ويُبقي المستند. خلايا markdown لديك كانت Markdown أصلًا، فتمرّ كما هي. وخلايا الكود تصير كتلًا محاطة بأسيجة موسومة بلغة النواة، وهي الصيغة التي يفهمها أصلًا كل نموذج وكل ملف README وكل مولّد مواقع ساكنة. أفلِت ملف <code>.ipynb</code> أعلاه وسيجري التحويل داخل تبويب المتصفح هذا — لا يُرفع الملف إلى أي مكان.</p>
6
7    <h3 class="lg:text-xl text-md font-bold mb-4 dark:text-white">أين يقع الوزن فعلًا</h3>
8    <p class="text-gray-600 dark:text-white mb-4">يفترض الناس أن الدفتر الضخم ضخم بسبب الكود. ونادرًا ما يكون كذلك. الوزن يجلس في أربعة مواضع، مرتّبة تنازليًا:</p>
9    <ul class="list-disc list-inside text-gray-600 dark:text-white mb-4">
10        <li><strong>مخرجات الصور بترميز base64.</strong> كل استدعاء <code>plt.show()</code> يكتب صورة PNG المرسومة داخل الملف نصًّا بترميز base64. والشكل الواحد يتراوح عادة بين 200 و400 كيلوبايت من المحارف. ودفتر فيه اثنا عشر رسمًا هو في معظمه رسوم. ولا شيء من ذلك يعني شيئًا لمن يقرأ النص.</li>
11        <li><strong>تمثيلات HTML لإطارات البيانات.</strong> يُخرج Pandas للنتيجة الواحدة <code>text/plain</code> و<code>text/html</code> معًا. ونسخة HTML تحمل أنماطًا مضمّنة و<code>&lt;table&gt;</code> بوسم لكل خلية، فتبلغ عشرين ضعف حجم النسخة النصية وهي تقول الشيء نفسه بالضبط.</li>
12        <li><strong>لقطات أشرطة التقدّم.</strong> حلقة tqdm تكتب سطرًا جديدًا عند كل تحديث، مفصولًا بمحارف إرجاع السطر. فينتهي الملف وفيه مئات النسخ من شريط لم يُعرض على الشاشة سوى مرة واحدة.</li>
13        <li><strong>بيانات وصفية لكل خلية.</strong> تافهة منفردة، غير تافهة مجتمعة: معرّفات الخلايا وعدّادات التنفيذ وأعلام الطيّ وكائنات بيانات وصفية فارغة، عبر بضع مئات من الخلايا، تتراكم إلى حجم ملموس.</li>
14    </ul>
15    <p class="text-gray-600 dark:text-white mb-4">التحويل أعلاه يعالج كلًّا من هذه. تُحصى حمولات الوسائط وتُستبدل بسطر نائب واحد كي يبقى موضع الشكل مرئيًا. وحين تُقدَّم النتيجة نصًّا عاديًا وHTML معًا، يفوز النص العادي. وتتقلّص سلاسل إرجاع السطر إلى الحالة الأخيرة للسطر. وتُحذف البيانات الوصفية بالكامل. وتُبلّغك الأداة بما أزالته، فيكون التوفير مرئيًا لا مزعومًا.</p>
16
17    <h3 class="lg:text-xl text-md font-bold mb-4 dark:text-white">لماذا تهمّ الكتل المسيّجة أكثر مما تبدو</h3>
18    <p class="text-gray-600 dark:text-white mb-4">أنفع ما يفعله Markdown للدفتر هو أن يعلّم الحدّ بين النثر والكود تعليمًا صريحًا. ففي JSON الخام لا يوجد ذلك الحدّ إلا حقلًا اسمه <code>"cell_type"</code> يبعد أسطرًا عن المحتوى. وإن سُطّح الملف بلا عناية التصق الشرحُ بالكود الذي يصفه، واضطرّ القارئ — إنسانًا كان أم نموذجًا — إلى الاستدلال على الفرق من الصياغة وحدها.</p>
19    <p class="text-gray-600 dark:text-white mb-4">السياج الموسوم باللغة يزيل هذا التخمين. وهو ينقل لغة النواة معه: يقرأ المحوّل <code>language_info</code> من البيانات الوصفية للدفتر، ويرجع إلى kernelspec عند غيابه، فيُوسم دفتر R أو Julia بـ R أو Julia بدل أن يُصنَّف Python بصمت. وتحصل المخرجات على سياج خاص بها بلا وسم أسفل الخلية التي أنتجتها، يسبقه سطر <code>Output:</code> بسيط، فتبقى علاقة السبب بالنتيجة ظاهرة دون اختراع صياغة لا يملكها Markdown.</p>
20
21    <h3 class="lg:text-xl text-md font-bold mb-4 dark:text-white">آثار الأخطاء تستحقّ البقاء</h3>
22    <p class="text-gray-600 dark:text-white mb-4">يغري المرءَ أن يحذف مخرجات الأخطاء مع ما يحذفه. وهذا في العادة قرار خاطئ. فإن سلّمت دفترًا إلى نموذج وسألته لماذا تفشل خلية، كان أثر الخطأ هو السؤال كلّه. وما يجعل هذه الآثار كريهة في صورتها الخام ليس محتواها بل رموز الألوان ANSI التي يلفّها بها IPython — محارف هروب تظهر لونًا مقروءًا في الطرفية وخربشة مثل <code>ESC[0;31m</code> في أي مكان آخر.</p>
23    <p class="text-gray-600 dark:text-white mb-4">تُنزع تلك السلاسل ويبقى نصّ الأثر. والطويل منها يُختصر من الوسط لا من النهاية، لأن الإطارات المفيدة في المكدّس العميق هي الأولى والأخيرة، أما المئتا سطر من دواخل المكتبات بينهما فهي بالضبط ما كنت ستتخطّاه.</p>
24
25    <h3 class="lg:text-xl text-md font-bold mb-4 dark:text-white">الدفاتر داخل مخرجات مستودع</h3>
26    <p class="text-gray-600 dark:text-white mb-4">التحويل نفسه يعمل داخل أدوات GitHub وGitLab والمجلد المحلي في هذا الموقع. اختر ملف <code>.ipynb</code> في مستودع، وسيصل إلى المخرجات خلايا مقروءة لا جدارًا من JSON. وهذا أهمّ مما يبدو: ففي مستودعات علم البيانات يسكن التفكير الفعلي في الدفاتر غالبًا، وقبل ذلك كانت هي الملفات التي تضطر إلى إلغاء تحديدها كي تبقى المخرجات صالحة.</p>
27    <p class="text-gray-600 dark:text-white mb-4">وفي هذا السياق يكون حدّ المخرجات أضيق مما هو عليه في هذه الصفحة، لأن مخرجات المستودع سياق لنموذج، ومخرجات الخلايا أقلّ أجزائه قيمة لكل token. وتسجّل ملاحظة في النص المحوَّل مقدار ما أُزيل، فلا يختفي شيء بصمت.</p>
28
29    <h3 class="lg:text-xl text-md font-bold mb-4 dark:text-white">الدفاتر القديمة تعمل أيضًا</h3>
30    <p class="text-gray-600 dark:text-white mb-4">الإصدار الرابع من الصيغة يضع الخلايا في مصفوفة <code>cells</code> على المستوى الأعلى. أما الإصدار الثالث، الذي ما زال منثورًا في المستودعات العامة من مطلع العقد الثاني من الألفية، فيُعشّشها مستوى أعمق داخل <code>worksheets</code> ويسمّي حقل المصدر <code>input</code> بدل <code>source</code>. وكلا الشكلين يُقرأ. وكذلك نوع المخرجات <code>pyout</code> الذي استعمله الإصدار الثالث حيث يقول الرابع <code>execute_result</code>.</p>
31    <p class="text-gray-600 dark:text-white mb-4">وأمران لا يُحاولان عمدًا. أدوات الدفتر التفاعلية — المزالق والرسوم المدعومة بـ<code>ipywidgets</code> — تخزّن حالتها في كتلة بيانات وصفية منفصلة ولا تُنتج نصًّا مفيدًا؛ والنائب يخبرك أن واحدة كانت هنا. وترتيب تنفيذ الخلايا يُحفظ كما يظهر في الملف، لا مرتّبًا بعدّاد التنفيذ، لأن الترتيب الذي تقرأ به الدفتر هو الترتيب الذي كُتب به.</p>
32
33    <h3 class="lg:text-xl text-md font-bold mb-4 dark:text-white">لا شيء يُرفع</h3>
34    <p class="text-gray-600 dark:text-white mb-4">تحمل الدفاتر أشياء ينساها الناس: مفتاح API لُصق في خلية أثناء تصحيح خطأ، وسلسلة اتصال بقاعدة بيانات، وشريحة من بيانات الإنتاج طُبعت للتأكد من عملية دمج. والتحويل يجري بلغة JavaScript داخل هذا التبويب. لا خطوة رفع، ولا نسخة على خادم، ولا حذف تطلبه لاحقًا. أغلق التبويب وقد انتهى الأمر.</p>
35    <p class="text-gray-600 dark:text-white mb-4">وإن أردت نصًّا عاديًا بدل Markdown — بلا أسيجة ولا بنية، النثر والكود فقط — فإن <a href="/ar/jupyter-to-text" class="text-blue-500 hover:underline">محوّل الدفاتر إلى نص</a> يفعل ذلك، والملف الذي اخترته ينتقل معك.</p>
36</article>
37`;export{t as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.