forked from explosion/spacy-course
-
Notifications
You must be signed in to change notification settings - Fork 0
/
solution_03_07.py
32 lines (27 loc) · 1.13 KB
/
solution_03_07.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import spacy
from spacy.language import Language
from spacy.matcher import PhraseMatcher
from spacy.tokens import Span
nlp = spacy.load("es_core_news_sm")
animals = ["labrador dorado", "gato", "tortuga", "oso de anteojos"]
animal_patterns = list(nlp.pipe(animals))
print("patrones_de_animales:", animal_patterns)
matcher = PhraseMatcher(nlp.vocab)
matcher.add("ANIMAL", None, *animal_patterns)
# Define el componente personalizado
@Language.component("animal_component")
def animal_component_function(doc):
# Aplica el matcher al doc
matches = matcher(doc)
# Crea un Span para cada resultado y asígnales el label "ANIMAL"
spans = [Span(doc, start, end, label="ANIMAL") for match_id, start, end in matches]
# Sobrescribe los doc.ents con los spans resultantes
doc.ents = spans
return doc
# Añade el componente al pipeline después del componente "ner"
nlp.add_pipe("animal_component", after="ner")
print(nlp.pipe_names)
# Procesa el texto e imprime en pantalla el texto y el label
# de los doc.ents
doc = nlp("Hoy vimos una tortuga y un oso de anteojos en nuestra caminata")
print([(ent.text, ent.label_) for ent in doc.ents])