title | description | prev | next | type | id |
---|---|---|---|---|---|
Capítulo 1: Encontrando palabras, frases, nombres y conceptos |
Este capítulo te mostrará las bases del procesamiento de texto con spaCy. Aprenderás acerca de las estructuras de datos, cómo trabajar con pipelines entrenados y cómo usar eastas estructuras y pipelines para predecir características lingüísticas en tu texto. |
/chapter2 |
chapter |
1 |
¡Para empezar, probemos spaCy! En este ejercicio vas a poder probar algunos de los 60+ lenguajes disponibles.
- Usa
spacy.blank
para crear un objetonlp
vacío para procesar español ("es"
). - Crea un
doc
e imprime su texto en la pantalla.
- Usa
spacy.blank
para crear un objetonlp
vacío para procesar inglés ("en"
). - Crea un
doc
e imprime su texto en la pantalla.
- Usa
spacy.blank
para crear un objetonlp
vacío para procesar alemán ("de"
). - Crea un
doc
e imprime su texto en la pantalla.
Cuando llamas nlp
sobre un string, spaCy primero genera tokens del texto y
crea un objeto del tipo documento (Doc
). En este ejercicio aprenderás más
sobre el Doc
, así como de sus views Token
y Span
.
- Utiliza
spacy.blank
para crear el objetonlp
para procesar español. - Procesa el texto y genera un
instance
de un objeto
Doc
en la variabledoc
. - Selecciona el primer token del
Doc
e imprime su texto (text
) en pantalla.
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.
- Utiliza
spacy.blank
para crear el objetonlp
para procesar español. - Procesa el texto y genera un
instance
de un objeto
Doc
en la variabledoc
. - 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 eldoc
parece un número. - Toma el token que sigue al token actual en el documento. El índice del
siguiente token en el
doc
estoken.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 pipelines incluyen parámetros binarios para poder predecir las anotaciones lingüísticas como part-of-speech tags, dependency labels o entidades nombradas.
Los pipelines entrenados te permiten generalizar basándote en un conjunto de ejemplos de entrenamiento. Una vez que 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 pipelines incluye un strings.json
que guarda las entradas en
el vocabulario del pipeline y el mapeo a los hashes. Esto le permite a spaCy
comunicarse únicamente en hashes y buscar el string correspondiente si es
necesario.
Los pipelines que estamos usando en este curso ya están pre-instalados. Para obtener más detalles sobre los pipelines entrenados 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 pipeline, llama a spacy.load
usando su nombre en string. Los
nombres de los pipelines 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 pipelines 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")
.
- Procesa el texto del objeto
nlp
y crea undoc
. - Por cada token, imprime en pantalla su texto, su
.pos_
(etiqueta gramatical) y su.dep_
(etiqueta de dependencia sintáctica).
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.
- Procesa el texto y crea un objeto
doc
. - Itera sobre los
doc.ents
e imprime en pantalla el texto de la entidad y el atributolabel_
.
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 siempre son 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 la etiqueta.
- Parece ser que el modelo no predijo "adidas zx". Crea un span para esos tokens manualmente.
- Para crear un
doc
llama el objetonlp
en un string de texto. Las entidades nombradas están disponibles como la propiedaddoc.ents
. - La forma más fácil de crear un objeto
Span
es usar la notación de slice - por ejemplodoc[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
desdespacy.matcher
. - Inicialízalo con el
vocab
compartido del objetonlp
. - 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 variablematches
. - Itera sobre los resultados y obtén el span resultante desde el índice
start
hasta el índiceend
.
- El vocabulario compartido está disponible como el atributo
nlp.vocab
. - Un 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
yend
de cada resultado describen el índice de inicio y el índice final de un span resultante. Para obtener el span puedes crear un slice deldoc
usando su inicio y final.
En este ejercicio practicarás escribir patrones más complejos usando diferentes atributos de los tokens y operadores.
- Escribe un patrón que únicamente encuentre menciones de las versiones completas 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 devolveráTrue
para los tokens que únicamente contienen dígitos.
- Escribe un patrón que únicamente encuentre formas de "descargar" (tokens
con el lemma "descargar") seguido por un token que tenga la etiqueta gramatical
"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"
.
- 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.