{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "iibGqquzYEIG", "outputId": "e56b8860-eafd-4ba6-e9cb-46080c6557f8" }, "outputs": [], "source": [ "%pip install pypdf\n", "%pip install spacy\n", "%pip install PyMuPDF\n", "%pip install numpy --upgrade" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%pip install --force-reinstall spacy" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "DuuOgi6hyclw" }, "outputs": [ { "ename": "ValueError", "evalue": "numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[1], line 3\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01msys\u001b[39;00m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mfitz\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mspacy\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\niram\\anaconda3\\Lib\\site-packages\\spacy\\__init__.py:6\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Any, Dict, Iterable, Union\n\u001b[0;32m 5\u001b[0m \u001b[38;5;66;03m# set library-specific custom warning handling before doing anything else\u001b[39;00m\n\u001b[1;32m----> 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01merrors\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m setup_default_warnings\n\u001b[0;32m 8\u001b[0m setup_default_warnings() \u001b[38;5;66;03m# noqa: E402\u001b[39;00m\n\u001b[0;32m 10\u001b[0m \u001b[38;5;66;03m# These are imported as part of the API\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\niram\\anaconda3\\Lib\\site-packages\\spacy\\errors.py:3\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mwarnings\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompat\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Literal\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mErrorsWithCodes\u001b[39;00m(\u001b[38;5;28mtype\u001b[39m):\n\u001b[0;32m 7\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getattribute__\u001b[39m(\u001b[38;5;28mself\u001b[39m, code):\n", "File \u001b[1;32mc:\\Users\\niram\\anaconda3\\Lib\\site-packages\\spacy\\compat.py:4\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;124;03m\"\"\"Helpers for Python and platform compatibility.\"\"\"\u001b[39;00m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01msys\u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mthinc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutil\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m copy_array\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 7\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mcPickle\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpickle\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\niram\\anaconda3\\Lib\\site-packages\\thinc\\__init__.py:5\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m\n\u001b[0;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mabout\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m __version__\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mconfig\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m registry\n\u001b[0;32m 7\u001b[0m \u001b[38;5;66;03m# fmt: off\u001b[39;00m\n\u001b[0;32m 8\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m 9\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mregistry\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 10\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__version__\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 11\u001b[0m ]\n", "File \u001b[1;32mc:\\Users\\niram\\anaconda3\\Lib\\site-packages\\thinc\\config.py:5\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mconfection\u001b[39;00m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mconfection\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m VARIABLE_RE, Config, ConfigValidationError, Promise\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtypes\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Decorator\n\u001b[0;32m 8\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mregistry\u001b[39;00m(confection\u001b[38;5;241m.\u001b[39mregistry):\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# fmt: off\u001b[39;00m\n\u001b[0;32m 10\u001b[0m optimizers: Decorator \u001b[38;5;241m=\u001b[39m catalogue\u001b[38;5;241m.\u001b[39mcreate(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mthinc\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moptimizers\u001b[39m\u001b[38;5;124m\"\u001b[39m, entry_points\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n", "File \u001b[1;32mc:\\Users\\niram\\anaconda3\\Lib\\site-packages\\thinc\\types.py:25\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[0;32m 5\u001b[0m Any,\n\u001b[0;32m 6\u001b[0m Callable,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 20\u001b[0m overload,\n\u001b[0;32m 21\u001b[0m )\n\u001b[0;32m 23\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m\n\u001b[1;32m---> 25\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompat\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m cupy, has_cupy\n\u001b[0;32m 27\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m has_cupy:\n\u001b[0;32m 28\u001b[0m get_array_module \u001b[38;5;241m=\u001b[39m cupy\u001b[38;5;241m.\u001b[39mget_array_module\n", "File \u001b[1;32mc:\\Users\\niram\\anaconda3\\Lib\\site-packages\\thinc\\compat.py:99\u001b[0m\n\u001b[0;32m 95\u001b[0m has_mxnet \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 98\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m---> 99\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mh5py\u001b[39;00m\n\u001b[0;32m 100\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[0;32m 101\u001b[0m h5py \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\niram\\anaconda3\\Lib\\site-packages\\h5py\\__init__.py:45\u001b[0m\n\u001b[0;32m 36\u001b[0m _warn((\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mh5py is running against HDF5 \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;124m when it was built against \u001b[39m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 37\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mthis may cause problems\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mformat(\n\u001b[0;32m 38\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;241m*\u001b[39mversion\u001b[38;5;241m.\u001b[39mhdf5_version_tuple),\n\u001b[0;32m 39\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;241m*\u001b[39mversion\u001b[38;5;241m.\u001b[39mhdf5_built_version_tuple)\n\u001b[0;32m 40\u001b[0m ))\n\u001b[0;32m 43\u001b[0m _errors\u001b[38;5;241m.\u001b[39msilence_errors()\n\u001b[1;32m---> 45\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_conv\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m register_converters \u001b[38;5;28;01mas\u001b[39;00m _register_converters, \\\n\u001b[0;32m 46\u001b[0m unregister_converters \u001b[38;5;28;01mas\u001b[39;00m _unregister_converters\n\u001b[0;32m 47\u001b[0m _register_converters()\n\u001b[0;32m 48\u001b[0m atexit\u001b[38;5;241m.\u001b[39mregister(_unregister_converters)\n", "File \u001b[1;32mh5py\\\\_conv.pyx:1\u001b[0m, in \u001b[0;36minit h5py._conv\u001b[1;34m()\u001b[0m\n", "File \u001b[1;32mh5py\\\\h5r.pyx:1\u001b[0m, in \u001b[0;36minit h5py.h5r\u001b[1;34m()\u001b[0m\n", "File \u001b[1;32mh5py\\\\h5p.pyx:1\u001b[0m, in \u001b[0;36minit h5py.h5p\u001b[1;34m()\u001b[0m\n", "\u001b[1;31mValueError\u001b[0m: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject" ] } ], "source": [ "import sys\n", "import fitz\n", "import spacy" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "K-Qk_E1jyUvg", "outputId": "ae117ef8-99f2-44d2-be74-69a419b81596" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DIVYARAJSINH RANA \n", " +1 (732) 522 6418 | divyarajsinhr812@gmail.com | LinkedIn | Github | LeetCode | GeeksForGeeks \n", "OBJECTIVE \n", "Passionate Computer Science Master's student at NJIT seeking summer intern role as software developer. With excellent \n", "problem-solving skills and two internships, I'm eager to apply my knowledge and skills in real-world. \n", "EDUCATION \n", "Master of Science in Computer Science, 01/2024 - 12/2025 (Expected) \n", "New Jersey Institute of Technology GPA: - 4.0 / 4.0 \n", " \n", "Bachelor of Technology in Information Technology, 06/2019 - 05/2023 \n", "Birla Vishwakarma Mahavidyalaya GPA: - 3.5 / 4.0 \n", "EXPERIENCE \n", "Full Stack Developer Trainee \n", "Jun 2023 - Dec 2023 \n", "Capgemini \n", " \n", "• Gained expertise in Python and ReactJS, equipping me with skills to build scalable, interactive applications. \n", "• Created a website using ReactJS to detect AI-generated text, identify hate speech, and analyze content. TextUtils serves 500+ \n", "users with 85% accuracy and on average 2-second query times. \n", "• Delivered an effective content analysis tool that aids organizations in moderating content, boosting user engagement, and \n", "enhancing compliance. \n", "Android Developer Intern \n", "Aug 2021 - Dec 2021 \n", "Crown Software \n", "• Built a scalable backend with Java and SQL, ensuring data integrity and optimizing queries for large datasets, leading to \n", "faster response times and improved app performance. \n", "• Leveraged data structure concepts to optimize the performance of an Android application, resulting in 25% faster \n", "response time and refactored code to improve response times and reduce memory usage. \n", "PROJECTS \n", " Resume Analyzer. Analyzes resumes using Natural Language Processing to extract skills and suggest advanced skillsets based \n", "on skills user possess. Allowed users to create resumes from templates by simply entering basic details. Compares resumes \n", "with job descriptions, displaying match percentages with 85-90% accuracy. \n", "JustPics. Developed an interactive product recommendation application that allows users to search for attire based on visual \n", "similarity using the reference image uploaded by user with 95% accuracy. \n", "Covid-19 Tracker App. Developed an Android application to provide real-time statistical data on COVID-19 cases globally. \n", "Fetches latest and detailed statistics for every country and their states giving comprehensive information to the user. \n", "AWARDS AND ACHIEVEMENTS \n", "• LeetCode: Solved over 700 problems (Top 12% of all LeetCode users). \n", "• GeeksForGeeks: Currently ranked 3rd in institute. \n", "• 16-week DSA course: Earned a certificate after solving enough problems and participating in contests. \n", "• 3rd Place Certificate of Achievement for Resume Analyzer Project. \n", "SKILLS \n", "Technical skills. \n", "Web Dev, Android Dev, Machine Learning, Database Management, Object-oriented Programming. \n", "Programming Langs. \n", "C, C++, Java, Python, SQL, JavaScript. \n", "Problem Solving. \n", "Data Structures, Algorithms, LeetCode, GeeksForGeeks. \n", "LEADERSHIP \n", "• Led the Resume Analyzer project team. Our project received third place honors in the class for its innovative approach \n", "to extracting skills and matching resumes with job descriptions. \n" ] } ], "source": [ "with open(\"demo.txt\",\"r\") as f:\n", " resumeText = f.read()\n", "print(resumeText)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "mC0VxwX3r9tj" }, "outputs": [], "source": [ "skill_pattern = \"jz_skill_patterns.jsonl\"" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "0dntqz47sHOh", "outputId": "b83e4534-8ff2-43d6-93b4-b9c776ee150f" }, "outputs": [ { "ename": "NameError", "evalue": "name 'spacy' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[13], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m nlp2 \u001b[38;5;241m=\u001b[39m spacy\u001b[38;5;241m.\u001b[39mload(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124men_core_web_sm\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 2\u001b[0m ruler2 \u001b[38;5;241m=\u001b[39m nlp2\u001b[38;5;241m.\u001b[39madd_pipe(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mentity_ruler\u001b[39m\u001b[38;5;124m\"\u001b[39m, before\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mner\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 3\u001b[0m ruler2\u001b[38;5;241m.\u001b[39mfrom_disk(skill_pattern)\n", "\u001b[1;31mNameError\u001b[0m: name 'spacy' is not defined" ] } ], "source": [ "nlp2 = spacy.load(\"en_core_web_sm\")\n", "ruler2 = nlp2.add_pipe(\"entity_ruler\", before=\"ner\")\n", "ruler2.from_disk(skill_pattern)" ] }, { "cell_type": "code", "execution_count": 160, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "N97FcBrSslhc", "outputId": "91383c4b-82ea-4c0b-f0a2-fecd245f36de" }, "outputs": [ { "data": { "text/plain": [ "{'summary': {'tok2vec': {'assigns': ['doc.tensor'],\n", " 'requires': [],\n", " 'scores': [],\n", " 'retokenizes': False},\n", " 'tagger': {'assigns': ['token.tag'],\n", " 'requires': [],\n", " 'scores': ['tag_acc'],\n", " 'retokenizes': False},\n", " 'parser': {'assigns': ['token.dep',\n", " 'token.head',\n", " 'token.is_sent_start',\n", " 'doc.sents'],\n", " 'requires': [],\n", " 'scores': ['dep_uas',\n", " 'dep_las',\n", " 'dep_las_per_type',\n", " 'sents_p',\n", " 'sents_r',\n", " 'sents_f'],\n", " 'retokenizes': False},\n", " 'attribute_ruler': {'assigns': [],\n", " 'requires': [],\n", " 'scores': [],\n", " 'retokenizes': False},\n", " 'lemmatizer': {'assigns': ['token.lemma'],\n", " 'requires': [],\n", " 'scores': ['lemma_acc'],\n", " 'retokenizes': False},\n", " 'entity_ruler': {'assigns': ['doc.ents', 'token.ent_type', 'token.ent_iob'],\n", " 'requires': [],\n", " 'scores': ['ents_f', 'ents_p', 'ents_r', 'ents_per_type'],\n", " 'retokenizes': False},\n", " 'ner': {'assigns': ['doc.ents', 'token.ent_iob', 'token.ent_type'],\n", " 'requires': [],\n", " 'scores': ['ents_f', 'ents_p', 'ents_r', 'ents_per_type'],\n", " 'retokenizes': False}},\n", " 'problems': {'tok2vec': [],\n", " 'tagger': [],\n", " 'parser': [],\n", " 'attribute_ruler': [],\n", " 'lemmatizer': [],\n", " 'entity_ruler': [],\n", " 'ner': []},\n", " 'attrs': {'token.is_sent_start': {'assigns': ['parser'], 'requires': []},\n", " 'token.tag': {'assigns': ['tagger'], 'requires': []},\n", " 'doc.tensor': {'assigns': ['tok2vec'], 'requires': []},\n", " 'doc.ents': {'assigns': ['entity_ruler', 'ner'], 'requires': []},\n", " 'token.ent_iob': {'assigns': ['entity_ruler', 'ner'], 'requires': []},\n", " 'token.dep': {'assigns': ['parser'], 'requires': []},\n", " 'token.head': {'assigns': ['parser'], 'requires': []},\n", " 'doc.sents': {'assigns': ['parser'], 'requires': []},\n", " 'token.lemma': {'assigns': ['lemmatizer'], 'requires': []},\n", " 'token.ent_type': {'assigns': ['entity_ruler', 'ner'], 'requires': []}}}" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlp2.analyze_pipes()" ] }, { "cell_type": "code", "execution_count": 163, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "5DwqiEiCsnI8", "outputId": "18fcd9f8-e132-4e52-a161-0d606a93fce1" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Github\n", "Computer Science\n", "software\n", "Computer Science\n", "Python\n", "AI\n", "Android\n", "Software\n", "Java\n", "SQL\n", "data integrity\n", "data structure\n", "Android\n", "response time\n", "Natural Language Processing\n", "Android\n", "certificate\n", "Certificate\n", "Android\n", "Machine Learning\n", "Database\n", "C\n", "C++\n", "Java\n", "Python\n", "SQL\n", "JavaScript\n", "Data Structures\n", "Algorithms\n" ] } ], "source": [ "doc2=nlp2(resumeText)\n", "for ent in doc2.ents:\n", " if(ent.label_ == \"SKILL\"):\n", " print(ent.text)" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.7" } }, "nbformat": 4, "nbformat_minor": 0 }