
Objeto de tubería de Spacy para negar conceptos en el texto. Basado en el algoritmo Negex.
Negex: un algoritmo simple para identificar hallazgos negados y enfermedades en los resúmenes de alta Chapman, Bridewell, Hanbury, Cooper, Buchanan https://doi.org/10.1006/jbin.2001.1029
La versión 1.0 es una actualización de versión principal que proporciona soporte para la nueva interfaz de Spacy 3.0 para agregar componentes de tubería. Como resultado, no es compatible con versiones anteriores con versiones anteriores de Negspacy.
Si su proyecto usa Spacy 2.3.5 o anterior, deberá usar la versión 0.1.9. Ver Readme archivado.
Instale la biblioteca.
pip install negspacyBiblioteca de importación y Spacy.
import spacy
from negspacy . negation import NegexCargar modelo de lenguaje espacial. Agregue el objeto de tubería Negspacy. Filtrar en los tipos de entidades es opcional.
nlp = spacy . load ( "en_core_web_sm" )
nlp . add_pipe ( "negex" , config = { "ent_types" :[ "PERSON" , "ORG" ]})Ver negaciones.
doc = nlp ( "She does not like Steve Jobs but likes Apple products." )
for e in doc . ents :
print ( e . text , e . _ . negex ) Steve Jobs True
Apple FalseConsidere emparejarse con Scispacy para encontrar conceptos UMLS en las negaciones de texto y procesos.
Designe TermSet para usar, en_clinical se usa de forma predeterminada.
en = frases para el texto general del idioma inglésen_clinical Default = agrega frases específicas para el dominio clínico al inglés generalen_clinical_sensitive = agrega frases adicionales para ayudar a descartar entidades históricas y posiblemente irrelevantesPara establecer:
from negspacy . negation import Negex
from negspacy . termsets import termset
ts = termset ( "en" )
nlp = spacy . load ( "en_core_web_sm" )
nlp . add_pipe (
"negex" ,
config = {
"neg_termset" : ts . get_patterns ()
}
)Reemplace todos los patrones con su propio conjunto
nlp = spacy . load ( "en_core_web_sm" )
nlp . add_pipe (
"negex" ,
config = {
"neg_termset" :{
"pseudo_negations" : [ "might not" ],
"preceding_negations" : [ "not" ],
"following_negations" :[ "declined" ],
"termination" : [ "but" , "however" ]
}
}
)Agregue y elimine los patrones individuales sobre la marcha de los conjuntos de términos incorporados
from negspacy . termsets import termset
ts = termset ( "en" )
ts . add_patterns ({
"pseudo_negations" : [ "my favorite pattern" ],
"termination" : [ "these are" , "great patterns" , "but" ],
"preceding_negations" : [ "wow a negation" ],
"following_negations" : [ "extra negation" ],
})
#OR
ts . remove_patterns (
{
"termination" : [ "these are" , "great patterns" ],
"pseudo_negations" : [ "my favorite pattern" ],
"preceding_negations" : [ "denied" , "wow a negation" ],
"following_negations" : [ "unlikely" , "extra negation" ],
}
)Ver patrones en uso
from negspacy . termsets import termset
ts = termset ( "en_clinical" )
print ( ts . get_patterns ())Dependiendo del modelo de reconocimiento de entidad nombrado que esté utilizando, puede tener negaciones "fragmentadas" con sustantivos. Por ejemplo:
nlp = spacy . load ( "en_core_sci_sm" )
doc = nlp ( "There is no headache." )
for e in doc . ents :
print ( e . text )
# no headache Esto haría que el algoritmo Negex se pierda la negación anterior. Para tener en cuenta esto, puede agregar un chunk_prefix :
nlp = spacy . load ( "en_core_sci_sm" )
ts = termset ( "en_clinical" )
nlp . add_pipe (
"negex" ,
config = {
"chunk_prefix" : [ "no" ],
},
last = True ,
)
doc = nlp ( "There is no headache." )
for e in doc . ents :
print ( e . text , e . _ . negex )
# no headache True que contribuye
licencia
Esta biblioteca aparece en el universo Spacy. Compruébalo para otras bibliotecas e inspiración útiles.
Si está buscando un objeto de tubería espacial para extraer valores que corresponden a una entidad nombrada (por ejemplo, fechas de nacimiento, números de cuenta o resultados de laboratorio), eche un vistazo a la extracción.
