{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "179\n",
      "['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', \"you're\", \"you've\", \"you'll\", \"you'd\", 'your', 'yours', 'yourself', 'yourselves', 'he', 'him', 'his', 'himself', 'she', \"she's\", 'her', 'hers', 'herself', 'it', \"it's\", 'its', 'itself', 'they', 'them', 'their', 'theirs', 'themselves', 'what', 'which', 'who', 'whom', 'this', 'that', \"that'll\", 'these', 'those', 'am', 'is', 'are', 'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'having', 'do', 'does', 'did', 'doing', 'a', 'an', 'the', 'and', 'but', 'if', 'or', 'because', 'as', 'until', 'while', 'of', 'at', 'by', 'for', 'with', 'about', 'against', 'between', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'to', 'from', 'up', 'down', 'in', 'out', 'on', 'off', 'over', 'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both', 'each', 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 's', 't', 'can', 'will', 'just', 'don', \"don't\", 'should', \"should've\", 'now', 'd', 'll', 'm', 'o', 're', 've', 'y', 'ain', 'aren', \"aren't\", 'couldn', \"couldn't\", 'didn', \"didn't\", 'doesn', \"doesn't\", 'hadn', \"hadn't\", 'hasn', \"hasn't\", 'haven', \"haven't\", 'isn', \"isn't\", 'ma', 'mightn', \"mightn't\", 'mustn', \"mustn't\", 'needn', \"needn't\", 'shan', \"shan't\", 'shouldn', \"shouldn't\", 'wasn', \"wasn't\", 'weren', \"weren't\", 'won', \"won't\", 'wouldn', \"wouldn't\"]\n",
      "---------------------------------------------------------------------------\n",
      "['de', 'la', 'que', 'el', 'en', 'y', 'a', 'los', 'del', 'se', 'las', 'por', 'un', 'para', 'con', 'no', 'una', 'su', 'al', 'lo', 'como', 'más', 'pero', 'sus', 'le', 'ya', 'o', 'este', 'sí', 'porque', 'esta', 'entre', 'cuando', 'muy', 'sin', 'sobre', 'también', 'me', 'hasta', 'hay', 'donde', 'quien', 'desde', 'todo', 'nos', 'durante', 'todos', 'uno', 'les', 'ni', 'contra', 'otros', 'ese', 'eso', 'ante', 'ellos', 'e', 'esto', 'mí', 'antes', 'algunos', 'qué', 'unos', 'yo', 'otro', 'otras', 'otra', 'él', 'tanto', 'esa', 'estos', 'mucho', 'quienes', 'nada', 'muchos', 'cual', 'poco', 'ella', 'estar', 'estas', 'algunas', 'algo', 'nosotros', 'mi', 'mis', 'tú', 'te', 'ti', 'tu', 'tus', 'ellas', 'nosotras', 'vosotros', 'vosotras', 'os', 'mío', 'mía', 'míos', 'mías', 'tuyo', 'tuya', 'tuyos', 'tuyas', 'suyo', 'suya', 'suyos', 'suyas', 'nuestro', 'nuestra', 'nuestros', 'nuestras', 'vuestro', 'vuestra', 'vuestros', 'vuestras', 'esos', 'esas', 'estoy', 'estás', 'está', 'estamos', 'estáis', 'están', 'esté', 'estés', 'estemos', 'estéis', 'estén', 'estaré', 'estarás', 'estará', 'estaremos', 'estaréis', 'estarán', 'estaría', 'estarías', 'estaríamos', 'estaríais', 'estarían', 'estaba', 'estabas', 'estábamos', 'estabais', 'estaban', 'estuve', 'estuviste', 'estuvo', 'estuvimos', 'estuvisteis', 'estuvieron', 'estuviera', 'estuvieras', 'estuviéramos', 'estuvierais', 'estuvieran', 'estuviese', 'estuvieses', 'estuviésemos', 'estuvieseis', 'estuviesen', 'estando', 'estado', 'estada', 'estados', 'estadas', 'estad', 'he', 'has', 'ha', 'hemos', 'habéis', 'han', 'haya', 'hayas', 'hayamos', 'hayáis', 'hayan', 'habré', 'habrás', 'habrá', 'habremos', 'habréis', 'habrán', 'habría', 'habrías', 'habríamos', 'habríais', 'habrían', 'había', 'habías', 'habíamos', 'habíais', 'habían', 'hube', 'hubiste', 'hubo', 'hubimos', 'hubisteis', 'hubieron', 'hubiera', 'hubieras', 'hubiéramos', 'hubierais', 'hubieran', 'hubiese', 'hubieses', 'hubiésemos', 'hubieseis', 'hubiesen', 'habiendo', 'habido', 'habida', 'habidos', 'habidas', 'soy', 'eres', 'es', 'somos', 'sois', 'son', 'sea', 'seas', 'seamos', 'seáis', 'sean', 'seré', 'serás', 'será', 'seremos', 'seréis', 'serán', 'sería', 'serías', 'seríamos', 'seríais', 'serían', 'era', 'eras', 'éramos', 'erais', 'eran', 'fui', 'fuiste', 'fue', 'fuimos', 'fuisteis', 'fueron', 'fuera', 'fueras', 'fuéramos', 'fuerais', 'fueran', 'fuese', 'fueses', 'fuésemos', 'fueseis', 'fuesen', 'sintiendo', 'sentido', 'sentida', 'sentidos', 'sentidas', 'siente', 'sentid', 'tengo', 'tienes', 'tiene', 'tenemos', 'tenéis', 'tienen', 'tenga', 'tengas', 'tengamos', 'tengáis', 'tengan', 'tendré', 'tendrás', 'tendrá', 'tendremos', 'tendréis', 'tendrán', 'tendría', 'tendrías', 'tendríamos', 'tendríais', 'tendrían', 'tenía', 'tenías', 'teníamos', 'teníais', 'tenían', 'tuve', 'tuviste', 'tuvo', 'tuvimos', 'tuvisteis', 'tuvieron', 'tuviera', 'tuvieras', 'tuviéramos', 'tuvierais', 'tuvieran', 'tuviese', 'tuvieses', 'tuviésemos', 'tuvieseis', 'tuviesen', 'teniendo', 'tenido', 'tenida', 'tenidos', 'tenidas', 'tened']\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "#STOPWORDS#\n",
    "import nltk\n",
    "from nltk.corpus import wordnet as wn\n",
    "from nltk.corpus import stopwords as sw\n",
    "sw_english=sw.words('english')\n",
    "print (len(sw_english))\n",
    "print (sw_english)\n",
    "print(\"-\"*75)\n",
    "sw_spanish=sw.words('spanish')\n",
    "print (sw_spanish)\n",
    "\n",
    "print ('go'in sw_english)\n",
    "# a is a list of stop words extracted from internet\n",
    "## http://xpo6.com/list-of-english-stop-words/"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Synset('banks.n.01'), Synset('bank.n.01'), Synset('depository_financial_institution.n.01'), Synset('bank.n.03'), Synset('bank.n.04'), Synset('bank.n.05'), Synset('bank.n.06'), Synset('bank.n.07'), Synset('savings_bank.n.02'), Synset('bank.n.09'), Synset('bank.n.10'), Synset('bank.v.01'), Synset('bank.v.02'), Synset('bank.v.03'), Synset('bank.v.04'), Synset('bank.v.05'), Synset('deposit.v.02'), Synset('bank.v.07'), Synset('trust.v.01')]\n",
      "SENTIDO: Synset('banks.n.01')\n",
      "DEFINICION: English botanist who accompanied Captain Cook on his first voyage to the Pacific Ocean (1743-1820)\n",
      "EJEMPLOS: []\n",
      "SENTIDO: Synset('bank.n.01')\n",
      "DEFINICION: sloping land (especially the slope beside a body of water)\n",
      "EJEMPLOS: ['they pulled the canoe up on the bank', 'he sat on the bank of the river and watched the currents']\n",
      "SENTIDO: Synset('depository_financial_institution.n.01')\n",
      "DEFINICION: a financial institution that accepts deposits and channels the money into lending activities\n",
      "EJEMPLOS: ['he cashed a check at the bank', 'that bank holds the mortgage on my home']\n",
      "SENTIDO: Synset('bank.n.03')\n",
      "DEFINICION: a long ridge or pile\n",
      "EJEMPLOS: ['a huge bank of earth']\n",
      "SENTIDO: Synset('bank.n.04')\n",
      "DEFINICION: an arrangement of similar objects in a row or in tiers\n",
      "EJEMPLOS: ['he operated a bank of switches']\n",
      "SENTIDO: Synset('bank.n.05')\n",
      "DEFINICION: a supply or stock held in reserve for future use (especially in emergencies)\n",
      "EJEMPLOS: []\n",
      "SENTIDO: Synset('bank.n.06')\n",
      "DEFINICION: the funds held by a gambling house or the dealer in some gambling games\n",
      "EJEMPLOS: ['he tried to break the bank at Monte Carlo']\n",
      "SENTIDO: Synset('bank.n.07')\n",
      "DEFINICION: a slope in the turn of a road or track; the outside is higher than the inside in order to reduce the effects of centrifugal force\n",
      "EJEMPLOS: []\n",
      "SENTIDO: Synset('savings_bank.n.02')\n",
      "DEFINICION: a container (usually with a slot in the top) for keeping money at home\n",
      "EJEMPLOS: ['the coin bank was empty']\n",
      "SENTIDO: Synset('bank.n.09')\n",
      "DEFINICION: a building in which the business of banking transacted\n",
      "EJEMPLOS: ['the bank is on the corner of Nassau and Witherspoon']\n",
      "SENTIDO: Synset('bank.n.10')\n",
      "DEFINICION: a flight maneuver; aircraft tips laterally about its longitudinal axis (especially in turning)\n",
      "EJEMPLOS: ['the plane went into a steep bank']\n",
      "SENTIDO: Synset('bank.v.01')\n",
      "DEFINICION: tip laterally\n",
      "EJEMPLOS: ['the pilot had to bank the aircraft']\n",
      "SENTIDO: Synset('bank.v.02')\n",
      "DEFINICION: enclose with a bank\n",
      "EJEMPLOS: ['bank roads']\n",
      "SENTIDO: Synset('bank.v.03')\n",
      "DEFINICION: do business with a bank or keep an account at a bank\n",
      "EJEMPLOS: ['Where do you bank in this town?']\n",
      "SENTIDO: Synset('bank.v.04')\n",
      "DEFINICION: act as the banker in a game or in gambling\n",
      "EJEMPLOS: []\n",
      "SENTIDO: Synset('bank.v.05')\n",
      "DEFINICION: be in the banking business\n",
      "EJEMPLOS: []\n",
      "SENTIDO: Synset('deposit.v.02')\n",
      "DEFINICION: put into a bank account\n",
      "EJEMPLOS: ['She deposits her paycheck every month']\n",
      "SENTIDO: Synset('bank.v.07')\n",
      "DEFINICION: cover with ashes so to control the rate of burning\n",
      "EJEMPLOS: ['bank a fire']\n",
      "SENTIDO: Synset('trust.v.01')\n",
      "DEFINICION: have confidence or faith in\n",
      "EJEMPLOS: ['We can trust in God', 'Rely on your friends', 'bank on your good education', \"I swear by my grandmother's recipes\"]\n"
     ]
    }
   ],
   "source": [
    "#SENTIDOS DE UNA PALABRA EN WORDNET#\n",
    "word='banks'\n",
    "sentidos=wn.synsets(word)\n",
    "print (sentidos)\n",
    "for s in sentidos:\n",
    "    print (\"SENTIDO:\",s)\n",
    "    print (\"DEFINICION:\",s.definition())\n",
    "    print (\"EJEMPLOS:\",s.examples())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['In', 'computational', 'linguistics', ',', 'word-sense', 'disambiguation', '(', 'WSD', ')', 'is', 'an', 'open', 'problem', 'of', 'natural', 'language', 'processing', 'and', 'ontology', ',', 'which', 'governs', 'the', 'process', 'of', 'identifying', 'which', 'sense', 'of', 'a', 'word', '(', 'i.e', '.', 'meaning', ')', 'is', 'used', 'in', 'a', 'sentence', ',', 'when', 'the', 'word', 'has', 'multiple', 'meanings', '.']\n"
     ]
    }
   ],
   "source": [
    "import nltk\n",
    "#TOKENIZACIÓN#\n",
    "frase=nltk.word_tokenize(\"In computational linguistics, word-sense disambiguation (WSD) is an open problem of natural language processing and ontology, which governs the process of identifying which sense of a word (i.e. meaning) is used in a sentence, when the word has multiple meanings.\")\n",
    "print (frase)   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "In None\n",
      "computational computational\n",
      "linguistics linguistics\n",
      ", None\n",
      "word-sense None\n",
      "disambiguation disambiguation\n",
      "( None\n",
      "WSD None\n",
      ") None\n",
      "is be\n",
      "an an\n",
      "open open\n",
      "problem problem\n",
      "of None\n",
      "natural natural\n",
      "language language\n",
      "processing processing\n",
      "and None\n",
      "ontology ontology\n",
      ", None\n",
      "which None\n",
      "governs govern\n",
      "the None\n",
      "process process\n",
      "of None\n",
      "identifying identify\n",
      "which None\n",
      "sense sense\n",
      "of None\n",
      "a a\n",
      "word word\n",
      "( None\n",
      "i.e None\n",
      ". None\n",
      "meaning meaning\n",
      ") None\n",
      "is be\n",
      "used use\n",
      "in in\n",
      "a a\n",
      "sentence sentence\n",
      ", None\n",
      "when None\n",
      "the None\n",
      "word word\n",
      "has ha\n",
      "multiple multiple\n",
      "meanings meaning\n",
      ". None\n"
     ]
    }
   ],
   "source": [
    "#LEMATIZACIÓN\n",
    "for w in frase:\n",
    "    print (w,wn.morphy(w))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Synset('banks.n.01'), Synset('bank.n.01'), Synset('depository_financial_institution.n.01'), Synset('bank.n.03'), Synset('bank.n.04'), Synset('bank.n.05'), Synset('bank.n.06'), Synset('bank.n.07'), Synset('savings_bank.n.02'), Synset('bank.n.09'), Synset('bank.n.10'), Synset('bank.v.01'), Synset('bank.v.02'), Synset('bank.v.03'), Synset('bank.v.04'), Synset('bank.v.05'), Synset('deposit.v.02'), Synset('bank.v.07'), Synset('count.v.08')]\n",
      "------hypernyms------\n",
      "[Synset('woody_plant.n.01')]\n",
      "------hyponyms-------\n",
      "[Synset('aalii.n.01'), Synset('acacia.n.01'), Synset('african_walnut.n.01'), Synset('albizzia.n.01'), Synset('alder.n.02'), Synset('angelim.n.01'), Synset('angiospermous_tree.n.01'), Synset('anise_tree.n.01'), Synset('arbor.n.01'), Synset('aroeira_blanca.n.01'), Synset('ash.n.02'), Synset('australian_nettle.n.01'), Synset('balata.n.02'), Synset('bayberry.n.01'), Synset('bean_tree.n.01'), Synset('beech.n.01'), Synset('birch.n.02'), Synset('bitterwood_tree.n.01'), Synset('black_mangrove.n.01'), Synset('blackwood.n.02'), Synset('bloodwood_tree.n.01'), Synset('bonduc.n.02'), Synset('bonsai.n.01'), Synset('bottle-tree.n.01'), Synset('brazilian_ironwood.n.01'), Synset('brazilian_pepper_tree.n.01'), Synset('brazilwood.n.02'), Synset('breakax.n.01'), Synset('burma_padauk.n.01'), Synset('button_tree.n.01'), Synset('cabbage_tree.n.03'), Synset('calaba.n.01'), Synset('calabash.n.02'), Synset('camwood.n.01'), Synset('caracolito.n.01'), Synset('carib_wood.n.01'), Synset('cassia.n.01'), Synset('casuarina.n.01'), Synset('chaulmoogra.n.01'), Synset('chestnut.n.02'), Synset('chinaberry.n.02'), Synset('chinese_parasol_tree.n.01'), Synset('christmas_bush.n.01'), Synset('cinchona.n.02'), Synset('clusia.n.01'), Synset('cockspur.n.02'), Synset('cocobolo.n.01'), Synset('coffee.n.02'), Synset('conacaste.n.01'), Synset('coral_tree.n.01'), Synset('coralwood.n.01'), Synset('cork_tree.n.01'), Synset('dagame.n.01'), Synset('devilwood.n.01'), Synset('dhak.n.01'), Synset('dhawa.n.01'), Synset('dipterocarp.n.01'), Synset('dita.n.01'), Synset('divi-divi.n.02'), Synset('ebony.n.03'), Synset('elm.n.01'), Synset('fever_tree.n.01'), Synset('fig_tree.n.01'), Synset('fringe_tree.n.01'), Synset('giant_chinkapin.n.01'), Synset('gliricidia.n.01'), Synset('granadilla_tree.n.01'), Synset('guama.n.01'), Synset('guinea_pepper.n.02'), Synset('gum_tree.n.01'), Synset('gutta-percha_tree.n.01'), Synset('gutta-percha_tree.n.02'), Synset('gymnospermous_tree.n.01'), Synset('hackberry.n.01'), Synset('hazel.n.01'), Synset('hop_hornbeam.n.01'), Synset('hornbeam.n.01'), Synset('hydnocarpus_laurifolia.n.01'), Synset('ice-cream_bean.n.01'), Synset('idesia.n.01'), Synset('incense_tree.n.01'), Synset('indian_beech.n.01'), Synset('inga.n.01'), Synset('ivory_tree.n.01'), Synset('jamaica_dogwood.n.01'), Synset('jamaican_cherry.n.01'), Synset('japanese_pagoda_tree.n.01'), Synset('kentucky_coffee_tree.n.01'), Synset('ketembilla.n.01'), Synset('keurboom.n.01'), Synset('keurboom.n.02'), Synset('kingwood.n.02'), Synset('kino.n.02'), Synset('kowhai.n.01'), Synset('lacebark.n.01'), Synset('lancewood.n.02'), Synset('lanseh_tree.n.01'), Synset('laurelwood.n.01'), Synset('lead_tree.n.01'), Synset('lemonwood.n.02'), Synset('lepidobotrys.n.01'), Synset('linden.n.02'), Synset('locust_tree.n.01'), Synset('mahogany.n.02'), Synset('manila_tamarind.n.01'), Synset('marblewood.n.02'), Synset('maria.n.02'), Synset('marmalade_tree.n.01'), Synset('mayeng.n.01'), Synset('mescal_bean.n.01'), Synset('millettia.n.01'), Synset('montezuma.n.01'), Synset('msasa.n.01'), Synset('nakedwood.n.01'), Synset('necklace_tree.n.01'), Synset('neem.n.01'), Synset('nitta_tree.n.01'), Synset('oak.n.02'), Synset('oak_chestnut.n.01'), Synset('obeche.n.02'), Synset('opepe.n.01'), Synset('padauk.n.01'), Synset('palm.n.03'), Synset('palo_verde.n.01'), Synset('pandanus.n.02'), Synset('pepper_tree.n.01'), Synset('pepper_tree.n.02'), Synset('peruvian_balsam.n.01'), Synset('plane_tree.n.01'), Synset('pollard.n.01'), Synset('poon.n.02'), Synset('prickly_ash.n.01'), Synset('prickly_ash.n.02'), Synset('princewood.n.01'), Synset('puka.n.02'), Synset('quandong.n.01'), Synset('quandong.n.03'), Synset('quira.n.02'), Synset('red_sandalwood.n.02'), Synset('red_silk-cotton_tree.n.01'), Synset('ribbon_tree.n.01'), Synset('rose_chestnut.n.01'), Synset('rosewood.n.02'), Synset('sandalwood_tree.n.01'), Synset('sapling.n.01'), Synset('satinwood.n.03'), Synset('scarlet_wisteria_tree.n.01'), Synset('scrub_beefwood.n.01'), Synset('shade_tree.n.01'), Synset('shaving-brush_tree.n.01'), Synset('shingle_tree.n.01'), Synset('silver_ash.n.01'), Synset('silver_tree.n.01'), Synset('silver_tree.n.02'), Synset('sissoo.n.01'), Synset('snag.n.02'), Synset('soapberry.n.01'), Synset('souari.n.01'), Synset('southern_beech.n.01'), Synset('spanish_tamarind.n.01'), Synset('tanbark_oak.n.01'), Synset('teak.n.02'), Synset('timber_tree.n.01'), Synset('tipu.n.01'), Synset('tolu_tree.n.01'), Synset('tree_of_knowledge.n.01'), Synset('treelet.n.01'), Synset('trifoliate_orange.n.01'), Synset('tulipwood_tree.n.01'), Synset('turreae.n.01'), Synset('wheel_tree.n.01'), Synset('white_mangrove.n.01'), Synset('white_mangrove.n.02'), Synset('wild_fig.n.02'), Synset('wild_medlar.n.01'), Synset('wild_tamarind.n.02'), Synset('willow.n.01'), Synset('winter's_bark.n.02'), Synset('yellowwood.n.02'), Synset('zebrawood.n.02')]\n",
      "------synsets(good)--------\n",
      "[Synset('good.n.01'), Synset('good.n.02'), Synset('good.n.03'), Synset('commodity.n.01'), Synset('good.a.01'), Synset('full.s.06'), Synset('good.a.03'), Synset('estimable.s.02'), Synset('beneficial.s.01'), Synset('good.s.06'), Synset('good.s.07'), Synset('adept.s.01'), Synset('good.s.09'), Synset('dear.s.02'), Synset('dependable.s.04'), Synset('good.s.12'), Synset('good.s.13'), Synset('effective.s.04'), Synset('good.s.15'), Synset('good.s.16'), Synset('good.s.17'), Synset('good.s.18'), Synset('good.s.19'), Synset('good.s.20'), Synset('good.s.21'), Synset('well.r.01'), Synset('thoroughly.r.02')]\n"
     ]
    }
   ],
   "source": [
    "\n",
    "#JERRARQUÍA DE WORNET\n",
    "print (sentidos)\n",
    "print (\"------hypernyms------\")\n",
    "print (wn.synset('tree.n.01').hypernyms())\n",
    "print (\"------hyponyms-------\")\n",
    "print (wn.synset('tree.n.01').hyponyms())\n",
    "print (\"------synsets(good)--------\")\n",
    "print (wn.synsets('good'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Synset('be.v.01'), Synset('be.v.02'), Synset('be.v.03'), Synset('exist.v.01'), Synset('be.v.05'), Synset('equal.v.01'), Synset('constitute.v.01'), Synset('be.v.08'), Synset('embody.v.02'), Synset('be.v.10'), Synset('be.v.11'), Synset('be.v.12'), Synset('cost.v.01')]\n"
     ]
    }
   ],
   "source": [
    "word='is'\n",
    "sentidos=wn.synsets(word)\n",
    "print (sentidos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nltk.word_tokenize()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
