
Objet Spacy Pipeline pour nier les concepts dans le texte. Basé sur l'algorithme du NégEX.
NEGEX - Un algorithme simple pour identifier les résultats et les maladies infilaires dans les résumés de décharge Chapman, Bridewell, Hanbury, Cooper, Buchanan https://doi.org/10.1006/jbin.2001.1029
La version 1.0 est une mise à jour de version majeure fournissant une prise en charge de la nouvelle interface de Spacy 3.0 pour ajouter des composants de pipeline. En conséquence, il n'est pas compatible en arrière avec les versions précédentes de Negpacy.
Si votre projet utilise Spacy 2.3.5 ou plus tôt, vous devrez utiliser la version 0.1.9. Voir Archivé Readme.
Installez la bibliothèque.
pip install negspacyImporter la bibliothèque et le spacy.
import spacy
from negspacy . negation import NegexModèle de langage Spacy de chargement. Ajoutez un objet de pipeline négatif. Le filtrage sur les types d'entités est facultatif.
nlp = spacy . load ( "en_core_web_sm" )
nlp . add_pipe ( "negex" , config = { "ent_types" :[ "PERSON" , "ORG" ]})Voir les négations.
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 FalseEnvisagez de jumeler avec Scispacy pour trouver des concepts UMLS dans les négations de texte et de processus.
Désignate TermSet à utiliser, en_clinical est utilisé par défaut.
en = phrases pour le texte général de la langue anglaiseen_clinical par défaut = ajoute des phrases spécifiques au domaine clinique à l'anglais généralen_clinical_sensitivePour définir:
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 ()
}
)Remplacez tous les modèles par votre propre ensemble
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" ]
}
}
)Ajouter et supprimer les modèles individuels à la volée des ensembles dedans intégrés
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" ],
}
)Afficher les modèles utilisés
from negspacy . termsets import termset
ts = termset ( "en_clinical" )
print ( ts . get_patterns ())Selon le modèle de reconnaissance des entités nommé que vous utilisez, vous pouvez avoir des négations "regroupées" avec des noms. Par exemple:
nlp = spacy . load ( "en_core_sci_sm" )
doc = nlp ( "There is no headache." )
for e in doc . ents :
print ( e . text )
# no headache Cela ferait manquer l'algorithme du NégEX à manquer la négation précédente. Pour tenir compte de cela, vous pouvez ajouter 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 contributif
licence
Cette bibliothèque est présentée dans l'univers Spacy. Vérifiez-le pour d'autres bibliothèques utiles et inspiration.
Si vous recherchez un objet de pipeline spacy pour extraire des valeurs qui correspondent à une entité nommée (par exemple, les dates de naissance, les numéros de compte ou les résultats de laboratoire), jetez un œil à l'extraction.
