
Objeto de pipeline espacial para negar conceitos no texto. Com base no algoritmo NEGEX.
NEGEX - Um algoritmo simples para identificar achados e doenças negadas nos resumos de alta Chapman, Bridewell, Hanbury, Cooper, Buchanan https://doi.org/10.1006/jbin.2001.1029
A versão 1.0 é uma atualização de versão principal, fornecendo suporte para a nova interface do Spacy 3.0 para adicionar componentes de pipeline. Como resultado, não é compatível com versões anteriores do Negspacy.
Se o seu projeto usar o Spacy 2.3.5 ou anterior, você precisará usar a versão 0.1.9. Veja Readme arquivado.
Instale a biblioteca.
pip install negspacyBiblioteca de importação e Spacy.
import spacy
from negspacy . negation import NegexCarregar Modelo de Linguagem Spacy. Adicione o objeto Negspacy Pipeline. A filtragem nos tipos de entidade é opcional.
nlp = spacy . load ( "en_core_web_sm" )
nlp . add_pipe ( "negex" , config = { "ent_types" :[ "PERSON" , "ORG" ]})Ver negações.
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 emparelhar com o Scispacy para encontrar conceitos da UMLS em negações de texto e processo.
Designate TermSet para usar, en_clinical é usado por padrão.
en = frases para texto em geral em inglêsen_clinical default = adiciona frases específicas ao domínio clínico ao inglês geralen_clinical_sensitive = adiciona frases adicionais para ajudar a descartar entidades históricas e possivelmente irrelevantesPara definir:
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 ()
}
)Substitua todos os padrões por seu próprio 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" ]
}
}
)Adicione e remova os padrões individuais em tempo real de termos internos
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" ],
}
)Visualizar padrões em uso
from negspacy . termsets import termset
ts = termset ( "en_clinical" )
print ( ts . get_patterns ())Dependendo do modelo de reconhecimento de entidade nomeado que você está usando, você pode ter negações "juntas" com substantivos. Por exemplo:
nlp = spacy . load ( "en_core_sci_sm" )
doc = nlp ( "There is no headache." )
for e in doc . ents :
print ( e . text )
# no headache Isso faria com que o algoritmo NEGEX perdesse a negação anterior. Para explicar isso, você pode adicionar um 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 contribuindo
licença
Esta biblioteca é apresentada no Universo Spacy. Confira para outras bibliotecas e inspiração úteis.
Se você está procurando um objeto de oleoduto Spacy para extrair valores que correspondem a uma entidade nomeada (por exemplo, datas de nascimento, números de conta ou resultados do laboratório), dê uma olhada na extração.
