Skip to content

Latest commit

 

History

History
332 lines (226 loc) · 11 KB

chapter1.md

File metadata and controls

332 lines (226 loc) · 11 KB
title description prev next type id
Capítulo 1: Encontrando palabras, frases, nombres y conceptos
Este capítulo te introducirá en lo básico del procesamiento de texto con spaCy. Aprenderás sobre las estructuras de datos, cómo trabajar con modelos estadísticos y cómo usarlos para predecir características lingüísticas en tu texto.
/chapter2
chapter
1

¡Empecemos y probemos spaCy! En este ejercicio vas a poder probar algunos de los 55+ lenguajes disponibles.

Parte 1: Español

  • Importa la clase Spanish de spacy.lang.es y crea el objeto nlp.
  • Crea un doc e imprime en pantalla su texto.

Parte 2: Inglés

  • Importa la clase English de spacy.lang.en y crea el objeto nlp.
  • Crea un doc e imprime en pantalla su texto.

Parte 3: Alemán

  • Importa la clase German de spacy.lang.de y crea el objeto nlp.
  • Crea un doc e imprime en pantalla su texto.

Cuando llamas nlp sobre un string, spaCy primero genera tokens del texto y crea un objeto de documento. En este ejercicio aprenderás más sobre el Doc, así como de sus views Token y Span.

Paso 1

  • Importa la clase de lenguaje Spanish y crea el objeto nlp.
  • Procesa el texto y genera un instance de un objeto Doc en la variable doc.
  • Selecciona el primer token de Doc e imprime en pantalla su text.

Puedes indexar un Doc de la misma manera en la que indexas en una lista de Python. Por ejemplo, doc[4] dará como resultado el token en el índice 4, que es el quinto token en el texto. Recuerda que en Python el primer índice es 0 y no 1.

Paso 2

  • Importa la clase de lenguaje Spanish y crea el objeto nlp.
  • Procesa el texto y genera un instance de un objeto Doc en la variable doc.
  • Crea un slice de Doc para los tokens "panteras negras" y "panteras negras y los leones".

Crear un slice de Doc funciona exactamente como creando un slice de una lista de Python usando la notación :. Recuerda que el último token del índice es excluyente - por ejemplo, 0:4 describe los tokens 0 hasta el token 4, pero no incluye el token 4.

En este ejemplo usarás los objetos Doc y Token de spaCy y los atributos léxicos para encontrar porcentajes en el texto. Estarás buscando dos tokens subsecuentes: un número y un símbolo de porcentaje.

  • Usa el atributo like_num del token para revisar si un token en el doc parece un número.
  • Toma el token que sigue al token actual en el documento. El índice del siguiente token en el doc es token.i + 1.
  • Revisa si el atributo text del siguiente token es un símbolo de porcentaje "%".

Para obtener el token en un índice específico, puedes indexar el doc. Por ejemplo, doc[5] es el token en el índice 5.

¿Qué no está incluido en un paquete con un modelo que puedes cargar a spaCy?

Todos los modelos incluyen un meta.json que define el lenguaje que será inicializado, los nombres de los componentes del pipeline que serán cargados, así como metadatos como el nombre del modelo, versión, licencia, fuentes de los datos, autor y cifras sobre la precisión del modelo (si están disponibles).

Los modelos incluyen parámetros binarios para poder predecir las anotaciones lingüísticas como part-of-speech tags, dependency labels o entidades nombradas.

Los modelos estadísticos te permiten generalizar basándote en un set de ejemplos de entrenamiento. Una vez están entrenados, usan los parámetros binarios para hacer predicciones. Es por esto que no es necesario incluir los datos de entrenamiento.

Los paquetes de modelo incluye un strings.json que guarda las entradas en el vocabulario del modelo y el mapping a los hashes. Esto le permite a spaCy comunicarse únicamente en hashes y buscar el string correspondiente si es necesario.

Los modelos que estamos usando en este curso ya están pre-instalados. Para obtener más detalles sobre los modelos estadísticos de spaCy y cómo instalarlos en tu máquina revisa la documentación.

  • Usa spacy.load para cargar el modelo pequeño de español "es_core_news_sm".
  • Procesa el texto e imprime en pantalla el texto del documento.

Para cargar el modelo, llama a spacy.load usando su nombre en string. Los nombres de los modelos se diferencian dependiendo del lenguaje y los datos con los que fueron entrenados. Así que asegúrate de que estés usando el nombre correcto.

