<jupyter_start><jupyter_text>El texto para trabajar será:<jupyter_code>import requests

url = 'https://raw.githubusercontent.com/apimentelaUP/recursos/master/IslaMisteriosa.txt'
page = requests.get(url)
texto = page.text
!pip install sentence_splitter
import nltk
nltk.download("punkt")<jupyter_output>[nltk_data] Downloading package punkt to /root/nltk_data...
[nltk_data]   Unzipping tokenizers/punkt.zip.<jupyter_text>La tarea es obtener un modelo de lenguaje basado en bigramas que nos permita calcular la probabilidad de una palabra dada la anterior.<jupyter_code>from sentence_splitter import SentenceSplitter
splitter = SentenceSplitter(language = 'es')

oraciones = splitter.split(texto)
oraciones_tokenizadas = []
for oracion in oraciones:
   tokens = nltk.word_tokenize(oracion,"spanish")
   oraciones_tokenizadas.append(tokens)

oraciones_tokenizadas[0][0]
for i, oracion in enumerate(oraciones_tokenizadas):
  oraciones_tokenizadas [i] = ["<s>"] + oracion + ["</s>"]
print(oraciones_tokenizadas[0])<jupyter_output>['<s>', 'Durante', 'la', 'guerra', 'civil', 'americana', ',', 'cinco', 'hombres', 'logran', 'escapar', 'del', 'asedio', 'de', 'Richmond', 'en', 'un', 'globo', 'aerostático', 'que', 'acaba', 'estrellándose', 'en', 'una', 'isla', 'desierta', '.', '</s>']<jupyter_text>La lista de oraciones<jupyter_code>bigramas_oraciones = []
unigramas_oraciones = []

for oracion in oraciones_tokenizadas:
  bigramas = nltk.ngrams(oracion,2)
  bigramas_oraciones.append(bigramas)
  unigramas = nltk.ngrams(oracion,1)
  unigramas_oraciones.append(unigramas)
for gramas in unigramas_oraciones [0]:
  print(gramas)
unigramas = [j for i in unigramas_oraciones for j in i]
bigramas = [ j for i  in bigramas_oraciones for j in i]<jupyter_output><empty_output><jupyter_text>para hacer los conteos rápidos (frecuencias) utilizamos coleections<jupyter_code>import collections

frecuencia_unigramas = collections.Counter(unigramas)
frecuencia_bigramas = collections.Counter(bigramas)

numerador = frecuencia_bigramas[('hacerlo','callar')]
denominador = frecuencia_unigramas[('hacerlo',)]

print(numerador/denominador)<jupyter_output>0.06666666666666667<jupyter_text>para probabilidades condicionales (probabilidad de x dado y utilizamos Conditional FreqDist<jupyter_code>from nltk.probability import ConditionalFreqDist
frecuencias_condicionales = ConditionalFreqDist()
condicion = ('hacerlo',)

for unigrama in frecuencia_unigramas.keys():
  frecuencia = frecuencia_bigramas[condicion + unigrama]
  if frecuencia:
    frecuencias_condicionales[condicion][unigrama] = frecuencia
palabra_mayor =frecuencias_condicionales[condicion].max()
print(palabra_mayor)

frecuencias_condicionales[condicion]<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11820851688693099, 'fraction_numerical': 0.00881057268722467, 'mean_word_length': 8.144295302013424, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 22, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 1, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '343638', 'license': 'MIT', 'n_tokens_mistral': 1051, 'n_tokens_neox': 1041, 'n_words': 190, 'path': 'Materias/ProcesamientoLenguaje/Clases/S04_008_n-gramas.ipynb', 'repo_name': 'jorgeo80/UP_MDC', 'size': '2724'}