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.
- Importa la clase
Spanish
despacy.lang.es
y crea el objetonlp
. - Crea un
doc
e imprime en pantalla su texto.
- Importa la clase
English
despacy.lang.en
y crea el objetonlp
. - Crea un
doc
e imprime en pantalla su texto.
- Importa la clase
German
despacy.lang.de
y crea el objetonlp
. - 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
.
- Importa la clase de lenguaje
Spanish
y crea el objetonlp
. - Procesa el texto y genera un
instance
de un objeto
Doc
en la variabledoc
. - Selecciona el primer token de
Doc
e imprime en pantalla sutext
.
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.
- Importa la clase de lenguaje
Spanish
y crea el objetonlp
. - 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 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")
.
- Procesa el texto del objeto
nlp
y crea undoc
. - 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.
- 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 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 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
. - 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
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 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.
- 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"
.
- 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.