Ahora puedes probar uno de los paquetes de modelos pre-entrenados de spaCy y ver sus predicciones en acción. ¡También puedes intentarlo con tu propio texto! Para averiguar lo que cada tag o label significa puedes llamar a spacy.explain en el loop. Por ejemplo, spacy.explain("PROPN") o spacy.explain("GPE").

Parte 1

  • Procesa el texto del objeto nlp y crea un doc.
  • Para cada token imprime en pantalla su texto, su .pos_ (part-of-speech tag) y su .dep_ (dependency label).

Para crear un doc llama el objeto nlp en un string de texto. Recuerda que necesitas usar los nombres de los atributos de los tokens con un guion bajo (_) para obtener el valor del string.

Parte 2

  • Procesa el texto y crea un objeto doc.
  • Itera sobre los doc.ents e imprime en pantalla el texto de la entidad y el atributo label_.

Para crear un doc llama el objeto nlp en un string de texto. Recuerda que necesitas usar los nombres de los atributos de los tokens con un guion bajo (_) para obtener el valor del string.

Los modelos son estadísticos y no son siempre correctos. La corrección de sus predicciones depende de los datos de entrenamiento y del texto que estás procesando. Veamos un ejemplo.

  • Procesa el texto con el objeto doc.
  • Itera sobre las entidades e imprime en pantalla el texto de la entidad y el label.
  • Parece ser que el modelo no predijo "adidas zx". Crea un span para esos tokens manualmente.
  • Para crear un doc llama el objeto nlp en un string de texto. Las entidades nombradas están disponibles como la propiedad doc.ents.
  • La forma más fácil de crear un objeto Span es usar la notación de slice - por ejemplo doc[5:10] para el token en la posición 5 hasta la posición 10. Recuerda que el último índice del token es excluyente.

Probemos el Matcher basado en reglas de spaCy. Vas a usar un ejemplo del ejercicio anterior y escribirás un patrón que encuentre la frase "adidas zx" en el texto.

  • Importa el Matcher desde spacy.matcher.
  • Inicialízalo con el vocab compartido del objeto nlp.
  • Crea un patrón que encuentre los valores "TEXT" de dos tokens: "adidas" y "zx".
  • Usa el método matcher.add para añadir el patrón al matcher.
  • Llama al matcher en el doc y guarda el resultado en la variable matches.
  • Itera sobre los resultados y obtén el span resultante desde el índice start hasta el índice end.
  • El vocabulario compartido está disponible como el atributo nlp.vocab.
  • El patrón es una lista de diccionarios que utiliza los nombres de los atributos como keys. Por ejemplo, [{"TEXT": "Hola"}] encontrará un token cuyo texto exacto sea "Hola".
  • Los valores start y end de cada resultado describen el índice de inicio y el índice final de un span resultante. Para obtener el span puedes crear un slice del doc usando su inicio y final.

En este ejercicio practicarás escribir patrones más complejos usando diferentes atributos de los tokens y operadores.

Parte 1

  • Escribe un patrón que únicamente encuentre menciones de las versiones enteras de iOS: "iOS 7", "iOS 11" and "iOS 10".
  • Para encontrar el token con el texto exacto puedes usar el atributo TEXT. Por ejemplo, {"TEXT": "Apple"} encontrará tokens que tengan el texto exacto "Apple".
  • Para encontrar un token de número puedes usar el atributo "IS_DIGIT" que únicamente devolverá True para los tokens que solo tienen dígitos.

Parte 2

  • Escribe un patrón que únicamente encuentre formas de "descargar" (tokens con el lemma "descargar") seguido por un token que tenga el part-of-speech tag "PROPN" (proper noun).
  • Para especificar un lemma puedes usar el atributo "LEMMA" en el patrón de tokens. Por ejemplo, {"LEMMA": "ser"} va a encontrar los tokens como "soy", "siendo" o "seré".
  • Para encontrar nombres propios puedes encontrar todos los tokens que tengan "PROPN" como el valor del "POS".

Parte 3

  • Escribe un patrón que encuentre un sustantivo "NOUN" seguido de uno o dos adjetivos "ADJ"(un adjetivo y un adjetivo opcional).
  • Para encontrar adjetivos busca los tokens que tengan como valor "ADJ" en su "POS". Para sustantivos busca "NOUN".
  • Los operadores pueden ser añadidos a través del key "OP". Por ejemplo, "OP": "?" para encontrar cero o una vez.